This Is Spock's Favorite Psychedelic - <AUTHOR> http://nautil.us/blog/this-is-spocks-favorite-psychedelic <comment><USER2> Let me save you the trouble of reading this clickbaity article:

This is Zachary Quinto's favorite drug (ayahuasca - a hallucinogen[1]), who happened to play spock in the latest Star Trek movies series. This is not a reference to Leonard Nemoy or what Spock the character liked.

[1] [https://en.wikipedia.org/wiki/Ayahuasca](https://en.wikipedia.org/wiki/Ayahuasca)</comment>


Ask HN: Which are the best freelancer sites? - <AUTHOR>

As a recent UK graduate in Maths and CS looking to pick up some freelance work, which freelancer sides (oDesk, Elance, etc) would the HN community recommend? <comment><USER2> oDesk for me. Working there never caused paying troubles and there is a lot of work to do :)

<comment><AUTHOR> Thanks! Registered over there, and there does seem plenty of jobs going.</comment></comment>


Delusions in the Real World Disappointed My Expectations (2019) - <AUTHOR> http://cognitionandevolution.blogspot.com/2019/03/how-delusions-in-real-world.html <comment><USER2> I did not see it mentioned in the article but one reason delusions are so hard to treat is that they are an investment into a belief system and people are hesitant to discard that investment of time, effort, and credibility for fear of a loss with nothing to show for it. That line of thinking is a complete absence of objectivity due to sunk cost fallacy stemming from a behavior of loss aversion. Therefore new evidence, particularly conflicting evidence, are irrelevant.

