Original Spec for Lotus Notes (1984) [pdf] - <AUTHOR> http://www.kapor.com/wp-content/uploads/2016/12/Notes-Project.pdf <comment><USER3> A well run Notes system was a real pleasure to deal with. I worked for a 300-ish employee company spread over 4 countries and 2 US states around 2001-2004 and we used Notes for all internal document management, email and later even web content management. The thing just quietly kept everything in sync; distributed servers, mobile users and their laptops and traditional desktops, and never lost a byte of it despite flaky VPN connections, ISP service, change conflicts, abusive use cases, multiple Notes client and server versions, etc.

I haven't dealt with any Notes systems in years, but my memories of the one time I did are largely good. The client had its quirks and Lotus could have done themselves a big service if they had adopted more conventional behavior and terminology, but the end user experience -- judging by easy adoption by new employees -- wasn't as bad as is frequently alleged.

<comment><USER4> I used to work for a company that built Notes apps in the mid 90s, and while the UI was clunky as hell, it was a great tool.

I was a big fan of the Domino back end too, in spite of the ridicule it got. When Couch and Mongo came out, it was kinda refreshing to me to see "document" oriented dbs come back.

<comment> open-source-ux _"...the UI was clunky as hell..."_

The Interface Hall of Shame website (a now defunct, but once popular website with examples of badly designed UIs) did a critique of Lotus Notes back in 1999:

[http://hallofshame.gp.co.at/index.php?file=lotus.htm&mode=or...](http://hallofshame.gp.co.at/index.php?file=lotus.htm&mode=original)

<comment><USER5> Most of what's listed there is about bad application development (error checking and so forth). Many other complaints come from the fact that Notes was multi-platform (Win, Mac, OS/2, many Unices) and was consistent across all clients, rather than trying to look native in any one of them. The thing about that site that gives me the greatest kicks is that the pages of application tiles on the workspace has since become _the_ way to do things, the only real changes being colour depth, screen resolution and vogue colour choices. (About F5/F9: F5 didn't mean "refresh" to anybody until MSIE came along; F9 did.)

</comment></comment></comment></comment><comment><USER6> Notes is a real mixed bag. On the plus side, its open-ended, fully customizable document database is a phenomenally powerful tool for creating information management systems that map very closely to the unique workflows and structures that arise in any business. As an expression of the promise of office automation, it's pretty compelling.

On the other hand, it's the world's worst email & calendar client and much of its bad reputation stems from users having to put up with that when there's really no need for it ever to have been installed. (EDIT: given that, it's interesting to see the prominence that email receives in the design doc. I'd always thought it was a post-Lotus bolt on, but it was a day zero consideration.)

But far, far worse than that is the stuff you don't realize when you embark on the Notes path. It's a very powerful tool, but a dangerous one too: I saw a telecoms company in the late 90s/early 2000s blow up partly because it relied too heavily on a custom Notes solution that became prohibitively expensive to change as the business evolved. Management got hooked on formalizing all their business processes inside Notes, seduced by the promise of total transparency and operational control. The system got big, and Notes scales badly. Reporting runs that took a few minutes with a few hundred attributed documents in 1998 took over four hours by 2000; I helped put in a SQL Server instance to create a relationally structured copy of the unstructured attributed documents to reduce that time, but of course that was more money. The poor chap that owned the company ended up having a stroke and the company was wound down. That's an anecdote, but on the other two occasions I've seen Notes used for its real value (as a document DB with associated processes) it's ended up in a similar, sprawling and unmaintainable end state.

I guess one way to think of it is as a kind of Excel for processes and documents. End users can do things with it very easily - you can set stuff up that exactly reflects the flow of information and control processes unique to a business, and that's a great tool for helping a business mature and control its operational risks - but its limitations and the systemic risk it introduces are not well understood and only become apparent when you've gone too far with it.

<comment><USER7> > solution that became prohibitively expensive to change as the business > evolved

That sounds like bad coding. The downfall of many Notes systems is that it made it so easy to write simple apps, you ended up with a lot of poorly written apps because you did not need to be a proficient coder to deliver a working product. I, too, have seen downright horrific apps. I've seen teams of consultants hired just to maintain one form. And I've come in, re-written those apps (still in Notes), and turned them into self-maintaining, scalable apps that are 100% maintained by the business owners.

At the end of the day, it is a technology stack. People can use it well, or they can use it badly.

<comment><USER6> It was more that you had a set of Notes documents and associated workflows which conformed perfectly to business operations when created, but then gradually got heavier and harder to change as they were adapted along with the business. There was nothing wrong with the coding as such, more the accrual of features and exceptions and new types of related document.

It's a kind of tech debt for which a re-write is the appropriate solution, but that was the prohibitively expensive part.

</comment></comment></comment><comment><USER8> The timelessness of the promises made in this specification are very interesting to me. A more idealistic (and younger) version of me would love to help build an open platform that could fulfill a lot of these promises, likely just because it's fun to build platforms. No doubt it such an effort would also be doomed to relative obscurity, not unlike the other various collaboration platforms that come to mind (Microsoft Exchange as an application platform, FileMaker, and of course, Notes itself).

<comment><USER9> _The timelessness of the promises made in this specification are very interesting to me._

To me as well. Reading the PDF, it reminds me of WinFS, which I worked on. (Though I don't remember WinFS's collaboration story.)

 _Dreaming in Code_ [1] is a great book about Kapor's attempt to build such an open source platform, post-Notes. I strongly recommend it to anyone interested in the problem space.

[1] [https://www.amazon.com/Dreaming-Code-Programmers- Transcenden...](https://www.amazon.com/Dreaming-Code-Programmers-Transcendent- Software/dp/1400082471)

 _A more idealistic (and younger) version of me would love to help build an open platform..._

This is still my dream. :)

<comment><USER8> I have no specific questions to ask, but I'm intrigued to hear you worked on WinFS. WinFS is something I wish happened, albeit I'm sure that what I thought it was wasn't what it actually was (since I never actually used it, wrote any code the APIs, etc, I can't ever be sure).

I was enamored with BeFS. When I heard about WinFS I was excited to think it might bring some of the coolness that BeFS provided to a mass audience. It's a shame what happened to both BeFS and WinFS.

Thanks for the link to the book. I had no idea that it existed. For awhile I kept checking-in on Chandler, hoping it was going to actually happen.

<comment><USER10> I too was sad to see Chandler die as well. It looks like the source was imported into github:

[https://github.com/owenmorris/chandler](https://github.com/owenmorris/chandler) [https://github.com/owenmorris/chandler2](https://github.com/owenmorris/chandler2)

</comment></comment></comment></comment><comment><USER11> I spent my years struggling with Notes. See the second paragraph below, for what I'm told is some balance.

In good part, this consisted of problems and cruftiness with the UI, and Management's use of it for a blizzard of very verbose, fragmented, and therefore difficult and time-consuming to navigate documentation. E.g. what should have been one quarter or half page document -- at most -- ended up spread, sentence by sentence, checkbox by checkbox, around 30 - 50 Notes documents within an often overwhelming hierarchy of template documents only sparsely completed to alleviate the most annoying and insistent badgering of project managers and the like -- the only ones to really seem to have any oversight over the whole documentation package and to feel any ownership of same. (The rest of us? Hate, hate, hate... Not for the idea of documentation, but for the reality that could make it more difficult than the project itself.)

Eventually, I came across a description of Notes that commiserated with this state of things but also said, 'Hey, wait. You should understand that the technical design and underpinnings of Notes itself -- its data management -- was actually quite solid and innovative.

And... I guess I could see that, in terms of how it generally held up to the abuse of an entire, large corporation's daily use and abuse of it. And how it could work well, when somebody clue-full laid their hands on it.

I'm not in a position to speak to this, further. Except to say that there are a few documents out there -- that I skimmed, a long time ago -- that apparently paint a pretty good picture of this upside of Notes. Those in the know describe them as interesting and edifying.

P.S. If and as I recall, Kapor was also responsible for Lotus 1,2,3 , which was initially far ahead of Excel and had a perspective on data representation that took a long time to propagate to its competitors.

</comment><comment><USER12> I appreciated the nosql-like database model of a "notes" and "views". It inspired the way I managed data for the remainder of my career. I believe the concept of "tags" of flickr or "labels" of gmail are Notes-inspired concepts.

Maybe it doesn't scale well for late 90's internet-enabled desktops, but Ray Ozzie developed software with a solid 15-year shelf life.

I'm happy to have had the few years experience as a lotus notes developer, and also happy to have it in my past.

<comment><USER13> Absolutely agree. I spent a lot of time in Notes, read all the blogs, and had all the certifications. It definetly shaped how I look at things even 15 years later. The combination of the ACL, reader / author fields, views, agents, and forms was beautiful

<comment><USER14> What do you think fills that role Notes had today? Or would you say it's split between various products/services?

</comment></comment></comment><comment><USER15> The date on Mitch and Ray's spec is December 1984 and we designed most of the core parts of Notes soon after that in 1985.

Sorry to hear that many of you had to deal with our 1985 design choices all through the subsequent years. But I think many of the commenters here are maybe forgetting or not aware of what personal computing and networking were like 32 years ago: Windows 1.0 (beta), EGA graphics (640×350 w/16 colors), 640KB main memory (kilobytes not megabytes), Ethernet/TokenRing LANs, dial-up 9600 baud modems (kilobits/sec not megabits/sec or gigabits/sec). [https://en.wikipedia.org/wiki/Windows_1.0](https://en.wikipedia.org/wiki/Windows_1.0)

The Internet was just being formed out of the Arpanet and other research networks. Mail services and protocols like SMTP and POP3 didn't exist.

We worked with Ron Rivest to define BSAFE and build the first real commmercial product with public key crypto.

As far as the Notes database (again circa 1984): it seemed obvious to us, especially Ray, that relational was not the best model, but we took endless grief for not using a relational database.

In hindsight, we obviously could have made quite a few better decisions and evolved the design and code more quickly, but as one commenter pointed out, we were trying to maintain app and data compatibility across multiple client and server software and hardware environments that were continually evolving around us.

</comment><comment><USER16> I used and developed in Lotus Notes for 13 years. All those years I heard how Notes was awful, and how wonderful Exchange and Outlook where... so when I changed company to a Microsoft centric one, in 2014, I was (eager and) prepared to be blown away by the Exchange + SharePoint + Outlook 2013 combination. Oh boy, was I wrong. Lotus Notes runs circles around the E+S+O combination. There is no way that they can touch the power and flexibility of Notes. I was even SHOCKED to see how HORRIBLE the Outlook interface is. How poor it is for a product that does two things: email and calendar. Also, I was shocked how horrible Skype for business is compared to Sametime... And I still don't get how Control-F is not FIND in Outlook...

</comment><comment><USER17> I've seen Lotus Notes client installation's folder being migrated from Windows XP to Windows 7 then onto RHEL and finally onto macOS.

Suffice to say that all of the user settings were preserved and the data was readily usable on each platform. This happened over the span of 10 years.

Given the observation, I wonder how many other applications with similar complexity would last even one migration, let alone rolling migration across 4 completely different platforms.

<comment><USER16> I have done a Windows Server, to Linux to AIX... it was only a matter of moving the "DATA" folder... and it worked perfectly each time...

<comment><USER18> Once they introduced transactional logging (highly recommended for busy systems) there were a few more steps to the migration, but they are all well documented and surprisingly resilient.

I managed to migrate a few TB of email from a dying server and it handled mid migration crashes surprisingly well!

I think the domino stack was getting better while the notes client was losing the plot. Most people where I used to work were happiest with mobile clients connected via exchange active sync to the domino servers.

</comment></comment></comment><comment><USER19> "Notes is a document creation, editing, and storage system."

Strangely, at the last (and only, thankfully) place where I had to use Notes, it was not used for that purpose. Instead, it was used as an e-mail system and an inventory management tool.

<comment><USER20> I actually found Notes to be an amazing tool and found it to be a great system to work with. I just wish they kept the development going with a strong user experience in mind.

I found my love of using PIM in Notes.

<comment><USER21> It seems like everybody who ever used Notes either loved it or hated it. Makes me wish I'd ever used it. Or glad I haven't?

<comment><USER20> You can still use it.

The UI was not for the Non-Tech crowd and even then drove everyone a little batty. F5 in Notes locked your account as opposed to Refresh and the like. Different parts of the program would have very different UIs. I didn't mind it.

They say more people use it now then ever but ....

</comment></comment></comment></comment><comment><USER22> I wonder if anyone wrote a free or open source version of Lotus Notes? I think IBM stopped supporting it after a while. It is a shame that IBM bought out Lotus and couldn't keep the Lotus software current and up to date.

A local newspaper used Lotus Notes to serve up stories on their website, before Python Django replaced it.

<comment><USER23> I was going to link to IBM Lotus Symphony[1] in response to your question but it turns out it's only tangentially related to Notes, sharing some marketing names and, eventually, included with Notes (version 8 I think).

Symphony was initially proprietary, then freeware and finally, in 2012, turned over to the ASF as a donation. It basically consisted of a typical spreadsheet, word processor, presentation suite all using ODF as a document format.

So, not what I thought I would find but still slightly related to your question...

[1] [https://en.wikipedia.org/wiki/IBM_Lotus_Symphony](https://en.wikipedia.org/wiki/IBM_Lotus_Symphony)

<comment><USER24> Symphony was Openoffice shoved into an Eclipse UI.

<comment><USER23> Hah, yeah, that's a good way to put it. For some reason I had it in my head that Notes got carried along with Symphony but it turns out it was the other way around with Symphony being given away as a free add on to Notes.

I had the "pleasure" of using a Notes/Domino solution back in the mid 90's but it was only for a couple of months; when I joined they were most of the way through a migration to MS Exchange/Office. Can't say I loved/hated it with the same zeal as other posters, just didn't have enough time to form an opinion at the time.

</comment></comment></comment></comment><comment><USER25> It's hard to convey how forward thinking Notes was back in the day - <USER2> replicated, document oriented database with encryption and visual user oriented programming.

Some loved it, some hated it but it was certainly unique.

I'm happy not to be using it any more but I thank Lotus Notes for paying my rent and food bills for a long time.

</comment><comment><USER26> Whilst Notes had it's frustrations (mainly as a user revolving around its insistence on using its own terminology and layout for everything), I thought it had strong points that made it an excellent tool for knowledge management.

Notes databases were easily replicated for offline use and encrpyted for data security (when I was using it was back in the mid 2000's before Full disk encryption became common).

In the days of poor Internet connectivity this made it immensely valuable for travelling consultants who could easily take large quantities of information on the move with them and synch it when in the office.

These days for end users I guess OneNote comes closest to that, but even there I don't think it has all the features that Notes did...

</comment><comment><USER13> I cut my teeth on Lotus Notes straight out of school. It was way ahead of its time and anyone who knows about Ray Ozzie knows that dude puts out good kit. Bill Gates didn't make him CTO for nothing.

Anyone who reduced it to a email client didn't understand where its true powered lied which was workflow and document / record management. If you knew how to combine the ACL with forms, views, and agents you could build some pretty amazing apps really quickly. Unfortunately it was always known as a email client which was actually just a Lotus Notes App.

<comment><USER27> I'm currently working in a patent law firm in Japan, and we make heavy use of Notes to manage work we bill and to manage all the information relating to filing cases and managing the client correspondence for each case. There's a myriad of forms but it all (still) works.

Naturally at this point we use a different email client, but I don't think there's any incentive to shift away from Notes as it just works.

</comment></comment><comment><USER28> My first experience with Notes was in grad school in 1992. It looked ugly and didn't make much sense to my relationally-educated brain.

I bumped into it again in the mid-90s when Notes 3 was released and the lightbulb went off. I became a Notes developer overnight.

Things Notes solved years before its time include:

1\. distributed databases everywhere even over a crappy pipe

2\. distributed software releases through replication (this was genius - everyone forgets in the 90s most end-user software was still distributed on floppies, but with Notes you just push the design out in a replica and all of your end-users get their client apps magically updated)

3\. A fully integrated visual app dev + server admin platform that made design of apps a snap. It became possible to sit down with a team and instead of writing down requirements, actually _building a working model of the app in the meeting as they describe their needs_. This was 1994, and it's still hard to do in most development environments compared to the ease of Notes.

4\. Public-Private key identity management and a terrific security model all the way down. It made it very easy to enforce a very granular security policy across all the apps down to individual rows of data with the same global security mechanism. As a dev it made it trivial to build a highly secure app without having to think much at all about security.

5\. OS independence!

I worked in one shop in a ~$1B/rev company in 1997 - this team had 3 admins and 4 devs handling email and all the internal corporate apps, pretty much all built in Notes except the financial system which was its own team. This company had fully embraced Notes as an internal app dev platform and had built a marvelously powerful set of workflow apps for all of their core business processes - some 30+ apps total - all of which integrated with each other.

Watching a team of 7 people manage and develop this awesome backoffice system was a big eye opener for me. This company leveraged their IT staff 10:1 or better compared to similar companies using typical tools. A well-run Notes shop in the Glory Years of Notes (1995-2005) was truly a sight to behold.

My longest-lived solutions are Notes apps I built ~16 years ago still being used today.

Fun fact: CouchDB was built by Damien Katz based on a lot of his experience working on Notes / Domino while at Lotus, and Damien Katz is a badass it turns out.

</comment><comment><USER29> Considering the relatively positive comments here and its prominence, it is fairly interesting that there are no notable FOSS alternatives for Notes, not at least any that I'd know of. I suppose writing corporate software is not that sexy, but on the other hand I'd imagine document management is something that would be a itch to be scratched even in personal use (it certainly is for me)

<comment><USER30> CouchDB is the FOSS alternative to the Notes (Domino) back-end database. Other alternatives exist for the user directory, PKI, web application server, messaging, etc. No single FOSS alternative contains _everything_ , but you can stitch together a substitute out of various pieces.

</comment></comment><comment> cha-cho I would be interested to see the original spec for Lotus Agenda. That product still has a legion of fans extolling its virtues online. And it was a DOS product.

</comment><comment><USER31> I used to curse our Notes based document management system with custom approval workflow... Until it was replaced with something _better_. Man do I miss Notes!! It may have been slow at times, but it did a great job at it's core purpose.

</comment><comment><USER32> Wish I'd seen this doc before I started using Notes - would have given me a much clearer perspective (although... I might have 'grokked' as much at such a young age).

Notes left a bad taste in my mouth in 96-97, as I was working at a company doing custom Notes app (not originally, but we morphed in to Notes after I started). I was tasked with doing Notes app customization and creation on and for laptops with Win95 and a whopping 8m of RAM. Doing anything in Notes was _painful_. We had one project where we got... 32m I think, and that was certainly bearable, but I was canned shortly after that...

</comment><comment><USER33> As many people here are saying, Notes was at its core a remarkable achievement for its time. One thing that kept it from more widespread adoption as an application platform, I believe, was the lack of any synchronization or atomicity model. The open "multimaster" replication model was ahead of its time in allowing offline updates, but every application had to reinvent any needed reconciliation logic more or less from scratch, and with few helpful tools.

If Notes could have done more to solve that problem, I think people would have flocked to it as a distributed application platform.

</comment><comment><USER34> Oh boy, Notes. I worked at IBM last year. I had, in turns, a frustration, a revulsion, and finally a great admiration for Lotus Notes. Not for any practical reasons—the implementation leaves much to be desired. But in the abstract? It's kind of cool.

See, Lotus Notes is essentially (the modern conception of a) web browser: an MDI navigation chrome, plus rendering engine, plus VM runtime. Each time you open a Notes "document" (like an HTML file), the code embedded in it is run through the VM to create a DOM, which is rendered by the rendering engine and displayed in the window/tab representing the document. One of the common DOM element types is a text link, and Notes documents frequently link to other .nsf files, which then are downloaded and which then open in Notes in new windows/tabs.

The one crucial thing that Notes has over web-browsers, though, that made all the difference in how the two ended up evolving, is that in Notes, each Notes document has a _remote_ database associated with it, that _the document_ can read from and write to.

It's a bit like a site or mobile app that uses Parse or Firebase: there's no need to write backend logic; you just write your client, and then point it at a _generic_ app backing-store server. In this case, the backing-store server is called Lotus Domino.

Like Parse or Firebase, Domino handles authenticating clients. For each Domino server a Notes client is signed into, they have an "identity file" (PGP keypair) the server recognizes as "them", and which their Notes client uses to sign any documents it authors (where an update sent by a document to a Domino server is sent as a small signed document.)

This is in a lot of ways similar to how browsers use TLS client certificates, but lighter-weight, in a similar way to how e.g. an Apt repository's pre- signed packages are lighter-weight than HTTPS. In TLS, a piece of data will lose its origin once it passes out the other end of a TLS tunnel, and so the server must make a metadata record of who it was talking to, and vouch for the data _itself_ (with another TLS tunnel) when someone else requests it. With pre-signed documents, the server can be a dumb store-and-forward server, and the documents will always just "stay" signed by whoever first created them, without needing un-wrapping and re-wrapping on every transmission.

And _that_ means that, unlike Parse or Firebase where linearization is done on the server, a Notes document can just download all the store-and-fowarded update message-documents representing its database, and then linearize them itself, using the Notes client's own configured trust settings to decide what operations in the event stream were authorized changes, and then the document's own merge policies to decide how to linearize the data (i.e. what fields are CRDTs, what fields are last-write-wins, etc.)

Then, finally, you can understand what is going on when Lotus Notes opens up and shows you what looks to be an email client: it's a Notes document (like a web-app) syncing down a Domino database full of signed update-messages from other Notes clients (one of which can be an SMTP gateway server, allowing messages to get pushed in from outside the Notes system.) The email client document _chooses_ to represent its (considered-authorized) update-messages as individual email messages in a list—but some of them are also other things, like e.g. edits to previously-sent messages.

Each signed update-message might just contain a plaintext message, or it might effectively be a publish-event pointing the Notes client at a Notes document. The email-client document is responsible for deciding how to render the plaintext messages when you focus those; but if you focus a message representing a reference to a Notes document, it just downloads/syncs that Notes document into your local database and then the preview pane displays it in the Notes equivalent of an <iframe>, allowing it to run all its own code.

So, you could picture the default Lotus Notes email client as being less like Gmail, and more like Slack: it syncs a history of update-messages, some of which are modification-events for real "messages". Like Slack, you can upload files "to the service" and then just send references to them to other users in your team. And some of these files could be small, self-contained HTML5 apps, talking to a service like Firebase.

The key differences, then, are that 1. you actually interact with such documents _within_ the client (so, picture if you could post HTML documents into Slack that would be displayed _as an <iframe>_); and 2. the messaging service itself is hosting the Firebase-alike functionality, such that every "app" built with the Firebase-alike functionality gets an implicit User model mapped to the user of the messaging app.

When described like that, it actually sounds a bit _less_ braindead than Google Wave, doesn't it?

</comment><comment><USER35> Notes got me over my email checking addiction. Having to use it at work I checked my email twice a day rather than 20 times, since I hated the interface. I guess that made me way more productive in itself. People started using unofficial channels instead such as skype messaging for some communications or just speaking in person.

</comment><comment><USER36> What replaced Notes for doing custom workflows? Despite whatever hate or legitimate criticism it received, Notes was really good at letting you putting together workflows. And the Domino servers with their ability to replicate databases was really nice.

<comment><USER37> Microsoft would like you to believe that OneNote and SharePoint filled that gap.

</comment></comment><comment><USER8> This spec doesn't mention it, but Notes was arguably ahead of its time w/ respect to cryptography. The political climate of the time, w/ respect to export restrictions, certainly didn't work in the product's favor.

There's some more good background here: [http://www.ibm.com/developerworks/lotus/library/ls- NDHistory...](http://www.ibm.com/developerworks/lotus/library/ls-NDHistory/)

</comment><comment><USER38> A quick search out of curiosity brought this:

[http://www-03.ibm.com/software/products/en/ibmnotes](http://www-03.ibm.com/software/products/en/ibmnotes)

</comment><comment><USER39> My first programming gig was Lotus Notes developer (v4.3). It was ahead of its time

</comment><comment><USER40> Somewhat related: I came across the visicalc documentation from 1981: [http://toastytech.com/manuals/VisiCalc%201.1.pdf](http://toastytech.com/manuals/VisiCalc%201.1.pdf)

Page 123 of the pdf (page 3-3/3-4 ) is a massive state machine showing all of the commands and modes.

<comment><USER41> And for those wanting to play along, there's a legal download of the executable from Dan Bricklin's site: [http://www.bricklin.com/history/vcexecutable.htm](http://www.bricklin.com/history/vcexecutable.htm) (also has the reference cards)

</comment></comment><comment><USER42> Ah, Notes. NoSQL before it was cool to be NoSQL.

</comment><comment><USER43> Strangely, the words "spawn" and "satan" do not appear anywhere in this document.

<comment><USER44> I understand the trope, but comments like this tend to push discussion in a shallow direction. Not that 'shallow' is a direction.

It would be better if you wrote substantively about some of your experiences with Lotus Notes.

<comment><USER18> Hi dang, I agree with your moderation and comment here, but as a previous long term notes / domino dev and admin who quite liked the platform I thought that comment was, in this particular context, apt.

Also, shallow is a direction, but only in a relative sense

<comment><USER44> I hear you, but even if that's true, the comment is uninformative to readers who haven't had direct experience.

What we want instead is comments that share experience, so others can benefit from it. It's basically a variant of 'show, don't tell'.</comment></comment></comment></comment>


Ask HN: Would you support a mandated minimum salary for H-1B visa positions? - <AUTHOR> <comment><USER2> No

</comment><comment><USER3> Yes</comment>


C++ Grandmaster Certification - <AUTHOR> http://www.cppgm.org/index.html <comment><USER2> This seems like an insane undertaking for one person. I could understand it with C - that would be difficult enough. But a compliant C++11 compiler? It has taken MSVC, GCC, and clang years to get just partial C++11 compliance! None of them are fully compliant in their current state. How is this course supposed to be tractable!?

<comment><USER3> "More significantly, we are not doing an optimization pass."

Most of the legwork in compilers like gcc involves optimizing the output code and targeting multiple architectures -- writing a dumb translator for a single architecture is a far more tractable problem.

<comment><USER4> It doesn't matter, optimized or not, the amount of work this entails is ridiculous. Writing a C++11 compiler requires intimate knowledge of the standard (which is a massive, hard to read tome), implementing pretty much all of the standard library from the ground up, and honestly, good luck writing all of that - that's all the containers (set, vector, list, map, unordered_map, multimap, unordered_multimap, forward_list, stack, deque, tuple), algorithms, time and regex libraries (chrono and regex), threading and thread models, type_traits and so on (actually, I just realized, they have it listed on the right hand side).

Honestly, it's worded very poorly. "Compliant with the latest 2011 standard (C++11)" suggests all of this. I have a hard time believing this isn't some kind of joke - there's literally no-one alive that could write all of this in the timeframe of a course.

<comment><USER5> Not only that, but the dragon book is terrible.

To quote my adviser, "writing a parser from scratch has no value except as a character building exercise."

Anyone who wanted to write their own parser should probably just use a packrat parser (I find it much simpler).

Whoever is organizing this course, frankly, is either way out of their depth or holds their 1985 compilers course in far too high esteem.

<comment><USER6> I disagree that there's something wrong with writing your own parser. A simple recursive descent parser is very easy to write, and more importantly is very easy for someone else to understand. It does not require any esoteric knowledge of lookup tables and "advanced" parsing algorithms. I far prefer a stack trace from inside someone's hand-written recursive descent parser to the cryptic mess you get from Yacc or Antlr generated code. I also prefer not having to have a whole code generation stage in my build process just to support some small DSL I have embedded.

This whole "you should never write your own parser" thing is so often parroted out as "wisdom"... But I honestly believe that most of the people that say this don't realise how easy it is to "roll your own".

<comment><USER5> The pedagogical value of writing a parser for your compiler for any language more complex than, say, Scheme, is basically zero.

Skip the parser, learn the useful stuff.

<comment><USER7> unless you ever need to process data in a format for which a decent library doesn't already exist

<comment><USER8> Do you have an example in mind of such data?

<comment><USER9> New file formats of all kinds are invented every day, often with some proprietary tool attached. Writing your own parser allows you to add value and/or interoperate with the proprietary system. Even in the cases where an open source parser already exists it may have performance issues, or not support the latest version of the format. Being able to roll your own in those cases is empowering.

Of course you asked for examples... let me give that a try:

1) data from your favorite application that's been end-of-lifed and you're thinking of replacing with a competitor's tool 2) data from a later version of your favorite application that you want to use with an earlier version, because you don't want to upgrade 3) configuration information from some part of your IT infrastructure that you need to refer to as you restructure and upgrade 4) a big config file for some software, that contains an error somewhere and "grep" won't find it. Maybe it's a semantic error, for example. 5) a config file for some ancient crufty software you're replacing, but the config file is huge and contains a lot of institutional knowledge, so you want to automatically translate it to the new system's setup.

Being able to generate even simple parsers gives you a lot of power. It's not as uncommon as you might imagine.

<comment><USER8> Having been in the business of reversing data formats in two different real- world contexts, I feel comfortable in saying that just about the last thing I would do is write a parser. One context was building a system to pull live financial data feeds. The other is in the software security business. In the former, often CSVs were what you would get, or fielded data. We built an engine that could easily inhale these. Including the bloomberg feed which was unusually complex.

In the security business, one is often asked to assess some not-very-well specified protocol, or some protocol for which there is no documentation. So to deal with it you 1) fuzz the hell out of it to make the end point fall over or 2) hexdump the protocol and write pieces of it in ruby or python to get messages through so that you can fuzz the hell out of it in a structured way.

And if there was some need to write a parser, you can bet it ain't gonna be LALR, it will be hand-crafted, likely recursive descent.

To reply to each of your points:

1) If you are lucky, this XML. I don't need to know how to write a parser if the data is XML. If it is some sort of Java serialization, dejad is your friend--no parser required. If it is binary, you are going to use the protocol reversing route mentioned above.

2) See #1

3) Maybe just insert parentheses around the whole bit of data, and insert more strategically, and you are all but done.

4) See #3 or #1.

5) See #4.

If I was working on a team, and I saw someone writing a parser for a data- related problem, I would seriously question what they are doing.

<comment><USER9> It's nice that things have gone in the direction of XML and JSON lately, and many people devise formats that build upon those. I was thinking more of arbitrary text formats. Even if it's XML or JSON though, the existing parsers only handle comprehending the structure of the data itself. You have to write some semantic analysis on top of those, because the standard "parser" will just give you the input data as a tree - but the semi-standard format certainly helps a lot.

I do think you overestimate the work required to write a parser for simpler formats - for someone familiar with one of the popular parser generators this can be a handful of hours, and the quality of results should be much higher than an ad hoc method. This _can_ be a good design decision.

<comment><USER8> No, I don't underestimate it, because I have done it, i know how long it takes, and what one gets from it.

There are simpler ways, as I point out above.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> It's a joke. It's hardly doable by a single person. For the record there is currently no fully C++11 compliant compiler.

Oh, and I'd like to say that knowing everything about C++11 makes you a language lawyer, not a Grandmaster. Grandmaster is more than knowing the language. It's about using it right.

<comment><USER11> WHOIS records are of DomainsByProxy. I use a similar service for my private (not work) domains, but take what you will from it.