[https://en.m.wikipedia.org/wiki/Sunk_cost](https://en.m.wikipedia.org/wiki/Sunk_cost)</comment>


Ask HN: Which service do you use to accept payment?   - <AUTHOR>

<comment><USER2> What are you accepting payments for?

WePay is great for anything based around a group. They have a really nice API - I built <http://www.everribbon.com> with it

Amazon FPS is also really great if you want to do anything complicated. Unfortunately this means that the API is also very complicated and a bit hard to dive into.

Shoot me an email if you want to ask me questions about either one.

<comment><AUTHOR> Mucho thanks! Will explore your suggestions and follow up with you. Appreciate your help!

</comment></comment><comment><USER3> We ended up settling on a combination of TrustCommerce and Chargify.

Chargify made the integration ridiculously easy. Initially I wanted to go with BrainTree but the deal we got from TrustCommerce was more favorable to us since we do not yet have much traction.

<comment><AUTHOR> Thanks a ton for the input. Appreciate it. We are about to try to start monetizing the site after developing it over the last few months and appreciate your help!

Would love to hear from the others.</comment></comment>


Modern C++ for C Programmers: part 5 - <AUTHOR> https://ds9a.nl/articles/posts/cpp-5/ <comment><USER2> Previous parts:

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

[https://ds9a.nl/articles/posts/cpp-2/](https://ds9a.nl/articles/posts/cpp-2/)

[https://ds9a.nl/articles/posts/cpp-3/](https://ds9a.nl/articles/posts/cpp-3/)

[https://ds9a.nl/articles/posts/cpp-4/](https://ds9a.nl/articles/posts/cpp-4/)

<comment> 52-6F-62 Thanks! I missed this the first time through

</comment></comment><comment><USER3> Return value optimization is absolutely allowed in C, and ~all compilers do it. It's not commonly talked about because in C, there can be no side-effects when constructing or copying a struct, so there's nothing to discuss. It just happens automatically and there's no observable change in program behavior.

<comment><USER4> C compilers can do copy ellision when inlining code as long as the result is identical. That's not quite the same thing as RVO, which deliberately relaxes the notion of "identical result" such that it's possible to write C++ code to detect whether or not RVO was actually performed. That's not possible in C (or shouldn't be).

<comment><USER3> It's possible that I'm missing something, but I believe that the result is necessarily identical in C, because there can be no observable side-effect of a struct copy in the C abstract machine.

<comment><USER5> No, it is not necessarily identical in C, because even though you don't have constructors or destructors, you can make an address comparison to check whether two objects are identical.

For example the following code:

[https://godbolt.org/g/ikD6bi](https://godbolt.org/g/ikD6bi)

where the address of the caller's variable that will take the return value is passed along to the function returning it. Within the callee, f1 and f2 must be different objects in C, but not in C++.

All decent compilers compile this in C++ with only a single object, so sink() will receive identical objects. Most compilers "deoptimize" this in C since sink cannot receive identical objects: two objects are created so f1 and f2 have different addresses, and a copy is performed from f2 to the return value f1.

Due to a bug, clang mis-compiles this and applies the C++ RVO to C. So you maybe you are right: you _can_ get RVO in C, but only due to a compiler bug!

<comment><USER3> Ah, yes, that's a nice example.

</comment></comment></comment></comment></comment><comment><USER6> Please please please can we get rid of headers and have modules? I find it super annoying having to specify things half in one place and half in another. Unfortunately, there still seems to be a bit of disagreement on the implementation among the standards committee.

<comment><USER7> Single-file header libraries are actually all the rage in C++ these days. Here's[1] a list even!

[1] [https://github.com/nothings/single_file_libs](https://github.com/nothings/single_file_libs)

<comment><USER8> This is what you get if you're missing a proper package management that allows users to easily install their libraries.

That single file is the substitute for a package that you can simply put somewhere, include it and it works.

<comment><USER9> It takes all sorts, but I prefer the headers. Each project's copy only gets upgraded explicitly, the debug info is always there, single stepping always works, there's never a problem with ABI/compiler option mismatches (and you get the unoptimised version in your unoptimised build), anybody that gets the repo automatically gets all the dependencies too.

<comment><USER10> I.e. all the things you would get from a proper package manager if there was one for C++.

<comment><USER9> Sure... but it would have to be proper-as-in- _proper_. And what are the chances of that? Seems to be hard enough to even enforce the rule that ``-O3 -g'' is a thing, let alone all the rest :(

</comment></comment></comment></comment></comment></comment><comment><USER11> I wish I had a project that warranted C++ right now. It's a magnificent language.

<comment><USER12> What would make a new project a good fit for C++?

<comment><USER13> Performance critical.

<comment><USER8> Also if Rust is not cutting it yet in your specific niche.

<comment><USER14> I find D to be a good tradeoff between C++ and Rust. I can't stand not having compile-time evaluation, code generation and reflection in Rust and C++ is just too slow to iterate with.

<comment><USER8> Working with Python lately I very much got to like the interactive REPL and its immediate feedback.

I actually think I forgot how to program in C. It lacks almost every data structure I'd deem useful to getting complex and mixed problems solved quickly. C++ provides many things and is useful if you are in a tight spot or you want/need the speed.

If Rust keeps evolving at a quick pace I think I'll look into it a lot in the future.

D seems to me like a good thing that is better in many ways but has some critical drawbacks for me like not working on many microcontrollers (an area where C++ really shines). On the other hand it isn't radical enough to really dive into it.

<comment><USER15> Why wouldn't D work on microcontrollers? Runtime is too big? GC too difficult to avoid? Even in -betterC territory?

<comment><USER16> Compiling the hello world with -betterC yields a binary of size 8.2K. Seems small but when your microcontroller has 8K of program space that's just untenable. Of course those small micros are getting rarer nowadays when a large AVR and ARM micros are cheap, but there is still an entire range of minimal microcontrollers that are extremely limited in resources.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> is there a modern C++ for python programmers? i have ~5 years programming in dynamic/interpreted (python/js) and compiled/gc'd(java/go) languages and i'd like to learn a systems language. i'm reading the rust programming book (and it's really good/easy to grok) but i'd also like to learn C++. the problem is that most books are either too easy (C++ as your first language) or too hard (straight into RAII and templates). any suggestions for learning resources? modern being key here (stuff like auto ptrs etc.)

<comment><USER18> Have you tried "A Tour of C++"? [https://www.safaribooksonline.com/library/view/a-tour- of/978...](https://www.safaribooksonline.com/library/view/a-tour- of/9780134998053/)

<comment><USER19> Been getting back into C++ lately after not using it since college ('02), did not know they were releasing a new edition of Tour of C++, will have to check it out (already read Principles and Practices which was interesting once it got into the meat of C++, and plan to read Myer's effective books at some point).

</comment></comment></comment><comment><USER20> > In general, always prefer the std::make_* form for smart pointers. For > std::shared_ptr it turns two allocations into one, which is a huge win both > in CPU cycles and memory consumed.

You also get exception safety because the it's not evaluated in an unspecified order.

</comment><comment><USER21> Does anyone know what this means?

"Such magic does not come for free however. If we look 'inside' a std::shared_ptr, it turns out it carries a lot of administration. First there is of course the actual pointer to the object contained. Then there is the reference count, which needs to be updated and checked atomically at all times. "

My impression was that simply dereferencing, which is going to be most of the use of it, is not checking that counter at all. Only things like assignment modify it, which should be more rare.

<comment><USER21> Edit: it looks like that comment on the blog is incorrect. You only incur overhead from copying or going out of scope.

</comment></comment><comment><USER22> That SmartFP class is not safe to use, it doesn't implement or block the copy constructor so you might get two objects pointing to the same FILE*. (rule of five vs rule of zero)

The article does mention this, but only very briefly and only gives one of the two solutions without much explanation behind and it isn't exactly easy to find it in the article even if you know what you are looking for. Search for deleter in part 2 of the article to find it.

</comment><comment><USER23>
        auto ptr = mmap(NULL, sizeof(std::atomic<uint64_t>), PROT_READ | PROT_WRITE,
                        MAP_SHARED | MAP_ANONYMOUS, -1, 0);

        g_counter = new(ptr) std::atomic<uint64_t>();

waw, a 4k integer (or even more, depending on the platform).

<comment><USER24> I don't see the problem here. The code you quote is correct and guaranteed to allocate the minimum amount of memory for which the hardware can support the requested functionality.

It passed sizeof(std::atomic<uint64_t>) as the length parameter and mmap() decided to give us a larger page (which may or may not be 4k) for its own very good reasons, namely that the overhead of keeping track of hyper-granular memory pages would cost more than it would save.

For a program that needs at least one shared counter, it's not possible to allocate less than one page of shared memory, regardless of if its implemented in C++, C, or whatever language -- it's a hardware level decision. If MMU designers could still provide 512 or smaller pages with the same performance as 4k pages they would certainly do so. Nor is it reasonable to keep track of memory flags like MAP_SHARED at a more granular level than a single page.

If the program _did_ need more than one shared counter, it could instead use something like std::array<std::atomic<uint64_t>, 512>. In other words, there's no reason why it would have to allocate 4k for _every_ shared counter -- there's zero inherent overhead. It appears as if this particular program only needed 8 bytes, request 8 bytes, and had its request satisfied in the best way the hardware could allow.

<comment><USER23> Well, there's not a lot of context to say whether there are more shared counters. That said, I overlooked the MAP_SHARED, and the code actually got itself in non-portable land. Not all atomics are actually atomics. IIRC, at least ARM doesn't have 64-bits atomics, and using atomics on such platforms means using locks. Which are very likely to not work properly in shared memory.

</comment></comment></comment><comment><USER25> Wow that was a good post. I have read other Modern C++ things are they were so dense. If all the sections were in a little book, I'd buy it.

</comment><comment><USER26> > The move constructor is the important bit. Its presence tells C++ that this > class can not be copied, only moved

Is that true? I thought move ctor enabled move semantics, but if you pass by value the copy ctor was still called (except in places where RVO makes sense). And I thought to disable copying you made the copy ctor = delete.

<comment><USER27> The implicitly-declared copy constructor is deleted if there is a user-defined move constructor. See: [https://en.cppreference.com/w/cpp/language/copy_constructor#...](https://en.cppreference.com/w/cpp/language/copy_constructor#Deleted_implicitly- declared_copy_constructor)

So if you define a move constructor and still want your class to have a copy constructor, you'll have to explicitly define the copy constructor, too.

<comment><USER28> Luckily, in modern C++, defining the copy constructor in this case (where you just want to make the default available) is as simple as:

        A::A(const A &other) = default;</comment></comment></comment>


Show HN: Food from Twitter - <AUTHOR> http://servletsuite.blogspot.com/2012/06/food-from-twitter.html

<comment><USER2> Some x-rated photos got through.</comment>


Buy an iPod, get a free virus. - <AUTHOR> http://www.cnn.com/2008/TECH/ptech/03/13/factory.installed.virus.ap/index.html Going forward, I'm wiping new machines and reinstalling from disk when they arrive.<p>Not to mention that the factory install of os X was seemingly screwed up on my MBP and missing tar and gnutar entirely. <comment><AUTHOR> Going forward, I'm wiping new machines and reinstalling from disk when they arrive.

Not to mention that the factory install of os X was seemingly screwed up on my MBP and missing tar and gnutar and I'm still not sure what else.

<comment><USER2> There was nothing wrong with your factory install. As I said in a previous reply, gnutar is installed as part of Apple's Xcode Tools. It is not included by default.

There is no reason to format every factory-new machine that you receive. That's just paranoia. These incidents have been relatively rare.

<comment><AUTHOR> And as I said in that post, I already had the Xcode Tools installed. In fact, based on your advice, I reinstalled the Xcode Tools to be sure.

You're telling me that plain old tar should be missing, by default, on an OS X machine? I ended up taking tar and gnutar from a buddy's machine who did not have Xcode Tools installed. He's not a developer--he doesn't know what xcode is! He had both files from a clean install of his shiny new Leopard install disk.

It's not paranoia. You trust strangers in China? What's the downside to reinstalling? Maybe an hour? The upside is reduced risk of someone emptying out your bank account. For these factory workers, the contents of one US bank account might be 5-10 years pay. If you think this is paranoia, hope you don't manage any security functions. I think it's just being safe.

<comment><USER2> If you installed Xcode Tools/Developer Tools, then you have a copy of gnutar. Mac OS X, like other BSD systems, include their own version of userland tools in the base system. If you want the GNU version of specific tools, you have to install it separately. That's why gnutar is in MacPorts and that's why, if you extract the Developer Tools package, you'll find gnutar. It's not there by default.

I find your claim that somehow your factory install is incomplete very unlikely. Your factory-new laptop is missing these specific files yet everything else operates normally? No.

<comment><AUTHOR> Forget gnutar, let's talk about tar which was also missing. Can you show me that tar should be missing from a new os x install and is installed only with xcode tools? The problem is, if you could, that still wouldn't explain things, but I can tell you're dying to be right.

Unlikely stuff happens, just less often. I appreciate that you were trying to be helpful and to you I'm just "random internet guy" but I'm being honest, I already fixed the problem, and it was as I am stating. Telling someone staring at a blue moon that "that's unlikely" is just going to piss them off. You've squandered the goodwill and karma your original helpful comment in the other thread merited. This conversation has nothing to do with xcode anymore, but a lot to do with tool. Can we stop the "it works on my machine" BS now and move on?</comment></comment></comment></comment></comment>


GitTorrent: A Decentralized GitHub (2015) - <AUTHOR> https://blog.printf.net/articles/2015/05/29/announcing-gittorrent-a-decentralized-github/ <comment><USER2> Hi! I started this project in 2015, using Bitcoin and BitTorrent -- since then, I think Ethereum and IPFS have become better substrates for this sort of work.

And, I think it remains the case that the difficult part of decentralizing GitHub is not working out how to share repositories using p2p bandwidth, but instead working out how to use p2p for the social features of the site, like comments and pull requests.

Secure Scuttlebutt has some potential there, but as a gossip protocol it doesn't have a way for people you don't know/follow to e.g. send you a PR.

<comment><USER3> Gitea, Gogs, and Gitlab all have social-federation-related feature requests open right now. Not sure where they will land, but some are mentioning ActivityPub.

<comment><USER4> Cool! That is really interesting. ActivityPub would be great for this. I've added in links to the issues below:

Gitea:

\- [https://github.com/go-gitea/gitea/issues/1612](https://github.com/go- gitea/gitea/issues/1612)

\- [https://github.com/go-gitea/gitea/issues/184](https://github.com/go- gitea/gitea/issues/184)

Gogs:

\- [https://github.com/gogs/gogs/issues/4437](https://github.com/gogs/gogs/issues/4437)

Gitlab:

\- [https://gitlab.com/gitlab-org/gitlab- ce/issues/44486](https://gitlab.com/gitlab-org/gitlab-ce/issues/44486)

\- [https://gitlab.com/gitlab-org/gitlab- ee/issues/4517](https://gitlab.com/gitlab-org/gitlab-ee/issues/4517)

edit: added gitlab enterprise link (plus formatting)

</comment></comment></comment><comment><USER5> I would just like to mention, that in my opinion "decentralized GitHub" is an oxymoron, Github's innate feature is being centralized, to centralize developers into one place, being a kind of social network.

<comment><USER6> But there are decentralised social networks (e.g. Mastodon). What are your thoughts on those?

<comment><USER7> And who uses mastodon? I have never heard of a single friend even mention mastodon. ever. Decentralised might be utopia for us, the hackers, the techies... centralised however is for the masses. It's simply easier for them to be where their friends are.

<comment><USER8> I don't remember where I first read it, but I liked this opinion: in the future, decentralization, even if only adopted by a techie minority, will serve as a threat of what could be, thus keeping the centralized powers in check.

<comment><USER9> Full technical and governance decentralization is an utopia based on computer science fundamentals. We need to start thinking about the constraints instead of just jumping to the decentralization bandwagon as if was a matter of choice.

</comment></comment></comment></comment></comment><comment><USER10> Decentralised Centralised Decentralised Version Control System. What fun.

<comment><USER11> I think he's trying to decentralize the centralized part of git. Makes sense?

<comment><USER12> There is no centralised part of git. He's trying to decentralise Git- _Hub_ , which is a centralised website that has many feautres, issues, projects, etc. + acts as a hosted Git remote.

Git != Github

<comment><USER13> There is no _Hub_ in the article.

The problem with Git decentralization is that you need a publically accessible endpoint (meaning there is an eventual central host). Even when you are using email for patch files, your email becomes the central point of failure (even if you host that yourself). So far as fetch goes, this is why git.kernel.org exists.

Git behaves like an mp3-sharing website with multiple mirrors, where-as gittorrent behaves like magnet URLs. This protocol effectively obsolesces the requirement for remotes.

<comment><USER12> > _There is no Hub in the article._

Not sure what you mean by this. The article mentions and compares itself to Github throughout.

> _The problem with Git decentralization is that you need a publically > accessible endpoint (meaning there is an eventual central host)._

I disagree slightly here. It's completely possible to build a network of remotes that don't all reference a single central origin (e.g. teammates referencing eachothers' local repos over authenticated connections, possible on a LAN, etc.). This gets messy and is hard to administer securely, but Git is more than capable. Also, the challenges of doing this Gittorrent securely with private repos seem similar to those of using SSH remotes between individual dev machines.

In terms of the article talking about "hubs" (Github specifically), Gittorrent purports to replace the need for Github, but only fills one of the uses of a hub. A hub like Github serves two purposes:

1\. a central origin, i.e. the same use git.kernel.org serves

2\. a searchable/discoverable network, e.g. the same use the central thepiratebay.org search engine serves for Torrents. Decentralising this seems like a hard problem.

</comment></comment></comment></comment></comment><comment><USER14> So, I think there's a couple relevant issues when talking about decentralizing a github like service. There a couple of things Github provides, and my naive approach to making GitHub less essential would be to address them one by one:

* Issue tracking. It's a bit hard to export these. I imagine it'd be a bit nicer to export if issues were actually stored inside git as trees. You could easily make the issues frontend use git as the storage backend. If users don't have an account, maybe they could issue a pull-request to the issue tracker?

* Notifications. This ones's a bit harder. Web-hooks?

* Merge requests - github uses refs internally (I think). That wouldn't be too hard to standardize. If somebody adds commits to their pull/merge request, then they just have to push the updated ref to the repo they're submitting to.

* Auth - this is hardest part. GitHub provides authentication & permissions for pushing. The issue with allowing merge requests submission from anybody (which you could do with a server side hook) is that now people can ddos you by submitting HUGE pull requests constantly. If you could make that safe, in theory you could get away without needing user account federation.

* There is also the big security issue that you can't actually use server side hooks for this stuff since libgit2 can be used to bypass it (when pushing using libgit2, it doesn't trigger server side hooks).

* Oh, and this entire time I've been thinking about the email & username as being unspoofable. But you can easily spoof them. I guess you need federated user accounts after all.

Edit: It's untrusted _interactions_ that's hard to decentralize \</comment><comment></comment><comment>---

All in all, I think that git is easily decentralized if you know you can trust all the actors. It's untrusted git that's harder to decentralize.

<comment><USER15> Regarding issues, the article mentions storing them in the repo using BugsEverywhere. I use Artemis for this since it's simpler than BugsEverywhere.

I don't think "pull requests" are necessary for such a system. Even if you like the pull request workflow (I personally find it tedious and cumbersome) it can be achieved via existing mechanisms like personal email, mailing lists, IRC, pastebin, etc. Trying to define one workflow and baking it into a protocol sounds like a receipe for bloat. Note that git already has built-in support for email.

Regarding authentication and permissions: I don't think git is any different from other mutable collection of files in this regard. For example, I push my git repos to IPFS just like any other files, and use IPNS to point at the latest version. IPNS uses keypairs to limit access, which is a pretty standard technology with known practices for things like revocation, indirection, etc.

Notifications are just another 'mutable collection of files', e.g. an RSS feed, so solvable in the same way.

</comment></comment><comment><USER16> git-ssb is better than gittorrent, as bittorrent itself relies on a global DHT, which can and has been censored.

<comment><USER17> Some links:

git-ssb (Git over Secure-Scuttlebutt):

\- [https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoy...](https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoyf2DtR3WQfCkDKlheQU%3D.sha256)

\- [https://github.com/noffle/git-ssb-intro](https://github.com/noffle/git- ssb-intro)

Secure Scuttlebutt ([https://www.scuttlebutt.nz/](https://www.scuttlebutt.nz/))

<comment><USER18> Thanks for sharing. I was discussing trackerless p2p social network with offline publishing and syncing when close to a friend a few months ago, I'm amazed how Scuttlebutt seems to be exactly that.

I was thinking of using high frequency sounds (inaudible) for peer discovery when in the same room, like chromecast is doing when phone and chromecast are not on the same local network, but simply scanning network seems to work just as well, apparently.

</comment></comment></comment><comment><USER19> What are the practical downfalls of this? Will my data be lost if the project is not popular enough? Is it possible for peers to modify the repository? Can I use access restrictions? I'm talking about the `gittorrent://81e24205d4bac8496d3e13282c90ead5045f09ea/recursers` URLs, not the GitHub based ones.

<comment><USER20> > Will my data be lost if the project is not popular enough?

I'd like to know how that works out too. I suppose in the end it's up to you to make sure you keep a base copy of your project so it is always available, even if near zero popularity.

<comment><USER2> I can think of a few interesting approaches:

1) We set up something like the Internet Archive, spidering and caching the network, run using donated bandwidth. The hosting could be centralized like the Archive or p2p itself (donated by peers).

2) A system like FileCoin's where you pay a tiny amount of money to ensure other peers will always host your repos on the network.

3) A straight up centralized, for-profit service where you pay a company a monthly fee to host your data on the network, as people already do with GitHub itself.

<comment><USER21> Please note that FileCoin doesn't provide any guarantees. It only provides incentives for other people to host your data.

It's like paying a centralized service, except you don't have any recourse (legal or financial) if the people hosting it decide to stop.

<comment><USER2> Thanks for the correction. I guess you get a probabilistic "guarantee" in that you could see how many peers are serving your content at any given time, and make assumptions about their independence from each other and likelihood that your content will stay available?

</comment></comment></comment></comment></comment><comment><USER22> What are the features that make GitHub? What if we used only git on the command line?

Which features would we miss?

Maybe we could add those features with something similar to git, some intelligent scripts?

<comment><USER23> PRs and issues. PRs can be distributed using git appraise: [https://github.com/google/git-appraise](https://github.com/google/git- appraise)

<comment><USER24> Also each user's "home page" of notifications. When I worked exclusively on open-source projects, it became my daily "task list". It was very efficient to have it all in that UI.

<comment><USER23> I agree, notifications page is great, I also use it daily. Another thing is profile page.

Maybe they could be solved in a federated way like Mastodon?

</comment></comment></comment></comment><comment><USER25> A good way to implement this is with the Dat protocol:

[https://datproject.org/](https://datproject.org/)

They already have a competent P2P twitter clone, as an example app. If it can do that it can probably do a github.

</comment><comment><USER26> You should also look at [http://pijul.org](http://pijul.org)

</comment><comment><USER27> I don't think this project should be git _torrent_ \-- after all, one of the reasons bittorrent got so popular is non-distributed tracker and .torrent files, which provide efficiency and authenticity.

Maybe git-donkey or git-gnutella instead?

</comment><comment><USER28> In case you're looking for alternatives, this thread might be of some help: [https://news.ycombinator.com/item?id=17241487](https://news.ycombinator.com/item?id=17241487)

</comment><comment><USER29> SSB-Git

[https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoy...](https://git.scuttlebot.io/%25n92DiQh7ietE%2BR%2BX%2FI403LQoyf2DtR3WQfCkDKlheQU%3D.sha256)

</comment><comment><USER30> I like the idea. I think it would be an interesting development to counter the centralization in the big5. GitSpoke?

</comment><comment><USER31> what 'knows' the HEAD?

<comment><USER32> I'm waiting for gitcoin.

<comment><USER33> Freenet/Zeronet have updatable sites already, should be trivial to do with git commits, grab the latest signed update based on this name and key hash...

Overall though I think a federated system that also handles issues is better, something more akin to Fossil.

<comment><USER34> Fossil seems like one of many potential upgrades, and it's the second time I hear about it today!

However I think the main problem is almost always existing users. Git has arguably been falling behind in terms of features for quite a while now, but its momentum makes it hard for a lot of devs (including me!) to switch to a different vcs.

<comment><USER35> > _Git has arguably been falling behind in terms of features for quite a while > now_

It's all I've ever really used, and I've never seriously considered alternatives. What features in other VCSs are interesting?

<comment><USER15> Mercurial is very similar to git, but its CLI is considered to be easier than gits (if potentially less powerful). Another difference is that mercurial heavily discourages editing of history, which some git users seem to like doing. Git is also faster than mercurial.

GNU arch was an early DVCS but didn't seem to gain much traction. It was eventually superceded by Bazaar, which is much slower than git but was better at tracking history e.g. across renames. I think git has improved in that area, and bazaar has been getting less popular.

Fossil is built on an sqlite database and has a built-in Web UI and issue tracker, which is fine for those who want that but violates the "do one thing" principle (e.g. if you wanted to use some other issue tracker).

Darcs keeps track of patches and their dependencies, unlike git and mercurial (which track snapshots and their diffs). This approach supposedly makes life easier, and makes the darcs CLI quite usable. One problem is that some of the merge algorithms can take an exponential amount of time to complete, which has been getting addressed in recent years but many users seem to jump ship to git.

Pijul is similar to darcs, but breaks compatibility in order to solve the exponential merge problems. It looks very promising, but is still _very_ new.

</comment></comment></comment></comment></comment></comment><comment><USER36> when ico?

</comment><comment><USER37> This faux outrage at github being acquired by Microsoft is already boring.

<comment><USER38> ya.. microsoft, the committed mortal enemy of Open Source Software, is now holding the most important hub for Open Source Software.

<comment><USER39> What year are you living in?

<comment><USER40> To paraphrase what someone else said yesterday:

In a world where companies are expected to have growth every quarter, a project like GitHub is one bad quarter away from microsoft making major changes or being abandoned or being completely shutdown.

As we've seen with product after product, when companies are expected to have growth every quarter, they will sometimes (often?) make radical changes to the software. In the case of GitHub, if microsoft decided it needed far more profit coming in from GitHub, it is entirely reasonable to expect they may decide to shift it into a service which is only usable for their large corporate partners, or they may decide the social features need to go, or they may decide to stop allowing public repos, etc...

Microsoft has shown many many times in the past that they're more than willing to throw out open standards and attempted to force adoption of their own proprietary standards.

It is entirely reasonable to be at least a tad skeptical given their history and their business model.</comment></comment></comment></comment>


To Protect Voting, Use Open-Source Software - <AUTHOR> https://mobile.nytimes.com/2017/08/03/opinion/open-source-software-hacker-voting.html <comment><USER2> Recent discussion: [https://news.ycombinator.com/item?id=14920513](https://news.ycombinator.com/item?id=14920513)

</comment><comment><USER3> No. To protect voting, don't use software. Everyone needs to be able to _understand_ as well as be able to verify that they successfully voted.

Besides the issues with what software the machine is actually running, most people cannot comprehend or understand that software - even if it is open source. That is not acceptable for an open democratic society, or to sustaining it.

In this particular situation it should not be necessary to rely on an expert to explain whether the vote counting mechanism is reliable. This only adds to the problem of unreliable or scheming officials - it doesn't improve anything in terms of transparency.

<comment><USER4> Voting with paper does not scale. You can't make people vote everyday for example, which is required if you'd like to implement direct democracy.

On the other hand, with direct democracy, the stakes are lower for each vote. So there is less incentive to manipulate the vote. So it makes sense to use e-voting for direct democracy.

In the end the voting mechanism in democracy is not really about precision, it's more about getting an acceptable outcome for all the parties

<comment><USER5> Public - i.e. everyone knows how others have voted - voting can be both precise and secure. Public voting can be done electronically, say, via encrypted SMS.

So why to bother with secrecy in the first place?

<comment><USER6> So you can't pay people to vote for a particular candidate.

<comment><USER5> Do you know how people take photos of themselves voting at "secret-keeping" poll-stations? How about politicians, which publicly give lucrative promises to their particular electorate?

If they want to sell their vote - it is their choice. I'd only say that the right of citizens to secede from such a society must be respected too.

<comment><USER7> >Do you know how people take photos of themselves voting at "secret-keeping" poll-stations?

That's illegal, and (somewhat contradictorily) not non-repudiable. You can take a picture of yourself with "ballot marked for candidate I'm paid/coerced to vote for" and then step right out and say "oops, I messed up my ballot, give me another one" and then submit that.

</comment></comment></comment></comment></comment></comment><comment><USER8> Electronic voting is a bad idea and I'd be suspicious on anyone trying to promote it.

How can you know that even if the source code for the voting machine is open, the voting machine is running the exact same source code? How can you know nobody has tampered the code the instance is running?

I'm glad my country is still running on paper ballots and glad we require voter ID.

<comment><USER9> Came here to say that.

Transparent voting boxes, ballots in envelopes, manual redundant counting done by people, usually voter who were nicely asked if they can come help back in the evening. That's what we use in France, you get the official result a few hours after the closing of the voting stations.

The whole process is watchable, from the sealing of the box the morning to the count in the end and parties send observers in random stations to check nothing fishy happens. An official log book is open for anyone to notice if they feel something fishy happened (you were not allowed to vote, the counting was unfair, etc...)

Oh, and make voting day a holiday, or just put it on Sundays.

I used to wonder how US could not even get that last part right, but then I understood that a whole party thinks it is in its interest to have less voters.

<comment><USER10> Or make voting last multiple days instead of just one.

<comment><USER9> That makes it harder to keep an eye on the voting process from A to Z, which people do in the current process. If the box containing the ballots stay alone, trust is lowered.

Seriously, is it harder to make a daily holiday and a transparent process than landing a man on the moon with tech from the 60s?

</comment></comment></comment></comment><comment><USER11> I'd like to reference Tom Scott's video[0] here. There is no need for an electronic voting system, paper ballots work perfectly.

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

<comment><USER12> Until you want to scale due to using rapid direct democracy. Paper ballots will still WORK perfectly, but the workload will be massive.

<comment><USER13> Which is something you can justify IMO for a direct, just, free, equal and confidential election.

</comment></comment></comment><comment><USER14> This is plain bullshit. Opensource gives no guarantee that the vote won't be altered by whoever runs the machine.

What we need is a zero-knowledge proof: we need the entire voting dataset to be publicly downloadable and some kind of checksumming so that, while maintaining anonimity, I can 1)check that my vote is the same 2)run whole the counting in a blink on my PC.

This gives much better guarantees of no tampering

<comment><USER15> One other requirement too.

3) Users should not be able to prove to another person who they voted for

This is to prevent people from using threats of violence or promise of reward to coerce others into voting a certain way.

Unfortunately, this requirement is very hard to fulfil while also fulfilling requirement 1.

<comment><USER16> 4\. Check that all votes in the tally belong to actual, eligible voters.

Verifying your vote is in the sum, and tallied, is not good enough if the result is swamped with, or more craftily, the balance just tipped by fake votes.

I have no idea how you would implement that.

</comment></comment></comment><comment><USER17> First and foremost, use paper ballots. Before anything else. The paper ballots are the System of Record. If ever in doubt about downstream results, paper ballots can be hand-counted. (Additionally, use paper voter rolls. Mark registered voters when they vote, and track any same-day registrations on paper. The exact number of ballots cast can be extracted from the voter rolls.)

Second, _never_ allow paper ballots to be handled by just one person, or by only members of one party - whether blank or used. Require that members of at least two political parties be present any time the ballots are physically touched.

Third, if using machines to read the ballots (ScanTron, etc), conduct spot counts of random machines, to make sure the machine results match the paper ballots. Conduct spot counts of entire polling stations randomly to make sure result totals match voter roll totals. Although this isn't 100% certain, it doesn't take a lot of spot checks to detect any sort of large-scale fraud effort.

Do these things, and it's exceedingly difficult to do statistically meaningful vote fraud, because we have a high degree of trust in the paper ballots and their surrounding process. From there, you can use automatic ballot reading and tallying to get fast results - the vote counting/tallying automation is derived data, not the System of Record.

</comment><comment><USER18> A child can understand paper ballots and why they work.

There are probably less than a hundred people in the world who can understand an electronic voting system at every level down to and including the silicon.

<comment><USER19> Bingo. And those of us who've studied voting computers _extensively_ have concluded they're to be avoided.

</comment></comment><comment><USER20> To protect voting don't use electronic voting.

Paper ballots (the kind with marks read optically, not the ridiculous punch cards at the center of the Florida 2000 debacle) are easy to use and understand with a very low error rate and keep a paper trail, being the actual ballots.

I don't understand why anyone other than the companies who sell e-voting machines actually want electronic voting.

<comment><USER19> You have to hang out with election administrators to grok that. Their motivations are not the same as the voters. Their election night prayer is "Please God, don't let this election be close."

They want certainty more than any thing else. For decades, computers were regarded as more accurate, impartial, certain than human tabulators.

Second factor is appropriations. Elections are big money. And like all industrires, there's a revolving door between government and industry.

Admin also want control. Their impulse is to centralize, simplify. Think of the logistics of running 100s of voting sites, 1,000s of precincts. All the training, people, materials, gear that has to be stored, shuttled around, repaired, etc. Moving to voting computers, reducing head count, moving to central count _seemed_ like a huge win. (But you and I people computer people, we know they just traded problems.)

</comment></comment><comment><USER21> To protect voting, use paper ballots.

<comment><USER22> Paper ballots without voter ID requirement are ridiculous.

<comment><USER23> The UK seems to manage OK (ID is only required in Northern Ireland). 2015 saw 37 allegations of personation out of 51.4 million votes cast ([https://www.ncpolitics.uk/2016/12/how-big-a-problem-is- votin...](https://www.ncpolitics.uk/2016/12/how-big-a-problem-is-voting-fraud- in-uk-elections.html/)).

<comment><USER22> Yes. My point would be allegations of personation is a meaningless number. Because if there is no voter ID you would not get many of these allegations either way.

<comment><USER23> Only if those perpetrating this kind of fraud somehow knew who wasn't going to bother voting, otherwise you'd have large numbers of people turning up to vote only to discover that someone had already voted in their name.

</comment></comment></comment></comment></comment><comment><USER24> As someone who is a firm supporter in free software as the best option in every area, this feels like a subversive attack.

Voting software is bound to fail, no bug bounty is big enough to offset the billions that could be made off of hacking an election. It is bound to fail spectacularly, and then for the rest of time people can point at the election and say "the ability to see the source code let this happen."

</comment><comment><USER25> Geneva has made its e-voting software public: [https://republique-et-canton- de-geneve.github.io/chvote-1-0/...](https://republique-et-canton-de- geneve.github.io/chvote-1-0/index-en.html)

I'd much prefer electronic to paper. Last year I voted on 24 initiatives, and that is just the federal level. It also does not include elections.

</comment><comment><USER26> Someone needs to start a campaign: "Say No To Electronic Voting"

</comment><comment><USER27> Well, IMHO a good way to digitize voting would be to give out a USB-drive-like (NFC) device with an option to set a value and lock it in the read-only mode using voter ID.

How it will work: A person gets this device in the voting center enters/gets his voter ID, does the voting (anonymously), presses the read-only lock and throws it into the bin. After all the voting these device are scanned and voting data is retrieved. A voting database is populated in each center in a transparent way, to prevent tampering (several parties can be allowed to read this data separately and then all data variants can be compared against each other, just in case). After consensus on the voting data, each voting center sends the results for counting. And the voting is completed.

In the end, these devices are reset and the cycle continues.

Well, I'm sure that there must be some problems when voting the aforementioned way. But I guess it could work out, with some modifications.

EDIT: Grammar.

<comment><USER28> That sounds a whole lot like paper voting to me...except more expensive and more complicated. What's wrong with giving everyone a pencil and a ballot paper, at the polling station, in place of the NFC device?

</comment></comment><comment><USER29> Previous discussion (5 days ago): [https://news.ycombinator.com/item?id=14920513](https://news.ycombinator.com/item?id=14920513)

</comment><comment><USER30> My first job was an ethnography of electronic voting in a wealthy region in northern Italy.

By our observations electronic voting added several layers of complexity that are difficult to justify.

</comment><comment><USER31> Why can't you have everything set up so that when you vote, you get what amounts to a JSON Web Token to be able to later verify that you did in fact vote? You could use the governments publicly available key to verify that your vote reached the central service, and part of the JWT could contain your vote as well as your identifying information (SSN in USA).

Obviously everything could have fancy UIs created for end users so they don't see that really all have is a JWT (maybe a QR code printed out when they vote? And all the info easily human readable?). Verification could be handled by a .gov address and also through manual use of the public key (so other services could be set up to verify votes as well). And internet connectivity wouldn't be a problem as they could just require T1 lines at polling locations (I assume if phones went out across the country the election would be delayed regardless). You could likely tell if someone had stolen the private key (the only way I can think of breaking this system), if you have a service to verify someone's vote, and it doesn't show up there, even though you have a signed JWT containing your vote. That would prove someone had stolen the private key, allowing for a makeup election.

Am I missing something basic of how this would be hackable? I'm one of those who finds it odd that many elections around the world are susceptible to simple human mistakes/purposeful malicious actions when it comes to counting ballots.

</comment><comment> wu-ikkyu Why is it that electronic voting is so vehemently opposed here on HN and by many technologists in general when virtually every other existentially vital system they rely on is run electronically?

<comment><USER32> Because it doesn't work.

<comment> wu-ikkyu Does a system have to be 100% free of security concerns to "work"?

<comment><USER32> No, but it has to be free of devastating vulnerabilities.

<comment> wu-ikkyu The electronically run global financial system is not free of devastating vulnerabilities, and yet it "works"

<comment><USER32> So, what is your point? The financial system is actually going to collapse, and that's not a problem? Or the vulnerabilities aren't actually devastating, just bad? Or what?

<comment> wu-ikkyu That many technologists are being hypocritical by wanting to prohibit electronic voting because of "security concerns" while at the same time developing and using other institutional systems with equal or greater attack surfaces and consequences.

<comment><USER32> Well, OK, that makes sense. Though I get the sense that the overlap might be limited.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER33> "R. James Woolsey […] former director of [CIA]. Brian J. Fox, […] develop open-source voting systems" — even if I had no opinion on the matter, it'd seem to me that there's a clear conflict of interest there.

To protect voting, do NOT use software. At all. Open-Source software is no more trustable than paper, and is orders of magnitudes more complex to set up and audit. If you can't explain a 5 years old how it works, your voting approach is not trustable.

</comment><comment><USER34> First, you have to understand the problem:

1\. You don't need to commit widespread election fraud to throw an election if you can predict where a small fraud will matter.

2\. Not all election fraud is a miscount of ballots. Throwing out minorities' registrations is also election fraud, and you can't fight that with more- reliable ballots.

3\. The best solution might not be a technology solution. Paper ballots make it hard to scale fraud. But that's not enough, since fraud doesn't always need to scale.

4\. Early voting and absentee voting need to be taken into considerations and are a growing part of voting in the US.

5\. If software systems are used in voting, tallying, or anything connected to election results, the systems should be open to inspection and to pen testing.

</comment><comment><USER35> To protect voting, use paper ballots and count them in public (OK, and voter ids if you insist).

</comment><comment><USER36> Security may not ever be 100% with e-voting systems, but it can be secured enough to where the probability of any hack attempt would have minimal impact on the overall outcome. I can think of several ways to a secure, verified registration could work just off the top of my head. I think the issue is more, where's the incentive for the government to make this happen?

</comment><comment><USER37> This past election has shown that it's not just the voting software, but the software/systems that control who is permitted to vote.

</comment><comment><USER38> why not blockchain voting. everyone receives 1 voteCoin, and transfers it to the correct wallet address of the person he or she votes for?

<comment><USER32> 1\. Because it lacks anonymity?

2\. Because the average voter cannot possibly understand and verify the security properties of that setup.

</comment></comment><comment><USER39> There's got to be some way to put votes on a blockchain. More important than voting electronically is being able to verify your own vote was not tampered with, and that all the votes add up as reported.

</comment><comment><USER40> To protect voting, use this or something similar:

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

</comment><comment><USER41> Related comment to a related thread

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

</comment><comment><USER42> A lot of talk about securing voting machines/verifying that they run the correct software. Why do we have to have physical machines? If it's electronic, surely a website would do if you have the correct means of ID?

NB: this is not an indication of which side I fall on the debate, it is an observation.

[EDIT] Also, I'm aware similar issues exist with a website, but it seems a lot of focus goes on the actual machine.

<comment><USER21> In case anyone can't see why this is a whole heap more terrible on top of the terribleness of electronic ballots...

Verifying actual real identity over the internet is impossible. Even if you did webcam-based biometric authentication of identity - these are fooled by a photograph. Going to a polling station and verifying your identity to a human being is much harder to fake, and almost impossible to scale.

The web is an untrustworthy delivery mechanism. What say if a nation state wants to disrupt your election, and starts DDoSing the hell out of it all. Protecting against such attacks at that scale would be extremely difficult.

Also on the topic of state-level disruption, it is well known that orgs such as GCHQ, the NSA etc. hoard zero-days. How do you know your extensively tested system isn't vulnerable to a zero-day that another state has and you don't?

<comment><USER42> Last time I voted I took a driving licence. All they did was check my face matched my card, and the name and address matched my registration no real check on whether or not the card was genuine.

When I created my government account I provided passport and driving licence numbers on top of the above.

I feel this invalidates your veracity point, and probably the scaling point too?

The second and third points seem more viable and are potential issues. Especially the third, this would be the main concern IMO. Though I'm sure there are protections against this too (thinking virtually distributed).

</comment></comment></comment><comment><USER43> The amount of anti-free-software FUD in this thread is staggering. Did Microsoft buy off all of you?

<comment><USER10> Wait, what? I haven't seen a single anti-free-software comment in this thread; most people are against electronic voting entirely, whether it is open or closed source. Why would Microsoft be anti-electronic voting?

</comment></comment><comment><USER44> To protect voting _use paper_.

Why did anyone _ever_ think computerising voting was a good or useful idea?

</comment><comment><USER45> To what extent is voting fraud an issue in the developed world and why is Nytimes upset about it?

</comment><comment><USER46> This story has been posted four times now. Click the 'past' link at the top.

</comment><comment><USER47> Use open source software that prints a paper ballot then count the paper ballot.

</comment><comment><USER48> Retire voting in favor of sortition.

</comment><comment><USER49> "The blockchain is an undeniably ingenious invention – the brainchild of a person or group of people known by the pseudonym, Satoshi Nakamoto."

It isn't even definitively known who invented blockchain, it is behind the pyramid scheme known as bitcoin and no, no way should that ever be used in voting system computers.

<comment><USER50> I don't think you know what a pyramid scheme is.

How about learning the definition of the words you use before throwing them around?

<comment><USER51> Personal attacks will get you banned on HN, regardless of how wrong someone else is, so please don't post like this again.

</comment></comment></comment><comment><USER52> One word: blockchain

</comment><comment><USER53> to protect voting, audit your software/system extensively. Openssh is open- source and we all know the story..

<comment><USER21> But how can I (a voter), audit it in the voting booth? How can I verify that the extensively audited software is actually running on the machine in front of me?

<comment><USER54> You can't. Especially at scale (every person validating the software before voting). Paper ballots with a anonymised ledger of votes placed is, in my opinion, the best method.

<comment><USER21> Paper doesn't scale well, attacks on paper are extremely difficult to scale well, which is why paper is a good system for voting.

<comment><USER54> It scales "well enough", in that we currently do it, and pay for people to verify the results.

In Australia a lot of this work is done by volunteers from the major parties.

Edit: I agree, its difficult to scale an attack on paper :)

</comment></comment></comment></comment></comment><comment><USER55> I'm not a crypto fanboy or anything, but I feel like voting is a great application of blockchain technology. It seems like the system could be made to be both anonymous and publicly verifiable, and the vote count would return more or less immediately.

<comment><USER56> Uh. Blockchain is just a doubly-linked list with hashes. And a set of rules how the peers validate blocks and come to a consensus. Not some magic crypto pixie dust that brings anonymity or prevents fraud.

It could come useful, e.g., for keeping census data to avoid some forms of fraud. E.g. prevent rouge organizers loading elections with "dead souls" voters (Gogol-style). But I don't see any immediate use for election themselves.

Say, the blocks would store anonymized votes (nothing about blockchain itself implements the anonymization). One immediate issue I see is that blockchain only verifies integrity of the blocks after they're in there and out to the public, so it could be verified. Sending them too early would skew election results (observers would be able to see the intermediate results and bias their votes accordingly), and sending them too late would probably make blockchain mostly pointless.</comment></comment>


Monads in Clojure - <AUTHOR> http://www.intensivesystems.net/tutorials/monads_101.html <comment><USER2> > The idea behind a monad is to factor out the plumbing code so that its > complexity is hidden, leaving only the composition of the functions visible.

 _cue light bulb coming on_

Thanks so much for this article; I've been trying to understand monads forever now. The closest I got was the "burrito" analogy, but I always wanted a more mathematically sound intuition.

For helpful reference, here's a collection of monad tutorials and related pedagogy:

\- Monads are burritos [[https://speakerdeck.com/u/dimituri/p/a-monad-is-just- a-burri...](https://speakerdeck.com/u/dimituri/p/a-monad-is-just-a-burrito)] (slide deck)

\- No, they really aren't [[http://byorgey.wordpress.com/2009/01/12/abstraction- intuitio...](http://byorgey.wordpress.com/2009/01/12/abstraction-intuition- and-the-monad-tutorial-fallacy/)]

\- Well yeah, they kinda are [<http://blog.plover.com/prog/burritos.html>]

\- But anyway, you probably have already invented them yourself; you just didn't realize it [[http://blog.sigfpe.com/2006/08/you-could-have-invented- monad...](http://blog.sigfpe.com/2006/08/you-could-have-invented-monads- and.html)]

\- And even if you didn't, you can always learn about it from that crowd- sourced fountain of programmer knowledge, StackOverflow (and this question hasn't even been closed as "not constructive"!) [<http://stackoverflow.com/questions/44965/what-is-a-monad>]

\- Of course, once you understand basic category theory, you should be set anyway. What are you, some kind of Java programmer? [[http://reperiendi.wordpress.com/2007/11/03/category- theory-f...](http://reperiendi.wordpress.com/2007/11/03/category-theory-for- the-java-programmer/)]

\- But really, a monad is just a monoid in the category of endofunctors, what's the problem? [[http://stackoverflow.com/questions/3870088/a-monad-is- just-a...](http://stackoverflow.com/questions/3870088/a-monad-is-just-a- monoid-in-the-category-of-endofunctors-whats-the-problem)]

</comment><comment><USER3> I appreciate these attempts to give non-Haskellers a chance to learn Monads but, personally, I never really grokked them until I got into Haskell. In Haskell, Monads are defined in terms of types, thus languages without type systems like Haskell's make the concept both more difficult to understand _and_ less (immediately) useful. Having been through many of these tutorials myself, I think the best way to get into Monads (as well as many other useful constructs like Functors, Monoids and Monad Transformers) is to roll up your sleeves and learn Haskell (Learn You A Haskell is a great and relatively quick read). As a bonus, you'll also learn one of the most elegant programming languages around.

This comment isn't intended as a knock against the article. I think there's a lot of merit in using monadic constructs in languages that aren't Haskell, I just think Haskell's type system makes understanding the concept easier.

<comment><USER4> I disagree. The only sensible introductory text I've found about them is for Scheme - <http://www.cs.indiana.edu/~cswords/monads.pdf>. Folks love to emphasize the types - but how one might implement them matters just as much if not more IMO.

Also, I've found the usage of monads as the building blocks for modular interpreters to shed the most light on their power, utility, and limitations (see the various papers from Steele, Wadler et al, Hudak et al, and Felleisen et al).

<comment><USER3> > but how one might implement them matters just as much if not more IMO

This is a false choice. Learning monads through Haskell, you get the forest _and_ the trees! That said, I get that there are legitimate differences of opinion and what worked for me will not necessarily work for others. I feel like _some_ understanding of types (or categories, etc.) is necessary to fully grok monads. Both this article and your linked paper offer some basic explanation of the concept. Tutorials that are essentially implementations of bind are, in fact, missing the forest for the trees.

</comment></comment></comment><comment><USER5> The author of this article, Jim Duey, has written some newer introductions to monads in clojure on his new site: <http://www.clojure.net/archive.html>

</comment><comment><USER6> Just a note for anyone hoping to follow along at home: clojure.contrib has been deprecated and the various parts have either moved or been left to bitrot on the vine. Pertinent to this article, "clojure.contrib.monads" is now "clojure.algo.monads".

You can find out what happened to the rest of clojure.contrib here: [http://dev.clojure.org/display/design/Where+Did+Clojure.Cont...](http://dev.clojure.org/display/design/Where+Did+Clojure.Contrib+Go)

</comment><comment><USER7> I met the author (after having seen his video of this subject) at clojure/conj 2011. Fascinating guy, and can really explain this stuff in more or less terms I can understand.

I don't use it enough to "get it" so I have to re-learn it every time I feel the need to, but this is the go-to spot for me.

</comment><comment><USER8> Nice article. On the other hand, in a slightly joking manner, I really wonder how some people can live with 8-space tabs with 8+ levels of indentation!

<comment><USER9> The lisp code in the article doesn't do indentation by a fixed number of spaces. It indents syntactically, i.e., aligns depending on the current depth- level of the s-expression).

</comment></comment><comment><USER10> It IS really nice to see something on those mysterious monads not written in haskell. I got hung up early into the article though, where the author says something to the effect of "the monad hides the complexity", and that seemed like a silly goal. I need to make another pass at it.

<comment><USER11> Hiding complexity is almost the whole point of most programming languages and a big reason why most of the popular library and frameworks exist. Computer programs are fiendishly complex things, and they're only getting more so as time goes on (now we have several independent processors doing complex things simultaneously in the service of even larger complex things). A lot of software is so big that even most of its components are too much to fit in your head at once. So I think hiding complexity is a pretty sensible goal.

</comment></comment><comment><USER12> I remember how happy I was the first time I really grasped my nads.</comment>


HNpod 16: Opinionated Licenses, Kayak Sale, More HTML5 APIs - <AUTHOR> http://hnpod.com/episodes/opinionated-licenses-kayak-sale-more-html5-apis

<comment><USER2> I absolutely love your podcast. Thanks for this !

<comment><AUTHOR> Glad to hear it. Thanks!</comment></comment>


Chinese teen starves mom to death in fury at brutal Internet addiction boot camp - <AUTHOR> https://www.washingtonpost.com/news/worldviews/wp/2016/09/22/chinese-teen-starves-mother-to-death-in-fury-at-brutal-internet-addiction-boot-camp/?hpid=hp_hp-more-top-stories_wv-china-starve-1050am%3Ahomepage%2Fstory <comment><USER2> These Chinese internet/game addiction boot camps are ready for their Jesus Camp moment.

For those who aren't aware, there was a documentary made of a religious camp that was released under the name "Jesus Camp" and as a result the camp shut down and others suffered as well.

<comment><USER3> Hey,

Thanks for the extra context - I knew about Jesus Camp, but it's not the first time someone just assumes on the global internet that everyone is familiar with United States culture. It's great to read an addendum with extra information at the bottom, just as yours, so I thought it would be good to publicly thumbs-up it :)

<comment><USER4> Agreed. I'm from the US but didn't know about that documentary. Now I have something to watch.

</comment></comment></comment><comment><USER5> Sometimes the downstories have more bite (pardon the expression) -- [https://www.washingtonpost.com/news/worldviews/wp/2016/05/19...](https://www.washingtonpost.com/news/worldviews/wp/2016/05/19/china- no-we-are-not-sending-cans-of-human-flesh-to-africa/)</comment>


DotCloud.js - Access Cloud Services from the Browser - <AUTHOR> http://js.dotcloud.com/

<comment><USER2> I've looked at the client-side cloud API from time to time and I'm never comfortable with embedding my key/secret credential in the Javascript code. Anyone having access to the client code in the browser, which is everyone, will have access to my secret credential.

If anyone has an idea to deal with this, please elaborate.

<comment><USER3> I've thought about this too. For me it's a matter of what somebody really "gets" with those keys. If I'm compromised by someone whose taken my keys and programmed a script against my service are they stealing anything? Well if I've applied some form of ACL and provided some secondary authentication against data they shouldn't be able to query I should be Ok.

Likewise with user accounts. If they take my keys, and somehow get someones password they'd have the same access they would otherwise have through the GUI. If I put user passwords into the code, well yeah that's totally bad on me.

I don't know. I'm not a security expert, however I've not been able to catch a problem with this. I'd love to know better.

<comment><USER4> I guess one of the most basic problems that could occur is someone using your keys to make unauthenticated requests and exhaust your rate limit.

</comment></comment></comment><comment><USER5> Another entry into this space. Others include:

Meteor - <http://www.meteor.com/> FireBase - <http://www.firebase.com> Parse - <https://parse.com/docs/js_guide>

<comment><AUTHOR> I see there being two, somewhat distinct, categories of players: those with a realtime-first, focus (Meteor, Firebase and, now, dotCloud.js) and those that take more of a traditional REST-based approach (Parse, StackMob, Backlift, etc.).

The later have an easier time integrating into existing client-side frameworks (Backbone, Ember, Angular, etc), since those mostly seem to be built with a REST-based model in mind, but it will be interesting to see what patterns emerge to plug push-based updates into these pull-oriented systems. For starters, I suspect we'll need the client-side frameworks to clarify the distinction between the server and client state and the source of changes. Henrik Joreteg's talk at BackboneConf[1] was good overview of this and other problems they've run into.

[1]: [https://speakerdeck.com/u/henrikjoreteg/p/real-world- realtim...](https://speakerdeck.com/u/henrikjoreteg/p/real-world-realtime- with-backbone)

</comment></comment><comment><USER6> What's the security model?

<comment><USER4> Hey, this is a very good question. We're currently working out an auth solution that we'll implement directly at the transport level. We haven't figured out every detail yet, but we'll be sure to give more insight on that matter as soon as possible - we understand how important it is as soon as we leave the realm of toy apps.

</comment></comment><comment><USER7> if you close the video using the (x) on the lightbox the video disappears but you still hear the audio - you have to navigate off the page to silence it.

<comment><USER8> What browser / OS are you using? I haven't been able to reproduce it yet.

<comment><USER9> I encountered this problem on one of my sites.

The solution was -- rather than using the video player's API to stop or pause the video -- I had to remove the video entirely from the DOM with Jquery.remove()</comment></comment></comment>


Meet tech billionaire and real life Iron Man Elon Musk - <AUTHOR> http://www.telegraph.co.uk/technology/news/10544247/Meet-tech-billionaire-and-real-life-Iron-Man-Elon-Musk.html

<comment><AUTHOR> This is an excellent read. Every tech entrepreneur should read this article if they want to Know Elon Musk. Very inspiring. Reminds me Steve Jobs loved phrase "Stay Hungry Stay Foolish".... A must-read.</comment>


Analyse Asia 27: The Lean Hardware Startup with Cyril Ebersweiler - <AUTHOR> http://analyse.asia/2015/05/02/episode-27-the-lean-hardware-startup-with-cyril-ebersweiler/ <comment><AUTHOR> Synopsis: Cyril Ebersweiler, the founder of HAXLR8R & venture partner of SOSventures, joins us to discuss the lean hardware startup in Asia and the metrics that investors look at to evaluate a hardware startup. He shares with us the concept of the lean hardware startup and why hardware is the new black. We also discuss the lean hardware startup concept which they pioneered to build, grow and accelerate companies in the incubator and his thoughts on how to run a successful Kickstarter campaign. Lastly, we tapped on his perspective as an investor to understand what investors are looking for in hardware startups.</comment>


The JR Concurrent Programming Language - Any one using it? - <AUTHOR> http://www.cs.ucdavis.edu/~olsson/research/jr/

<comment><USER2> I'm not sure why anybody would, considering it's an extension to Java.

Reading chapter 1 of the book, you see...

        } catch (Exception e) {e.printStackTrace();}

That inspires confidence. But reading on...

Based on the first chapter, it seems that the language is completely worthless. It doesn't add anything that you can't just as well build libraries for (and for which libraries _have_ been built). It's hard to see how this language could have ever been considered a good idea.</comment>


Ask HN: How to show support for Paul? - <AUTHOR>

Maybe stupid question, I'd like to know how to "vote" for Paul Graham against the accusation of some journalists?
I already favorited some tweets but I think showing and counting support may help.
I do not mean helping pg, who is strong enough to handle the tide. I mean helping all the people who feel threatened by this injustice. <comment><USER2> Try spreading: [https://medium.com/p/9ed6a69abb77](https://medium.com/p/9ed6a69abb77)</comment>


An ancient nuclear reactor burnt beneath Africa nearly two billion years ago - <AUTHOR> https://www.scientificamerican.com/article/ancient-nuclear-reactor/ <comment><USER2> can we add (2009) to the title? I followed this thinking there was something new discovered

<comment><USER3> 2 billion years ago.

11 years is a rounding error.

<comment><USER2> I mean the article :p :D</comment></comment></comment>


Chimpanzees and monkeys use stone tools - <AUTHOR> http://www.bbc.com/earth/story/20150818-chimps-living-in-the-stone-age <comment><USER2> Would it be better for them to get extinct, or to become advanced enough to understand that there is a much more technologically superior race in the same planet and that their lives and deaths totally depend on that race?

<comment><USER3> We depend on bees, how do you feel about that?

<comment><USER2> I feel very good: they are tools and the only way they can intentionally harm us is for all of them to collectively commit suicides.

<comment><USER4> and what about all the ways they can unintentionally harm us, since they are bugs without the mental facility to intentionally harm us? Furthermore, what does the nature of the intent have to do with the effect... whether they all commit suicide or are killed by our hand... we are in the same place.

<comment><USER5> _what about all the ways they can unintentionally harm us, since they are bugs without the mental facility to intentionally harm us?_

I take it you've never been stung by a bee before.

<comment><USER4> Not really relevant to the point, but...

While being stung by a bee hurts, I doubt the is deciding to intentionally harm us. They are instead acting on instinct and defending against what they consider to be a threat.

</comment></comment></comment></comment></comment></comment><comment><USER6> "chimpanzees have been using stone tools in the rainforests of Ivory Coast for at least 4300 years." So is this a news title from 2315BC? I would have expected the article to be written in hieroglyphics. Would have been a nice touch if "Breaking" or "This just in" were prepended to the article title.

</comment><comment><USER3> A tear for this, that they are running out of time because we want trainers and cars and sofas and little plastic things you put in drinks then throw away, given time they might be our friends, the way we act I'm not sure they would choose to be :(

<comment><USER7> Chimps eat other monkeys alive, sometimes even humans, so no particular need to be sentimental about it.

<comment><USER3> Alright, fuck em, oh hang on, we bomb the living daylights out of entire cities, i'm lost in the moral maze

</comment></comment></comment><comment><USER8> Have entered the stone age, 4000+ years ago.

</comment><comment><USER9> By this definition of "Stone Age", sea otters have also entered into the Stone Age.

<comment><USER10> By the number of upvotes this kind of crap gets, HN has also entered into the stone age.

<comment><USER3> Thank you and good night :) Sombre indeed!

</comment></comment></comment><comment><USER11> This would be much more interesting without the "Stone Age" nonsense.

The hallmark of the stone age is _modifying_ the stone, not _using_ the stone.

<comment><USER3> I'll concede on this, frankly the least I was expecting was sticks with rocks bound to the end, the reality turns out to be they worked out that heavier rocks smash stuff better, it's going to be a few millenia before they can hold down a decent conversation, let alone pick a good wine to go with fish...

<comment><USER12> That'll never happen unless it's through the aid of human technology, in which case, it'll really be humans entering a new age of advancing communication and intelligence of non-human animals than any one species advancing themselves.

</comment></comment></comment><comment><USER13> Sensational title. The actual stone age was called such because humans were actively modifying and creating new stone tools.

<comment><USER14> That process started somewhere.

<comment><USER15> And until it started, it didn't deserve to be called the "Stone Age." Using rocks to bash things doesn't really count. When they're making flint knives and skinning their prey and using the hides to keep warm then maybe it's a story.

</comment></comment></comment><comment><USER16> so this makes me think, what made our species so successful if not our tools since it seems quite common. Was it the discovery of fire?

<comment><USER17> There are theories, not generally accepted in mainstream biology/anthropology.

One is that our ancestors lived in coastal areas, where seafood made it much "cheaper" (in the evolutionary sense) to obtain the kind of fatty acids needed for growing a bigger brain.

[https://www.psychologytoday.com/blog/lives-the- brain/201001/...](https://www.psychologytoday.com/blog/lives-the- brain/201001/was-seafood-brain-food-in-human-evolution)</comment></comment>


MacBook Pro Users Express Concerns About Limited Battery Life - <AUTHOR> http://www.macrumors.com/2016/12/03/macbook-pro-battery-life-concerns/ <comment><USER2> I don't know if this has changed, but Safari uses significantly less power than Chrome. As the article points out if you are using Chrome and the power menu says that it is the big consumer don't be surprised if you are losing several hours of battery life. If you are always plugged in that doesn't matter of course.</comment>


Cops Raid San Francisco Dronemaker Lily Robotics - <AUTHOR> http://www.bizjournals.com/sanfrancisco/news/2017/02/01/dronemaker-lily-robotics.html <comment><USER2> "I am worried that a lens geek could study our images up close and detect the unique GoPro lens footprint," Lily CEO Antoine Balaresque wrote in an email to the filmmaker who made the film, Forbes reports. "But I am just speculating here: I don't know much about lenses but I think we should be extremely careful if we decide to lie publicly."

</comment><comment><USER3> Same should be done for Plastc: [https://plastc.com/](https://plastc.com/)

Been promising something for almost two years, pre-orders taken, nothing delivered...

</comment><comment><USER4> Fake it until you're indicted.</comment>


A Simple Approach to Building a Real-Time Collaborative Text Editor - <AUTHOR> http://digitalfreepen.com/2017/10/06/simple-real-time-collaborative-text-editor.html <comment><USER2> So... I'm a "learn by stackexchange" dev and really enjoyed tracking this person's thought process.

I find that most tutorial/explanations come fully baked with the the problems -predictively- solved, as opposed to reactively solved, if that makes sense -- The difference between ("In order to prevent this problem, we'll do X" as opposed to "Hmm that's not working. Why is that? Ah. Okay perhaps we can do W... no, that won't work and here's (y, zing) why, let's try X")

Author's blog notwithstanding, where are other places to read other developers essentially plain-speak their way through problem solving / program architecture in a similar fashion?

<comment> rudi-c Author here -- I'm glad you like the post! There are more like you describe out there, though they tend to be scattered around the Internet.

[https://jvns.ca/](https://jvns.ca/) often gets mentioned on HN and has a large volume of posts that follow the format "let's assume both you and I don't know anything - how do we figure this out?". [http://jamie- wong.com/](http://jamie-wong.com/), a coworker, has a few good ones on graphics/numerical stuff.

Characterizing unique IDs with emojis instead of an abstract number was inspired by Tim Babb who has a good blog post on Kalman Filters: [http://www.bzarg.com/p/how-a-kalman-filter-works-in- pictures...](http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/)

Explaining a concept in person really helps, as you get immediate feedback if they look confused and it helps you figure out in what order you need to introduce concepts. In the case of this project, I was working on it alongside other people who were working their side projects. So I had the chance to explain what I was working on very frequently as we asked each other what we were up to, but I'm still learning to write this way intentionally.

</comment></comment><comment><USER3> Assuming the author of the article spots this on HN, I'd just like to say a quick thanks for mentioning Overleaf [1] in this! It's a nice easy to read article and it reminded me that we were planning to write one along these lines but never got around to it :)

It's interesting to see how CRDT has been adopted -- we wrote our own OT implementation for Overleaf (back when we were writeLaTeX) and it's still serving us well. We took a lot of inspiration from Etherpad [2], which is still a great collaborative editor, especially for notes.

We're now going over much of our code as we work on the integration with ShareLaTeX [3], which also has a very nice real time track changes / commenting implementation [4]. This helps with the UI aspect of collaboration, which is important on top of the use of OT or CRDT to ensure no version conflicts.

Good luck in your next projects, and I look forward to reading write ups like this of those too :)

[1] [https://www.overleaf.com/](https://www.overleaf.com/)

[2] [http://etherpad.org/](http://etherpad.org/)

[3] [https://www.overleaf.com/blog/518-exciting-news- sharelatex-i...](https://www.overleaf.com/blog/518-exciting-news-sharelatex- is-joining-overleaf)

[4] [https://www.sharelatex.com/blog/2017/03/09/track-changes- and...](https://www.sharelatex.com/blog/2017/03/09/track-changes-and-comments- in-latex.html)

(Note: Edited for grammar)

</comment><comment><USER4> Very cool to see this on the front page. I would agree that for the use case of plain text, yes, the problem has been solved, but for just about anything more complicated it quickly becomes intractable. Rich Text, for example, is extremely difficult to get right (ask the ckeditor guys!)

For those wanting real-time collaboration functionality in their apps but don't have the intellectual curiosity (or time!) to learn the ins and outs, we [1] built a general-purpose API for folks to add real-time collaboration to their web apps. Think Firebase but designed from the ground up for simultaneous editing and with additional first-class support for common UX needs such as shared cursors and selections. We agree that the web is moving in this direction and are excited to see what gets built!

[1]convergencelabs.com

</comment><comment><USER5> The problem I ran into when I had to do this on a prior project wasn't the algorithm for worrying about individual characters. It was dealing with how to manage people highlighting entire paragraphs or documents, and pasting over them with new content, at the same time as the other editor(s) had been changing things.

Ultimately, while there were algorithmic answers to just about any scenario, we ended up just declaring a business answer instead - the editor only would let you into edit mode one paragraph at a time, and you locked that paragraph while you were in it. We found that almost nobody was actually editing the exact same paragraph at the same time anyway... they were working in different parts of the documents. So not only did that resolve all possible copy/paste insanity, the algorithm became brain-dead simple -- when you update or leave the paragraph, send those changes to everyone else's editor.

<comment><USER6> Back when SubEthaEdit was new, I was a writer on a comedy show. Many afternoons, our team of 4 to 6 writers would get into something like a competitive I-can-finish-you-joke-before-you-do edit war. I don't remember ever again being paid for having that much fun.

But that only worked before SubEthaEdit worked absolutely flawlessly with anything we threw at it. You'd have two people editing the same word, yet it never occurred to anybody that we weren't actually all playing with the same piece of clay.

(Moral of the story: "nobody would ever want to that" is a self-fulfilling prophecy)

<comment><USER7> That formula should be extend to involve a live audience each having a tomato launching siege engine at the bottom of the window. From the audience perspective the tomato is flying away, from the to be comedian perspective they are flying towards his screen obscuring his vision proportionally.

Then add a gradual set of laugh samples to represent the number of observers who pressed the "yes, that was funny" button. For the jokes with the highest powerlevel animal sounds should be mixed in.

Lets call the invention The Funny Royal.

</comment></comment></comment><comment><USER8> I liked Raph's writings on CRDTs: [https://medium.com/@raphlinus/working-code- for-operational-t...](https://medium.com/@raphlinus/working-code-for- operational-transformation-crdt-hybrid-9d04a57309da)

</comment><comment><USER9> For the keys, I created a similar library called [https://github.com/Cirru/bisection-key](https://github.com/Cirru/bisection- key) to generate string keys.

</comment><comment><USER10> CRDTs are awesome! I'm working on a similar article going in-depth on Victor Grishchenko's Causal Tree[1] CRDT, which makes several ingenious decisions (making a tree out of atoms and their causes, storing the full ordered atom history for each site, treating the output data as a DFS traversal of the atom tree, sorting atoms by their on-creation awareness of other atoms) that allow the format to be extended to many other data types, all with generally O(N) performance and permitting git-like document history and per-change blame queries without any extra work. I've grown to think of it as the purest possible expression of the CRDT concept.

In my example project[2] (NOT PRODUCTION READY!) I've already implemented text editing and basic vector drawing that synchronize over arbitrary network topologies. If you can massage your data into the CT format, you get real-time collaboration, offline mode, cloud sync, and decentralized network support for basically free — all in a thousand lines of comprehensible, functional code! You can even use it with a basic key-value store like CloudKit, which was admittedly one of my main reasons of diving into this class of algorithm.

Hope to finish v1 of the demo and post the article by the end of the month, but writing is very hard...

More on point, I really like how this article dissects and visualizes CRDTs, which can be a difficult topic to breach. If you're looking to implement something like this, however, it should be noted that Logoot has a pretty significant interleaving problem for concurrent operations if you use it to sync individual characters as opposed to lines: [https://stackoverflow.com/questions/45722742/logoot-crdt- int...](https://stackoverflow.com/questions/45722742/logoot-crdt-interleaving- of-data-on-concurrent-edits-to-the-same-spot)

I think for text this is a deal-breaker, because if one client goes offline for a while, they'll basically corrupt the document if anything they've been working on overlaps with other users' changes. You could solve this with a central server by forcing a re-sync and/or manual merge, but I feel that sort of defeats the purpose of using a CRDT.

[1]: [https://ai2-s2-pdfs.s3.amazonaws.com/6534/c371ef78979d7ed84b...](https://ai2-s2-pdfs.s3.amazonaws.com/6534/c371ef78979d7ed84b6dc19f4fd529caab43.pdf)

[2]: [https://github.com/archagon/crdt- playground](https://github.com/archagon/crdt-playground)

</comment><comment><USER10> Hmm, FYI, I seem to have broken it a little bit: [https://i.imgur.com/qrNeZFJ.png](https://i.imgur.com/qrNeZFJ.png)</comment>


Ask HN: Git Hosting - <AUTHOR>

I am on the fence about hosting my private git repos. I have used the public repos in github and it has been a pleasant experience but seems a bit pricey for what you get. Does anyone here have any experience with http://repositoryhosting.com/ for 6 bucks and unlimited projects with a limit only on the amount of data stored(1GB + $1/GB after) they drive a decent value proposition. But I am interested in the wisdom of HN.
As an aside: I have the capability of hosting the git repos on my linode server but I figured it was not worth the hassle of configuring all that and securing it. (I don't want to spend that much time thinking about source control when I could be doing something more profitable.) If it is not too much of a trouble to administer and setup I can go this route too as the server is already a sunk cost. <comment><USER2> IME git configuration on a decent host is pretty trivial. Just do it over ssh not http. Its a little bit of effort to set up, but not really. If you want the fancy web fontend, things are a bit different, and I can't offer experience there.

<comment><USER3> [http://scie.nti.st/2007/11/14/hosting-git-repositories- the-e...](http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and- secure-way) is what you're going to want to do... but I'd just use Github.

EDIT: Though, to be fair, we don't use Bitbucket (we're a Mercurial shop) for our private repos. Part of that though is the need for sexy commit emails.

<comment><AUTHOR> That's a solid link. Thanks! I will probably go down this path as I am not too keen on giving my code to an outside party without guarantees of privacy. That and I have a server that I can use for no additional cost.

</comment></comment></comment><comment><USER4> What about the plans at GitHub seems pricey? (Not trying to be snarky, I'm genuinely curious)

edit: what sort of guarantee of privacy are you expecting as well?

</comment><comment><USER5> I've just been trying out unfuddle and codebase. Looks like i'll go with codebase for the slightly more polished ui and faster pageloads.

</comment><comment><USER6> not sure if you've already checked them out, but projectlocker has free git hosting.</comment>


'Fluffy and feathery' dinosaurs were widespread - <AUTHOR> http://www.bbc.com/news/science-environment-28407381

<comment><AUTHOR> The peer-reviewed journal article in _Science_ has a free abstract[1] and editor's summary.

[1] [http://www.sciencemag.org/content/345/6195/451](http://www.sciencemag.org/content/345/6195/451)

</comment><comment><USER2> On one hand, the scaly dinosaurs many of us grew up with were a lie. On the other hand, big dumb lizards frankly aren't very interesting.

Feathers on most dinosaurs will take some getting used to, but I think they have the potential to be a lot more interesting. Pop culture has a lot of catching up to do. Even the upcoming Jurassic World movie is planning to show velociraptors with no feathers.

I really hope my daughter will be as interested in dinosaurs at a young age as I was, but if just wish I could show her more accurate dinosaurs.</comment>


Ask HN: What will happen to entertainment industry during/post Covid - <AUTHOR> How will actors work together? The crews and sets all involve people working close to each other.
Does this mean we don't have any new series shot? Does it mean more animation and studio creations? Will there be robots and voice talent? What about the porn and adult industry? Are we going to have sex bots?
Thoughts? <comment><USER2> A consequence could be the industry goes more virtual using CGI and AI. This way the financial rewards go more to everyone on the team, not just the people at the top, or the lead actors and singers. Coders become the superstars.

<comment><AUTHOR> Not looking forward to it. That would be dismal entertainment.

</comment></comment><comment><USER3> who knows. Personally I like to watch good old porn on [https://www.tube100.me](https://www.tube100.me) . It's available for free and without registration. There are many good vids to watch in lockdown, I think we don't need new vids right now.

<comment><AUTHOR> Not asking for good sources for porn. There is plenty of porn online and most of us know it. Adult industry is a very big both wrt online transactions and as a business sector.

I consider it an essential sector. A good safe and valid adult entertainment industry will keep domestic violence, human trafficking, violent crimes, sex crimes and sexually transmitted diseases under check. It is one industry that is ready for disruption esp with robotics and AR/VR.

Societies that aren't repressed and prudish towards sex are less violent..especially if it's not a totalitarian govt running it.

I know at least two women in my farming community who had to leave home because of domestic violence and in both cases, it was sexual violence. With lower employment expected post covid and more men likely staying at home, this becomes an urgent industry to develop.

Other than the hedonistic aspect of porn. That's always nice, but not necessarily essential sector.</comment></comment>