</comment></comment><comment><USER12> I think something like this might be a very cool project for those of us who have the time. You get intimate knowledge of C++, compilers, assembly and other close-to-the-metal aspects of programming. I wonder how much time it is going to take; the very simple compiler I had to write in college using yacc/Bison, supplied boilerplating and a trivial output format already took several days of full-time work. Full C++-compliance seems like a _huge_ project.

The website is missing some information however: who's behind it? It says:

      The CPPGM Foundation was formed by a software company that
      recognized the value to programmer productivity that a good
      knowledge of language mechanics had to new developers to
      their team.  The C++ Grandmaster Certification began
      development as an internal training program, and the
      foundation was founded to offer it publicly.

but fails to mention what that company is. Additionally, the domain is registered anonymously...

Edit: After some digging, it seems that the only information available on the people behind this is the fact that they emailed the press release to the comp.lang.c++ newsgroup from a residential IP-address in Switzerland. (NNTP- Posting-Host header)

<comment><USER13> Google? Facebook?

<comment><USER14> Why would either do it without putting their name on it.

<comment><USER15> This also might be a top talent filtering system. If someone is able to complete the absolutely massive amount of work - in their spare time for fun, no less - they are quite likely to be of interest to some of the top companies.

In this case, putting a flashy name will lessen the scheme, as it will attract people that will do it with purely career-oriented motives. Or, as another post noted, it might just be a scam.

<comment><USER16> Or maybe for black listing? i.e. filter out those persons who are extremely naive and/or who overestimate their abilities.

</comment></comment></comment></comment></comment><comment><USER14> Okay I signed up to see what it's all about. But I can't get rid of the feeling that this is a joke of some sort.

1.) There is not a single name of anyone involved in this endeavor.

2.) The sing-up confirmation is a simple alert box? It seems like an XHR request does go out but no email is sent to the email address provided. Also they don't even check for email uniqueness. That seems somewhat...strange.

If it is a joke, I will be pretty sad :-(.

<comment><USER14> Also there is this announcement message [https://groups.google.com/forum/?fromgroups=#!topic/comp.lan...](https://groups.google.com/forum/?fromgroups=#!topic/comp.lang.c++.moderated/VMBvvLqMs3I) where they say "For press information contact email@example.com". Nevertheless, the domain has no associated MX record. I'm calling it, this is almost definitely not real. And the class has a start date but no end date?

<comment><USER17> If a domain doesn't have a MX record, it fallsback to the A record.

The IP pointed to by the A record does have a service running on the SMTP port.

</comment></comment></comment><comment><USER8> So this seems like a pretty enormous task. Having written a couple of compiler code generation phases, I must admit that this challenge is very attractive.

However, there is something a little off about this proposal. First, the size of this effort is really quite substantial, even neglecting optimization. Secondly, the phrase _The C++ Grandmaster Certification began development as an internal training program, and the foundation was founded to offer it publicly_ suggests some compiler-writing company heavily involved in the C++ space. How many of those are there really? I mean, it has been 20 years since anyone made any money producing C++ compilers. All for-profit companies do it as a side effect. VC++, for example, in the 90s had 50 people working on just the compiler itself, not counting the Visual part.

So it presents a secondary challenge, which is 1) is this a real company 2) what really is the end goal?

Edit: Also, the bootstrapping question is not well addressed. What do we have to start with? Regular C? can I do the first phase in Lisp or Arc or Factor?

Am I allowed to look at other source, like that of g++ or clang or llvm or objective C?

Finally, the apparent copyright terms seem at least unacceptable, if not downright goofy.

<comment><USER18> Regarding the company in question -- my own best guess would be one that does static code analysis -- Coverity [0] comes to mind, for example. I can't really think of any other companies that would benefit greatly from having a large stock of employees that all know the C++ standard intimately. Except of course for those that write compilers, but as you say, there aren't many of those around.

[0] <http://www.coverity.com/>

<comment><USER8> Ah, a good possibility.

I can't find it now, but they published a paper that said "There is no such thing as C" in which they discuss the widely varying implementations and expectations of C, different enough that special flags had to be invented on their tool to get weird programs to pass.

</comment></comment></comment><comment><USER19> The "meat" of the joke imho: ...there is a _start date_ but not an _end date_ for the class :)

...with an end date somewhere in 2023, it might be feasible.

</comment><comment><USER20> Considering it normally takes 10 years to develop a reasonable standard library alone -- and that's about 10% of what's being asked here -- this is clearly a joke. But it's a humbling and enjoyable trolling for sure. It would be interesting to develop a very limited amount of material for each layer of the stack being addressed here though, that would give some valuable experience.

</comment><comment><USER21> Who in their right mind would write a C++ compiler without getting paid a lot of money to do it? It's an incredibly hairy spec: full of corner cases and ambiguities and nearly impossible to parse.

As part of my GSOC project (auto-generating Common Lisp bindings for C++ libraries), I tried to implement parts of the Itanium C++ ABI (<http://refspecs.linux-foundation.org/cxxabi-1.83.html#vtable>). Like the language itself, the spec heaps complexity onto the compiler in a pointless effort to save the occasional load or arithmetic operation here and there. Yet ironically, it's faster and simpler to just have a simpler v-table layout and put a PIC in front of it: <http://www.jot.fm/issues/issue_2009_01/article4.pdf> (see page 233).

 _shivers_

<comment><USER8> Well, when I first dove into compilers, i may have not been in my right mind. Three of us were too inexperienced to know that we couldn't produce a production compiler in a year, so we did. And I pretty much went through a wall to get into the compiler field.

I don't disagree with anything you said here, but I admit I am feeling a pull.

<comment><USER21> Don't get me wrong: I love hacking on compilers and I do it for fun. And you can ship a production compiler in a year. But for C++ 11? That's a different beast. That's a language that's neither fun to write a compiler for nor do I think it's tractable to write one in a year (but who knows?)

Out of curiosity, what was the compiler for?

<comment><USER8> The company was Sycor--unlikely anyone has heard of it. They invented the Intelligent Terminal--a data entry device replacing keypunches that could do validation checks on entered data.

They were building an 8085 powered computer with their own OS. They hacked the PL/M compiler--actually rewrote it in Fortran to emit the appropriate object code and the rest of their tool chain. They started an effort to rewrite the compiler, but it failed. I came in, and being familiar with XPL (From the book "A Complier Generator"), having finished a port of it for the Xerox Sigma 5 at a previous gig. One other person on the team had finished a PhD in computational complexity and the other had project experience writing COBOL compilers.

The project stared with a desire to change the language a bit, so we designed a new language. It wasn't too different from PL/M as it had to be mechanically translatable. The language was named, embarrassingly, Syclops. We started out with batch jobs on a 360/35, writing it in PL/1. They shortly got a PDP-10, which I miss, and we commenced to rewrite the compiler in Bliss-36. So it was essentially a cross-compiler, spitting out 8085 machine code with a very fancy assembler listing, including timings for each basic block.

The project was wildly successful, and opened the door to switching processers. For a while, they considered the 6809, but ultimately stuck with the 8085. The CEO was very pleased, at least, to have the opportunity to consider the switch.

My favorite activity was taking bug reports from the programmers who always looked at the generated code. The would come in with the listing, saying that the code was wrong. I would go over the code, and the reaction from them always was "wait--that is odd, the code is right. Weird."

My boss at the time like to say "A compiler should produce code that an assembly-language programmer would be fired for writing."

</comment></comment></comment></comment><comment><USER22> I signed up and am excited. It is definitely something that will be challenging, but the fact that it is free means that I have nothing to lose and everything to gain. (One would say that time is something I can lose, but this is a better use of my time than Diablo 3). The only hesitation I have is that this is just yet another joke that I'm too naive to recognize. We shall see!

<comment><USER23> Good point. I hope it is not some joke or some way of getting email addresses of programmers.

EDIT - Looking a little more, I can't tell exactly but I feel like the people that put this site up should put some more explanation up about who is doing it and ensure it is on the up and up. Surely, they are aware of this HN post so I'm waiting. :)

</comment></comment><comment><USER24> I was tempted until "We ask you to agree, when you start the course, to not release your toolchains source code anywhere but the cppgm site.". Interesting work I do not-for-pay I release as FOSS on github. They're worried about plagiarism (which is fair); they should use anti-plagiarism tools to check whether submitted code matches previous submissions or any known C++ library and compiler code in the wild.

<comment><USER23> I don't think that is that crazy. I'm not saying you are this exactly but I'm saying this position, to me, is one of an _ideologue_. I feel that I am an intellectual "friend" of FOSS, to be sure, but I just can't bring myself to take the ideology to that serious of an extent. Also, anti-plagiarism tools aren't very good, like Berkeley MOSS. I mean they are great and everything but easily bypassed.

<comment><USER12> Given the amount of work this project is, I would presume that very few people will get anywhere near completing the course. So it doesn't seem impossible for the people running it to study the submitted solution in some depth and compare it to earlier submissions by hand.

</comment></comment></comment><comment><USER25> Subtle. A lot of effort just to prove that there will never be a "C++ Grandmaster".

</comment><comment><USER26> "You will also earn the title Certified C++ Grandmaster [CPPGM]."

A certificate or title isn't worth anything unless the organization who emits it has the authority to emit them. And if you can truthfully claim to have written a fully-compliant C++11 compiler all by yourself... you're already so badass that throwing in an extra title or certificate won't make a difference.

</comment><comment><USER27> I signed up, but I share the feeling here that this has to be a joke or email harvester or something else... Still, it'll be neat if there's at least an attempt. If it's real, I doubt I'd make it to the end. One aspect of this that _is_ pretty doable and far more important than being a C++ Grandmaster is knowing how to implement the pieces that get basic code (in any language) from text file to the registers on your x86-64 CPU with a Linux kernel managing your program and others.

I had a real-time operating systems course a few years ago in which we developed a simple real-time kernel running directly on an arm9 microcontroller board. The toolchain of cross-compiling with gcc and programming the device (and creating the required linker file for the architecture and bootup assembly) was fortunately done for us with source available, and we did a high-level overview of how openOCD works and a whirlwind tour near the end of the course of how we might compile a program independent of our RTOS kernel's program and load the separate program from SD card with the RTOS and run it. We talked about elf files and related topics but didn't go too deep--it'd be nice to revisit some of the topics and especially in the context of Linux. (I would prefer an arm device over x86 though.)

</comment><comment><USER28> I borrowed a copy of the Dragon Book from a friend and I'm starting to go through some of the parsing exercises as a refresher. I think the undergraduate compiler course I took used MIPS, so this might be a little different, but I always did like AMD. C++ is a big language, but as the FAQ says, we won't be writing an optimizer, and hey, we're not even writing an OS or designing a CPU, so we're only doing a tiny fraction of a complete implementation.

I went to a C++ standards committee meeting once. They were having this fascinatingly complex discussion about temporary object lifetimes; it was so amazing how everyone there understood C++ so thoroughly. I'm hoping that taking this course will give me a better appreciation for their art.

</comment><comment><USER23> Neat but I will say this, I think the course is mis-named. This seems to be less of a C++ master class and a course on compilers. I would expect such a course as a C++ master class would be more on _using_ the language rather than compiling it. But that doesn't mean the course isn't good, I haven't seen the content. :)

\- For those criticizing the amount of work ... I tend to agree with you all. However, in the faq this is addressed, take that for what it's worth. However, it's free so it seems like, even if you fail at building a fully working compiler, you could learn a lot, so I say good for them!

<comment><USER13> "Written entirely in C++ with no third-party dependencies" \-- so your work is writing a C++ compiler, in C++.

</comment></comment><comment><USER29> I don't believe this is a joke, but I do think the organizers need to be much more forthcoming. The crucial unanswered question is what timeline they expect to follow.

I believe it would be possible for an expert C++ programmer (and this is clearly who they're targeting) to write an essentially compliant ("fully" sounds difficult, and I expect some fudge there) compiler in a year; two, perhaps, if it's a nights and weekends effort. This estimate comes straight out of my bum. It's an intuition. I'm not including the standard library: that would be a multi-year job even for a small team of truly excellent C++ programmers. But if we focus on the compiler, and allow a little fudge in compliancy, I think there are some individuals who could do it in a year. So I don't believe the scope of the task implies a joke.

The lack of information on the site raises worries. Do the organizers lack the confidence to reveal themselves? Or are they scamming? They shouldn't leave this a question.

</comment><comment><USER30> I've got to agree with some of the comments here that this is insane. Sounds fun, but insane. There are probably 3 or 4 programming-intensive undergrad courses wound together here, with a more difficult substrate than your average compilers course.

Then I remember that this is the Internet, and if it's 'free' you're usually not looking at the product; but you can see it in the mirror.

</comment><comment><USER31> off on a tangent: does anyone know a good resource/book for learning C++ from a C background? I've loathed C++ every time I've gone to use it, I'm sure there's something good in there....

i.e. is there a good book "C++ for C programmers who hate the thought of it"

<comment><USER3> I found the scott meyers books to be good (effective C++ and effective STL)

<comment><USER4> These require some background in C++ before you pick them up, however.

<comment><USER3> That is true. Those books take "C programmers with a very basic understanding of some C++ fundamentals" to "C++ programmers"

</comment></comment></comment></comment><comment><USER32> Since this is probably a joke, is there a comparable class for a simpler language available online? Anyone have any resources for people wanting to self-teach themselves compilers?

<comment><USER33> There's a Stanford compilers class on Coursera. You can supplement it with the dragon book. Another book goes well with it, one of my favorites: Programming Language Pragmatics 3rd ed.

</comment></comment><comment><USER34> Gonna go with "recruiter phishing schemes" for $1000, Alex

</comment><comment><USER35> Grammar reference: <http://www.externsoft.ch/media/swf/cpp11-iso.html>

</comment><comment><USER36> "Isn't this a huge undertaking, usually done by an entire team of programmers?" ... 'This is a "Grandmaster" level programming course for world- class senior software engineers.'

What? One of the prerequisites is 2+ years experience with C++ (or similar language), and on completion one shall demonstrate, "a complete, exhaustive knowledge of the C++ language and C++ standard library".

OK, world class senior software engineers and a base point of 2 years experience generally do not go together.

Perhaps the author meant, having had at least 2 years C++ experience at one time in one's career.

<comment><USER37> World class senior engineers and having spare time for such an undertaking generally don't go together.

</comment></comment><comment><USER38> The fact it took me some time to realize this might be a joke, shows how far from being a Grandmaster I am :(

</comment><comment><USER39> I'm so not a candidate for a class like this, but damn I wish I could take it.

</comment><comment><USER40> Side note, I forgot that CPTTv2 was $101 (for the Kindle version no less).

<comment><USER3> No one calls it CPTTv2. Aho and Ullman both refer to it as the dragon book, and even wikipedia recognizes it: <https://en.wikipedia.org/wiki/Dragon_Book_(computer_science)>

<comment><USER23> lol wow when I first read the parent I wondered what book it was! You're right, I've only ever referred to it as the Dragon book.

</comment></comment></comment><comment><USER41> Anyone gotten an acknowledgement of having signed up?

</comment><comment><USER42> This looks awesome! Now to read about compilers....

</comment><comment><USER43> I signed up, but it doesn't feel real.

</comment><comment><USER44> OK, I forked LLVM and libstdc++ on github, and compiled them.

In the process I learned about the joys of code reuse, surely what a true grandmaster would use.

When can I expect my certificate in the mail?

</comment><comment><USER45> That's either a troll or will take decades for each person.</comment>


What the U.S. needs is an 18-cent coin - <AUTHOR> http://radio-weblogs.com/0105910/2003/05/16.html

<comment><USER2> An interesting wrinkle to this is that an 18 cent coin would make it much harder to make change with the fewest coins for certain values.

How do we make change in everyday life? The simple algorithm everyone knows, even if they don't know what an algorithm is, is to start with the largest coin and move down, taking as many of each as you can. Thus to make change for 72 cents we: take 2 quarters, leaving us with 22 cents take 2 dimes, leaving us with 2 cents take no nickels take 2 pennies, leaving us with 0 cents and we're done

This algorithm as it turns out is only optimal so long as each denomination is at least twice as much as the previous one. So what happens if we have an 18 cent coin? Let's make change for 37 cents. With the simple algorithm we end up with {1 quarter, 1 dime, 2 pennies}. That's four coins. However you can do it with three coins: {2 18 cent pieces, 1 penny}.

The algorithm for the case with arbitrary denominations isn't np-complete (it's a fun algorithms question to figure out), but it's way too difficult to be doing in your head all the time.

<comment><USER3> I don't know why you're saying it isn't NP-complete. For an arbitrary set of coins, it's definitely NP-complete. You could easily reduce 0-1 ILP to it, or subset-sum.

If you don't believe me, believe <http://graal.ens- lyon.fr/~abenoit/algo09/coins2.pdf>

"Optimally making change—representing a given value with the fewest coins from a set of denominations—is in general NP-hard."

</comment></comment><comment><USER4> > Shallit assumed that every amount of change between 0 and 99 cents is > equally likely.

Fail. He could at least have blagged some transaction data from a retailer that actually does a bunch of small cash transactions. Just getting copies of the receipt roles from his local bodega would be better than this.

<comment> jack-r-abbit Why does it have to be small transactions? Every transaction, regardless of size, has a chance to end in anything from 0 to 99. The more items on your receipt the more chances to have different variations. Plus tax rate varies from area to area. I don't think that his assumption is that far off. But yes, he probably could have done something to get actual data.

<comment><USER5> It should be small transactions because cash is being used less and less often for medium-to-large transactions.

It's not safe to assume that all cent values from 0 to 99 are equally likely because of the fact that cash transactions tend to be small. The number of items being purchased will also tend to be small. So the fact that most prices for individual items tend to end in 99, 95 or some other multiple of five cents should have a huge impact on the distributions in real life, especially for transactions to which sales tax does not apply.

For example in Oregon, a state with no sales tax, the fewest number of items you'd be able to buy at $0.99 or $0.95 to get a $x.32 total is at least 20. (That's a whole lot of "fun size" bags of potato chips.) The total would come out to $19.32, at which point a lot of people would just pay with plastic, anyway. Perhaps most people would.

<comment> jack-r-abbit I suppose. I guess I use cash more than others. I would easily toss a $20 at a $19.32 bill.

</comment></comment></comment></comment><comment><USER6> The assumption that every possible value from 0 to 99 is equally likely doesn't seem like the best idea. In a country where the cost of items usually ends in .99, .97, or the like, and the sales tax is added after the fact (and usually from 0-10%), is it still the best choice? The post (and cited paper) don't seem to mention this.

That said, I don't know where you'd acquire these sorts of statistics.

<comment><USER7> I also wondered about the random assumption. The thing that made me question the assumption the most is Benford's law.

<comment><USER8> I don't think Benford's law applies here: it's about the first digit of numbers (that are distribute in a certain way), but in most cases the first digit of a price will be denominating dollars, not cents.

<comment><USER7> The leading digit of change is tens of cents...

<comment><USER9> The change may be more than a dollar, so tens of cents is not necessarily the leading digit.

<comment><USER7> the amount of coin change is never more than a dollar.

<comment><USER9> The amount of coin change is the remainder left over after dividing the total change by a dollar. Thus although the total change may or may not obey Benford's Law, the coin change certainly doesn't.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> People can multiply 1, 5, 10, and 25 with zero difficulty. An average person would likely resent being forced to count multiples of a less round number such as 18. For that reason alone, such a change is unlikely to come about.

</comment><comment><USER11> No. What the U.S. needs is NO coins.

(Seriously, does ANYONE use coins anymore? It's either bills or a credit card for me.)

<comment><USER12> Yes, I still use coins. They're very handy for vending machines, parking meters, highway tolls, stupid magic tricks, decision making, purchasing one taco at taco bell, carnival food, making wishes, receiving change, and so on. I don't think coins will go away as long as paper currency remains, unless we start printing bills worth less than a whole dollar, or we become so rich that we don't concern ourselves with values less than one dollar.

<comment><USER13> exactly. I've been in singapore the past couple of weeks and they have a S$ 1 coin and it's been awesome.

They also have <http://en.wikipedia.org/wiki/Polymer_banknote> which is great in terms of durability.

</comment></comment></comment><comment><USER14> Or, they could get rid of every coin smaller than a quarter. Assuming every amount of change less than a dollar is equally likely, the average number of coins needed to make change now becomes 1.5 - and it's not like anybody really uses anything less than a quarter for anything other than coinstar anyways

</comment><comment><USER15> Whenever taxation changes it will shift the "average transaction value" by a few cents and invalidate the added usefulness of already minted coins</comment>


Programming Languages: Application and Interpretation by Shriram Krishnamurthi (Free Book) - <AUTHOR> http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/

<comment><USER2> Shriram is a super-sharp guy. One of the best talks I've heard for scheme evangelism was his "The Swine before Perl" talk.

(edit)

[http://www.cs.brown.edu/~sk/Publications/Talks/SwineBeforePe...](http://www.cs.brown.edu/~sk/Publications/Talks/SwineBeforePerl/)

</comment><comment><USER3> I haven't read the book in detail, although I've read the course notes it's based on. He has you build (in Scheme) a number of interpreters for a variety of small programming languages. They all share the Scheme syntax, but they have different features than Scheme, so you can see the benefits of each specific language feature and how you can implement it. By the end, you've written many different interpreters, including a compiler for a functional language. (I'm not sure how this compares to SICP, but I get the impression that it covers similar ground.)

At the time, it was an eye-opening experience: I learned that a programming language is much more than just its syntax, and that adding features to a language has both benefits and drawbacks. The section on compiling programs functional programs by automatically rewriting them in the continuation- passing style was particularly enlightening.

</comment><comment><USER4> Wow, so this is a little off topic, but I'm constantly rooting around. (Book looks awesome btw, downloaded, and 'hope' to read it).

But I saw that the book was 'free', and I wanted to take a beat on where free things were be published. I checked google with the quoted title, zero results.

Then I went to his site saw three links, download, download+donate, and buy paperback. I struggled here, he was giving me no excuse not to donate if I was going to read the book for free. Then I saw the paperback offer, and thought I don't really consider a "book" a 'book' unless I can put it on my shelf. Thus I would gladly pay for a paperback, and if I like his "book" that is how I would give my return. I want a memento from our "free" digital exchange too, I mean, if the book is worth it's salt.

But that's not the point, point is this guy published through 'LuLu', and LuLu like Google is a name that can mean something simply because it means nothing. Something I'll say to my voice command pc, or when I tell my friends fifty years in the "future" I bought a _future-word-for-book_ off 'LuLu' (post computing ubiquity).

How are they going to win? Look at their community. When I got to the page and played around with the links, I was really blown away. I see this company making it.

<http://LuLu.com>

<comment><USER4> *and I realize I'm pretty late to the game, but cool site :)

<comment><USER5> Love it!

</comment></comment></comment><comment><USER6> Shriram is one of the best professors I've had.

</comment><comment><USER7> This book is great. It's by no means written in plain english; It's definitely an academic text, but Shriram does a wonderful job of explaining how programming languages can be implemented.

Certainly worth a page-through for any hacker.

</comment><comment><USER8> Thanks for that! Good book, good link.</comment>


Arch Linux adapted for Windows Subsystem for Linux - <AUTHOR> https://github.com/turbo/alwsl/tree/dev <comment><USER4> Maybe I'm in the minority but I prefer keeping my GNU/Linux and Windows installations separate, with each OS on its own drive. My Linux setup is secure, free of proprietary software and under my full control. When I run tcpdump, I'm met with a clean log where every packet is one I recognize. I get to use my favorite window manager (awesomewm) and I don't have to worry about forced updates. My Windows install is quite a different beast - <USER2> updates, mostly proprietary software and no major customizations other than performance tweaks and what the OS allows. I use it for gaming and media, and it works great. Boot times are very short with SSDs so restarting is not a problem. No compatibility issues, no fussing about with drivers and no need for translation layers like the Windows Subsystem or WINE; just two independent OSs that never let me down.

That said, no hate toward this project. Arch Linux is probably my favorite distro (although I'm on Xubuntu at the moment).

<comment><USER5> It would be nice to be able to develop "native" Linux software right from within Windows where I'm doing other things. I can see the appeal. That's why Microsoft built the Linux subsystem, I suppose.

<comment><USER6> Embrace, extend, extinguish.

Although I'm guessing a few devs are in the boat with "all company PCs must be windows." Gives them an out no?

<comment><USER7> No this is not that. The idea is some frameworks/platforms have become _nix first, ex. Ruby, Python to an extent Java etc. OCaml to only name some. Windows Subsytem for Linux is about bringing these_ nix first developer plats to Windows and help developers like me to remain on Windows.

<comment><USER8> This is precisely the strategy of 'Embrace, Extend, Extinguish'.

Step 1: Embrace new technology ( like Ruby, Python, Java etc ) that run on other ecosystems

Step 2: Add extensions to the technology that only works in Microsoft ecosystem. For example, add new functionality to Ruby for Windows that only work on Windows

Step 3: As more and more people develop software that uses these features, more people will have to switch to Microsoft ecosystem to continue using those pieces of software. This is not a voluntary switching based on the merit of the software ( as the same software could have been developed without those extensions ). The switching is often mandated by management decree, customer requests or market concerns.

The danger of this strategy is the cost for people outside the Microsoft ecosystem.

a) Bad pieces of technology becomes successful, merely because it came from Microsoft. Everyone is forced to use it.

b) People are locked into Microsoft platforms. This causes all the usual problems associated with lack of freedom : harder to experiment, keep the costs down for companies etc

Some people say Microsoft has changed their ways and they have since repented, but most people are still suspicious. Once bitten, twice shy.

<comment><USER9> So what do you call it when Google adds great UX, advanced sorting and searching etc. to email, and then slowly starts making it harder to send email to Gmail accounts from non-Gmail accounts? (All in the name of eliminating spam, of course.)

Or when Facebook Messenger supports XMPP up until the point where their user base is big enough and they don't have to care about interop anymore?

Welcome to Software Business 101, everyone plays nice with the standards/alternatives/competition until they don't have to anymore. I never understood why Microsoft gets extra flak for this in 2016 - maybe they were particularly good at it 20 years ago, but every big player will play hardball if they get a chance.

The answer is to avoid single vendor lock-in under all circumstances, but Microsoft is hardly on a trajectory to become the single vendor for Ruby or any other Linux-first tech at the moment (ha!).

<comment><USER10> Microsoft are _still_ doing it. The company that I work for didn't just pay for Office subscriptions because we wanted Office for Mac (and I didn't want to get it on subscription either, but the pricing strategy is designed to penalize you if you don't). We actually have access to three different Office- like products already (iWork, LibreOffice, Google Apps). None of them can yet 100% support Microsoft's "standard" file formats.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> I am currently dual booting between Arch Linux and Windows 10.

Moving to something like this one day makes me conflicted. On one hand I feel like I would betray open source, on the other hand I wouldn't have to restart my machine to play games...

<comment><USER12> If your hardware supports it, you may be able to pull a 180 and run a Windows VM on the bare metal using hardware passthrough. There's a great community here: [https://www.reddit.com/r/vfio](https://www.reddit.com/r/vfio)

<comment><USER13> Wow, that works? Video games are pretty much the last thing that holds me on Windows. Everything else is solved on Linux. I am very interested in any solution for this problem.

<comment><USER14> Serious general open question here. It strikes me as odd that on the one hand you say you want to ditch windows in favor of FOSS, but then go on to say that you use Windows just to play games.

The interesting thing is that games are some of the most costly and closed source things in software today. Windows costs the price of two games or less.

Further, if you own a PlayStation, an XBox it's likely you have spent hundreds of dollars on closed source games. If you bought a fancy graphics card, would you expect that to be free as well?

I love FOSS software as much a as the next person, but people who write software do have to live. Like game developers, employees of NVIDIA, even the people who make the Arch Linux distribution.

I'm truly not picking on you or FOSS, I just find it hard to rationalize FOSS zealotry that is almost universally hypocritical to some degree. Even Linus gets $10m a year or something like that. I'm not even sure to be honest what FOSS software IS any more.

It's a serious question, because I'm really confused.

<comment><USER15> > The interesting thing is that games are some of the most costly

Hah! I wish. I've spent thousands on single SKUs - yet SASS and anything B2B can make that look like chump change.

Meanwhile, Steam sales discount high quality, high end titles significantly pretty quickly - to the point where a lot of gamers basically never pay full price.

To say nothing of mobile being flooded with $0.99 titles. To say nothing of the effectively free humble bundles. To say nothing of all the free web and indie games out there.

Although I guess the right freemium Skinner box can also cost thousands in DLC and micro-transactions? But you can get games so cheap these days that people don't even get around to playing everything in their Steam libraries.

> I just find it hard to rationalize FOSS zealotry that is almost universally > hypocritical to some degree.

On the more practical side of things, games are entertainment and frequently rely heavily on obfuscation to avoid hacking to gain unfair advantages in multiplayer. It's all somewhat fungible - if you can't play game X, you can still have fun playing game Y - the only real downside being your emotional investment in game X. Vendor lock-in isn't much of a problem, and a number of games are mod friendly.

Having your business and personal data stuck in vendor lock-in and being legally prohibited from taking over where they fuck up, or try to escape from their clutches should they jack up their prices, etc. is a whole new level of potential downside. Entire businesses die when twitter changes their API terms.

Meanwhile, if WoW ever shut down, gold farmers would find another MMO to abuse the same day.

<comment><USER14> Right I know, I've been there and witnessed it first hand trying to sell on the iPhone app store.

I was more thinking of zero day PC Games and especially console games in my comment but that should have been made clearer. I get that they do get heavily discounted though over time.

Totally agree with your penultimate paragraph, nobody likes it yet we still have our Netflix accounts AND our Amazon accounts.

To me it seems HN often picks on the little guys who are just trying to make a buck while actively supporting giant corporates and going Wheeee!

Nice post by the way

</comment></comment></comment></comment></comment></comment><comment><USER12> This pulls something from [https://cdn.turbo.run/alwsl/alwsl.sfs](https://cdn.turbo.run/alwsl/alwsl.sfs) \- what's this URL? How can anyone tell this is related to Arch Linux? Why do the readmes link to 404s? All of this seems rather unfinished. Could have polished at least the github presence a little.

Also, what are the advantages compared to solution like [https://github.com/RoliSoft/WSL-Distribution- Switcher](https://github.com/RoliSoft/WSL-Distribution-Switcher), which allows selecting different distributions, including Arch Linux?

<comment><USER16> > ...which allows selecting different distributions, including Arch Linux?

Sorry to rain on your parade, but there is _no_ official Arch Linux image on Docker[1], as you can easily verify[2]. Use at your own risk whatever Arch Linux image you happen to find on Docker Hub, such as this one[3]. It might work or it might break, but it ain't official.

[1]: [https://bbs.archlinux.org/viewtopic.php?id=214973](https://bbs.archlinux.org/viewtopic.php?id=214973)

[2]: [https://hub.docker.com/explore/](https://hub.docker.com/explore/)

[3]: [https://hub.docker.com/r/base/archlinux/](https://hub.docker.com/r/base/archlinux/)

<comment><USER17> The attitude here is hard to understand. [3] is very clear about how it's built, no guess work involved.

</comment></comment></comment><comment><USER18> I really hope Microsoft continues development on WSL until it's production- ready. Right now both piping and filesystem interop need a lot of work.

</comment><comment><USER19> If WSL were truly Linux compatible, then why would anyone need to adapt Linux software to run under it?

This is the first step: embrace. The next step: extend. Apparently it's already happening, as people scurry to adapt shit so that it works with WSL. Next you'll have companies requesting that all Linux software be "adapted" to work under WSL, and if it isn't, they won't buy it.

Once this happens, Microsoft can proceed to step 3: Extinguish. How? Easy - <USER3> adding incompatible shit to WSL. If companies succeed in forcing Linux software vendors to provide a WSL-specific version, they will have to be compatible with these WSL extension. Voila - now they are supporting a new Microsoft platform that Microsoft controls.

Back before many of you were born, Microsoft killed entire product categories and companies by providing free versions of Office when it was first introduced, and making it compatible with competitors' file formats. Is it free now? Hell no, it's their main source of revenue!

Can they repeat the same hat trick with Linux? Who knows, but they damn sure are gonna try. Anyone who thinks "Microsoft loves Linux" needs to take a history lesson. The only Linux Microsoft would love would have a dead penguin for a logo.

</comment><comment><USER20> [http://www.gentooexperimental.org/nt/](http://www.gentooexperimental.org/nt/)

</comment><comment><USER21> WSL is really amazing, I hope they keep going. The devs have done a really good job and seem to be very open to suggestions.

<comment><USER22> The best software is always made by happy developers making software to make other developers happy.

This also applies to Visual Studio Code.

<comment><USER23> Atom really is a nice piece of software, definitly done by happy devs. Havent tried to microsoft fork you mention yet.

<comment><USER24> VSCode isn't based on Atom in any way except being built on Electron.

</comment></comment></comment></comment><comment><USER25> WSL is useful for some, but personally I'm more interested in reverse (Wine), mostly for some games without native Linux releases.

<comment><USER26> I was so excited when Linux versions started showing up on Steam. It meant I very rarely needed to reboot into Windows.

But, I've tinkered recently with Windows 10 and WSL, and it's actually really neat. They've done a remarkable job making it work like a real Linux system in a lot of regards; my projects kinda bump up against the limitations of that (as they are administrative tools and perform actions as root and such), and so I can see areas where it's still incomplete, but I'm honestly shocked at how well it all works.

<comment><USER25> What kind scenarios do you find it useful in? I.e. when would you use it instead of native Linux for the same purpose?

<comment><USER26> Mostly just when I first got my laptop and didn't have Linux on it, yet. Which, I guess is begging the question..."When would you use WSL?" "Well, you know, those times when I used it."

So...the answer is I would never use it over native Linux, except when I happen to be in Windows and need to use Linux. The people who currently run a VM with Linux in it on their Windows machine are an excellent target audience. I would guess people who build cross-platform apps would also be an excellent target audience. In fact, using it for a little while got me thinking about what kinds of apps I might like to make, if I were to work on desktop apps again (it's been a very long time since I've worked on anything that installed on Windows, and even as recently as a year ago, the idea of it probably never crossed my mind).

So, it's good for Microsoft. And, good for people who prefer Windows on the desktop, but also have to deploy on Linux servers or deliver to Linux users. People who use Linux natively, by choice, and are very comfortable doing so probably don't gain anything from using Windows with WSL.

<comment><USER25> I just thought about other scenario. Some restricted corporate environment which forbids running Linux natively.

</comment></comment></comment></comment></comment><comment><USER27> What's that certutil and public key thing at the bottom of the .bat?

<comment><USER28> Was curious, too. It's the archlinux icon/shortcut encoded as base64. (it's a common trick to store binary data in a batchfile)

</comment></comment><comment><USER29> The screenshot on the github page shows running _yaourt_ as _root_. I can't see how doing it on Windows makes it less horrifying than on Arch.

<comment><USER30> No, it doesn't.

* [http://askubuntu.com/questions/754942/](http://askubuntu.com/questions/754942/)

</comment></comment><comment><USER31> Care to explain what this is? FAQ = 404

<comment><USER32> Native linux subsystem for windows can run Ubuntu no problem. This "tool" gives you the option to run Arch instead of Ubuntu.

<comment><USER30> Others have already run Fedora.

* [http://stackoverflow.com/questions/38802362/](http://stackoverflow.com/questions/38802362/)

</comment></comment></comment><comment><USER33> Main advantage I see above Ubuntu would be the Arch User Repo (AUR) which contains almost all software you can think of. Although that can change when Snap picks up speed. Snapd is also available under Arch though. Moreover, Arch will be much more current in general.

<comment><USER34> aur is amazing. For a desktop distro, it's what makes Arch one of the best choices IMO. Want <insert package>? You can compile from source and get something your package manager can track. Not to mention never needing to reinstall for a new version.

I love RHEL/CentOS dearly for servers, but needing to write a complex spec file and deal with the rpmbuild system just to get an RPM for a library is a pain. You end up with /usr/local full of stuff that's hard to update.

</comment></comment><comment><USER35> The FAQ link is broken on the page, any ELI5 on what this brings beyond using Arch's package manager and the general goodness of choice? Both of which are awesome in and of themselves, just wasn't sure if there's more here before I jump in.

<comment><USER28> From what I can gather from the BOW discussion (see my link below), it's a kind of custom arch distro ([https://cdn.turbo.run/alwsl/alwsl.sfs](https://cdn.turbo.run/alwsl/alwsl.sfs)). AFAIK WSL is just a rootfs extracted by the lxrun cmdlet. So I guess this replaces Microsoft's rootfs with arch. It seems to be modified to work around some issues in WSL.

</comment></comment><comment><USER36> Good job man, despite all the hate from linux users to windows, truth to be told, this might be helpful instead of running arch on a vm..

</comment><comment><USER37> Interesting to see a Windows Subsystem for what they once called cancer.

</comment><comment><USER38> Ubuntu is crying^_^

</comment><comment><USER39> would this allow for a SteamOS with all windows games support?

<comment><USER40> No. The linux subsystem cannot call windows programs and windows programs can't call linux programs. It's entirely seperated in that way.

WSL looks like a nice replacement for cygwin, but that's about it for me.

</comment></comment><comment><USER41> yay something that doesn't suck. hope it gets better.</comment>


Show HN: Transfer files between computers using WebRTC - <AUTHOR> http://rtccopy.com <comment><USER2> One of the coolest implementations of WebRTC is a project my friend launched called PeerCDN (<https://peercdn.com/>) - basically allows you to reduce bandwidth costs by leveraging the resources of active users on your app.

<comment><USER3> Holy cow - this is amazing!

My girlfriend brought up a good point: is there any way to opt-out of seeding?

<comment><USER2> Hmm not sure... Haven't actually tried it out yet

</comment></comment></comment><comment><USER4> Welcome to 1991, Web browsers.

<http://en.wikipedia.org/wiki/Direct_Client-to-Client>

<comment><USER5> The feature of WebRTC is that you don't have to install any plugins or extensions, but wait, you have to install a 22MB browser instead of few KB IRC client.

</comment></comment><comment><USER6> This is neat. I've been meaning to do something like it myself for fun. I'd be far more interested in one that just let's you drop a file and gives you a URL for your friend to visit with no other steps. Having one of these services that does the transfer directly peer to peer without accounts or setup steps would be great.

<comment><AUTHOR> I think <http://sharefest.peer5.com/> is actually exactly that.

<comment><USER6> Yes! That's a great execution of this.

</comment></comment></comment><comment><USER7> How about testing the WebRTC availability straight on the frontpage?

<comment><USER8> or even a public room with a public name like 'public'

<comment><USER9> I made a room which anyone can join. Would be cool to see how it scales.

<http://rtccopy.com/#KJMHud6Q>

Edit: Incase anyone is interested, I have a chat log up: <http://ancarda.net/rtccopy.log.txt>

<comment><USER8> Tested it. File send and receive does work.

</comment></comment></comment></comment><comment><USER10> Opera Unite was trying to do peer-to-peer centrally indexed file sharing as part of their offering I think (<http://unite.opera.com/application/132/>).

I blogged about it back in 2009 anyhow (under the self-effacing title of "Opera is about to change the world?!"!).

</comment><comment><USER11> any specific reason why it's chrome-only?

<http://www.webrtc.org/firefox>

<comment><AUTHOR> As ianlevesque mentioned in the link below, <http://peerjs.com/status> is a good overview of current state of data channels. As Firefox stabilizes their WebRTC data channel support, I will implement it. Hopefully there will soon be cross-browser support as well for data channels.

<comment><USER12> Firefox is currently ahead on the data channel, right? They support sending blobs / arrayBuffers directly, while Chrome doesn't yet have a reliable transport or binary data support.

Your example translates the file into a base64 string to send over the unreliable channel, which ends up being a pretty big performance hit compared to a native binary transport.

All of this is to say: WebRTC is getting there, but it's still going to be several months before it's ready for more than demos like this.

<comment><USER13> It's true that it supports binary / reliable transport already but there are some very annoying not-to-spec issues. As a library developer, if I added code to support it, it would just go to waste because in BugZilla they've already patched but not pushed changes to these issues.

</comment></comment></comment></comment><comment><USER14> Is this an encrypted/secure connection? I don't see how without certs.

<comment><USER13> WebRTC encrypts by default and you have to manually edit the SDP to turn it off. I highly doubt the developer went to the lengths to do that.

</comment></comment><comment><USER15> My Chrome tab crashed when I tried sending a 440mb file!

<comment><USER16> From their website:

"Your browser will likely crash if you attempt to send a single file larger than 100MB, your mileage will vary."

</comment></comment><comment><USER17> <http://sharefest.me> is another file sharing platform, works both on chrome and firefox (but not inter-operable yet).

</comment><comment><USER6> I suspect the same reasons outlined here: <http://peerjs.com/status>

</comment><comment><USER18> Could you make it work on Chromium on Linux?

<comment><AUTHOR> When I was initially developing this a month ago, I used the Chromium nightly build on Ubuntu on my laptop. Since then my laptop's video card died. I'm going to probably roll out a linux VM soon to make sure this works with Chromium nightly still.</comment></comment>


Drillers turn to big data in the hunt for more, cheaper oil - <AUTHOR> https://www.ft.com/content/19234982-0cbb-11e8-8eb7-42f857ea9f09 <comment><AUTHOR> No paywall link:

[https://archive.fo/XeXLZ](https://archive.fo/XeXLZ)</comment>


Suggest HN: Leaders List useful anymore? - <AUTHOR>

I'm pretty new to HN, but I'm a budding UX designer. One of the things I've noticed about Hacker News is the Leaders link at the top.
The Leaders link (if you haven't seen it) shows the top voted users. Early on this was probably pretty useful. Now though the top user has 33101 points. This is 7931 points above the next user, and a ton more above the users below the second rank.
At this point there will be very few people who will even come close to that number of points and if he stopped posting for the next year (He's 2.9 years old) he might still be on the top, along with the rest on the list.
This destroys the use of a list of "leaders" because if, for instance, I make 10,000 points this week (1,428 per day) from great ideas/links I won't even show up.
So my suggestion is to not make the list 4 columns:
Col1: Users by highest # of votes for that day
Col2: Users by Highest # of votes for that week
Col3: Users by Highest # of votes for that month
Col4: Users by Highest # of votes for that year <comment><USER2> If you stop posting for n days then you drop out of the leader list.

Having said that you are right - to some extent, the leader list is a reflection of time rather than someone's current contributions. Most of my stuff seems to fail to catch an audience these days but I am still up there on the score board.

</comment><comment><USER3> you might want to check out lists at the bottom of the page. here's the link: <http://news.ycombinator.com/lists>

<comment><AUTHOR> Quite useful! Thanks!

Still, it's out of the way (I didn't notice it!) and doesn't quite hit the mark.</comment></comment>


Ask HN: Why is it so hard to get rid of passwords? - <AUTHOR> <comment><USER2> They're cheap, they can easily be changed, they're compatible with everything and everyone (including developers) is already comfortable with them.

U2F/Fido will probably take over in corporate environments, aided by SSO, in the next decade or so, and consumers may follow, but recovery is a huuuuuuge problem for those who can't punt that problem over to email providers.

</comment><comment><USER3> What would you replace passwords with? A token which can be lost or suborned? Biometrics which can be stolen or faked?

Passwords are terrible, but they work.

<comment><USER4> Any sort of public/private key would be pretty secure but humans would not be able to memorize them. And there's the usability problems for normal people, i.e. not knowing when to disclose public vs private key, generating them, keeping them secret, etc.</comment></comment>