Undo - <AUTHOR> http://sachagreif.com/undo/ <comment><USER2> You use Gmail's undo feature as an example, but it doesn't work in the way you prescribe. It's the cheap & easy version of undo that doesn't require building your application around the command pattern: just implement a reasonable delay before making the irreversible change, and show the Undo action during this delay (which is really a "cancel the pending change" action).

No, it's not as clean or as good of an experience for your users, but it works great for applications such as email that perform fundamentally irreversible actions.

<comment><AUTHOR> Yeah, it's kind of a simulated undo. I'll update the post to point it out better. But anyway, the end result is (almost) the same for the user, which is what counts at the end of the day.

<comment><USER3> There are actual undo in Gmail as well, for example when applying a label to a message.

Since send is making the change in an external system it has to be simulated, but that doesn't change the point of the post.

</comment></comment></comment><comment><USER4> "Undo" only makes good sense in an app where each user works in her own isolated sandbox. This is a common paradigm on the desktop (e.g. word processing), but less common on the web. As soon as Alice's transaction is visible to Bob, making it undo-able gets much more complex.

<comment><USER5> This is a good point, but as the author points it, it feels so useful in Gmail.

<comment><USER6> Gmail undo is basically job cancellation, not really returning a changed state back to its original state.

Gmail can't "undo" once that job has been processed - in other words, when something has been _actually done_.

<comment><USER5> We, on HN, all have an idea of the tech behind this, but to the user, it is still perceived as an undo action, and that's what I believe the point of the author was.

</comment></comment></comment></comment><comment><USER7> Implementing a passable undo with a database-backed system gets a lot easier if you have an append-only record of every transaction.

Rails has a great gem that adds this feature with a minimum of fuss ([https://github.com/airblade/paper_trail](https://github.com/airblade/paper_trail)). There's even a Railscast that goes over how to use it to implement "undo" ([http://railscasts.com/episodes/255-undo-with-paper- trail](http://railscasts.com/episodes/255-undo-with-paper-trail)).

</comment><comment><USER8> I would wager that the reason Undo isn't implemented more often is that it is very difficult.

Executing a DELETE statement and deleting a bunch of data is simple. Implementing "undo" is more difficult, especially for browser based software. How long is the undo valid for? Can you undo every action? How many levels of undo do you support? Do you allow an undo for UPDATE's as well (updating a blog post to set it's content is essentially deleting it, and would probably be something you want undone, for example).

On top of just building the functionality in to your app, communicating it to your users is also difficult since the web app medium is so different than the desktop one.

<comment><USER9> Instead of actually deleting a record when a user hits 'delete' just flip a boolean that indicates it is 'deleted'. Then undoing a delete action is as easy as flipping the boolean back. For more complex application state you can keep a stack of state or actions (depending on the application and code) and then push onto the stack as the user performs actions (killing off actions older than a certain point). When the user hits undo pop from the history stack and push onto a second 'future' stack to support redo. I agree with the author that it would be nice if more web apps implemented undo/redo. I Iecently implemented it in an interior design app I was working on and it's really not that hard to do.

<comment><USER10> That may or may not be legal. IANAL but telling a user that his/her data has been deleted when in fact it still sits on the server could be regulation violating or downright illegal depending on where you are. Of course it would probably also depend on what your product ToS says and the nature of the data being deleted.

<comment><USER11> > IANAL but telling a user that his/her data has been deleted when in fact it > still sits on the server could be regulation violating or downright illegal > depending on where you are

Where on Earth do you think labeling a button "Delete" is a legally binding specification with an incredibly specific required implementation?!

<comment><USER12> EU member states are subject to the (soon to be rewritten) Data Protection Directive: [http://en.wikipedia.org/wiki/Directive_95/46/EC_on_the_prote...](http://en.wikipedia.org/wiki/Directive_95/46/EC_on_the_protection_of_personal_data)

In the UK, for example, this is implemented by the Data Protection Act 1998: [http://en.wikipedia.org/wiki/Data_Protection_Act_1998](http://en.wikipedia.org/wiki/Data_Protection_Act_1998)

The guidelines for complying with the DPA talk a bit about deletion here: [http://www.ico.org.uk/for_organisations/data_protection/the_...](http://www.ico.org.uk/for_organisations/data_protection/the_guide/information_standards/~/media/documents/library/Data_Protection/Practical_application/deleting_personal_data.ashx)

"If you offer users the option to delete personally identifiable information uploaded by them, the deletion must be real i.e. the content should not be recoverable in any way, for example, by accessing a URL from that site."

In fact the DPA takes it even further by requiring that personal data "shall not be kept for longer than is necessary" ie. you are supposed to delete any personally identifying data once you're done using it for it's original purpose (or another legal use). Granted, I imagine it would be pretty hard to bring a case against a company for either of these things, and I can't tell if the former is legally binding or just a "guideline," but it's not outside the realm of possibility...

<comment><USER11> > the DPA takes it even further by requiring that personal data "shall not be > kept for longer than is necessary" ie. you are supposed to delete any > personally identifying data once you're done using it for it's original > purpose (or another legal use)

I think you could easily argue that "needing it for an undo feature" is still a legal use for that data. But, thanks for pointing out that "delete" is a lot more legally loaded a term than I had assumed. It makes a pretty convincing case to call things "remove" instead of "delete".

<comment><USER12> Maybe so, I'd be really curious to talk to a UK lawyer who has some experience in these matters to get a sense for how they're enforced. Thanks for asking the question and inspiring me to do the research - like you I assumed there was no way "delete" was regulated, but decided to look it up before replying and was very surprised.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> I felt like I was having déja vu reading this article. Happy to have found why, Aza Raskin in 2007: [http://alistapart.com/article/neveruseawarning](http://alistapart.com/article/neveruseawarning)

<comment><AUTHOR> You're right, very similar point. I'll add a link to it, thanks!

</comment></comment><comment><USER14> Interesting write up. Thanks a lot for writing it Sacha.

Okay, so I have a question. Isn't this just a property of the internet as a system?

If we remember the history of human-computer interaction on 2D displays, we first really remember what led to the desktop GUI (Xerox Alto, all that stuff). This domain had tons of research poured into it (of which Raskin is a member) - including from the military, for usability in extreme situations - and by now it's reached a pretty mature stage, and we have developed a nice design language to describe it and advanced technological tools to implement that language. On my Finder, or in Pages, I can reliably undo things nicely. Just today, I deleted a file by mistake- command + z, boom, undone.

(by the way, this is exactly what Apple and mobile devs talks about when they say that well done native apps can never be beat by web apps- those decades of best practice experimental research)

Web apps, on the other hand, run on the internet, which adds some constraints structure wise. All of a sudden, we have at least 2 computers talking to one another, and in most cases many, many more than that. So we have to come up with design principles to make all of this somewhat work together, and we come up with things like RPC and REST. Those things are how our servers talk now, and they influence every technology that we build. They come with some constraints however- notably the ideal of statelessness, in which implementing "undo" would be really hard. Relational databases don't have the semantics to express "undo the last statement that was a user action done with id N", and good luck implementing things like undo in a system where you have caches you can't invalidate, content determined by one way hash functions, etc. If you have a binary blob of 5 lines, that user 1's action modify the first 3 lines, that user's 2 action modifies the last 3, and that user 1 then decides to undo his command?

You'd basically have to version everything, and have super amazing algorithms doing bisects and diffs on your content.

The http internet is really just a way to exchange documents. We've hacked it, using fancy stuff like AJAX, to make it behave more like the traditional GUI that we know and love, but at the core it's still a way to transfer documents. And naturally, HTML, the description language we use for web content, has semantics for describing static documents. Heck we've had to design a whole new language for design (CSS), because it's really just a way to describe documents! So ultimately it lacks the way to implement concepts like undo-ing as first class features.

Let it be noticed that mobile apps do undo-ing very poorly, as well.

<comment><USER15> Many things will be impossible unless you delay the initial action. I mean, how do you really undo sending an email? You can't. What you do instead, and I'm guessing this is what gmail does, is to delay the sending for 15 seconds to give the user time to regret.

Seems like delaying the action will almost always be possible. Guess i _could_ give the users the misconception that they can undo whenever they want, which is just..

<comment><USER16> IIRC, "it's not a feature, it's a bug". Engineers noticed it took about 15 seconds to send a mail through Gmail and added an option to cancel it.

<comment><USER17> No -- it's an artificially-added delay. By switching the option on, your emails are delayed by the time period you choose.

</comment></comment></comment></comment><comment><USER18> Famous last words. :)

> doesn't seem like it would be that hard technically.

</comment><comment><USER19> My philosophy is that of all the things that are important for a business or a web service - keeping your data is the very highest priority. Just about anything else can be fixed, but if your data is lost with no backup then no amount of programming or time or sweat is going to get it back.

It's a good idea to just keep this in mind when you're working anywhere near a production database. backup, backup, backup.

<comment><USER20> Backup is manual Undo.

</comment></comment><comment><USER21> On the one hand, I agree with the ideas here. On the other hand, it really worries me when I find out that some server doesn't delete the data when I tell it to delete it. For example, when you delete your Facebook profile or your mails on GMail, wouldn't you like that data to be utterly destroyed?

What would be the correct solution, the one that balances out both of these needs?

<comment><USER22> The correct solution would be to tell you what's happening.

"Your data will be deleted in 24 hours. You can undo this deletion at any time before then."

</comment></comment><comment><USER23> It's worth noting here, the two instances where the author wished for an "undo" (dropping a data database table and deleting a production server) are very different from what the rest of the article discusses (user-facing apps like Gmail, Photoshop).

A database or IaaS application are typically used by administrators, and typically every action is rehearsed in the form of staging testing or automated tests. Furthermore, these types of applications would need significant additions or rearchitecture to account for undo operations.

For example a SQL implementation might not be able to reclaim disk space as well if it were unable to really delete the data from a dropped table. Likewise an infrastructure platform would need to keep unused resources busy. In both systems there are important ramifications of the deletion, and providing the ability to undo them doesn't exactly make sense.

<comment><USER24> It is true though that some of these cloud services should offer some way to enable an extra level before deleting. Azure, for instance, makes it quite easy to nuke a database or storage pool. I'd really prefer if there was a forced sign-in again for such rare options. IIRC, AWS has a 2FA option for deleting S3 buckets or something.

As for databases, always have BEGIN TRAN at the beginning of any commands, with a commented out COMMIT.

</comment></comment><comment><USER25> Easier to implement this if your data is backed by Datomic. I'm working in a HIPAA environment and we're quite happily using Datomic there.

<comment><USER26> That's interesting. Do you have any "really delete this data" requirements and if so, is it hard to deal with that with Datomic?

(sorry if question is dumb, I have near zero knowledge on both HIPAA and Datomic)

<comment><USER25> Excision is built into Datomic expressly for this purpose.

I don't know why people assume those capable of building a database would also fail to anticipate this need.

The difference is that you don't use excision except in special cases (like legal obligation to delete data), you use _retraction_ which doesn't lose any history.

<comment><USER27> Thank you for sharing your experience.

> I don't know why people assume those capable of building a database would > also fail to anticipate this need.

Praptak asked if it was hard to deal with and did not imply Datomic's developers failed to anticipate the need.

Excision is a feature that must be prioritized like any other and in fact was not available until Datomic 0.8.3941.

[https://groups.google.com/forum/#!topic/datomic/Gk8h6MrnJYs](https://groups.google.com/forum/#!topic/datomic/Gk8h6MrnJYs)

<comment><USER25> 3941 was pretty early in Datomic's lifecycle so far. It's still a young product but it's very practical already.

Fair point. :)

</comment></comment></comment></comment></comment><comment><USER28> We provide a timesheet web app. And didn't want save/submit buttons. Auto- saving the data as users type.

To alleviate this change for business users, we decided to build an Undo, and a Redo, for most user actions.

With a similar technique, by storing the action and it's reverse in 2 stacks. And moving them from one stack to the other.

It was quite hard to implement together with an auto-saving of the data.

But after 3 years of operations, the undo/redo is barely used. And we get requests from users who clearly didn't see it. Or don't imagine it is possible.

While I was really happy seeing it working on a web app. I'm not sure it was worth the effort, and the additional complexity to save data.

</comment><comment><USER29> This is funny, as in my career I've seen a number of domains, and built (web) systems which required a form of undo. You just don't see it too often in the PHP/Ruby crowd because it's hard to get right and each implementation has inherent limitations.

Luckily there has been work on patterns since the CoF Command/Memento: the Event Sourcing pattern ([http://martinfowler.com/eaaDev/EventSourcing.html](http://martinfowler.com/eaaDev/EventSourcing.html)) can be used to implement system-wide undo functionality.

<comment><USER25> I've worked on event sourcing based systems, Datomic is a lot saner.

</comment></comment><comment><USER30> We here at Webflow went through great lengths to implement the command pattern in our web designer. It has definitely paid off when we tell our users they can just hit Cmd+Z and Cmd+Shift+Z anytime they make a mistake.

That said, it's really difficult for webapps to fully support undo/redo. A lot of the web is transactional, and different actions trigger follow on actions. GMail does a really good job with its undo, but there's a reason it goes away after 10, 15 seconds!

</comment><comment><USER31> Undo is hard, not a core competency for most companies, and most users don't care. In fact, many users don't want deletes to be undoable, they want deletes to be delete.

You could probably make a stronger case for improving deletes by overwriting the disk space with garbage and ensuring users that no derivatives were left around. That would be a selling point.

Imagine SnapChat with undo...

<comment><USER32> Undo is hard? With web apps most developers complain that it's actually too hard to delete things so they use a delete flag instead...

<comment><USER31> Delete can be hard too...

Undo is definitely harder.

</comment></comment></comment><comment><USER33> Implementing bug free undo is difficult, in my experience. I have a gut feeling that functional programming has a lot to offer here.

</comment><comment><USER34> CouchDB supports undo as part of their core storage model. [http://guide.couchdb.org/draft/btree.html](http://guide.couchdb.org/draft/btree.html)

 _The short answer is that because CouchDB uses append-only files, the B-tree root node must be rewritten every time the file is updated. However, old portions of the file will never change, so every old B-tree root, should you happen to have a pointer to it, will also point to a consistent snapshot of the database._

<comment><USER35> Doesn't that mean a rollback of the entire database, as opposed to just a single operation?

</comment></comment><comment><USER36> This isn't a web thing, it's a technology thing. If you dropped a database via a command line tool or desktop app, you'd still lose everything. It's not phpMyAdmin -nor any other web app- being lazy, it's just how that technology works.

And I think the argument that you can't blame the users isn't fair because these are sysadmin tools - so you'd expect the users to know what they're doing.

<comment><USER37> "That's how technology works" because that's how the specific bits of technology we're talking about have been implemented. We make the technology, and we could make it work differently. There are cases where un-undoable commands are useful, but these cases are only a small fraction of the things we do on computers, sysadmins or not. Sysadmins may "know what they're doing" but they make mistakes like anyone else, and software should, where possible, be designed to reduce the impact of those mistakes.

<comment><USER36> Software is designed to reduce the impact of those mistakes - that's where back ups, file system snapshots and virtualisation / OS containers come in.

Some database operations do have an undo command per session; up until a commit is made. But it makes no sense to have an undo for _drop database_ , which is why it auto-commits.

Sometimes the "undo" command needs to run a layer or two lower down in the stack than on the application layer. 9/10 times, there is an undo command (assuming the platform is installed correctly) - and as the author noted, he had a backups so that would have been his "undo".

So while I'm all for building safety nets and better tools; I also think the OP is being completely unreasonable expecting every sysadmin application to have an inbuilt "undo" command. Sometimes "undo" tools need to be worked into another layer of software lower down the stack - but just because they don't exist in the GUI frontend of choice, it doesn't mean that they don't exist at all.

But that's just my opinion as someone who also constantly makes mistakes hehehe

</comment></comment></comment><comment><USER38> For FogBugz and Kiln, we try to follow the principle that changes should always be reversible. Clicking "delete" on something just marks it as deleted, for example, with a corresponding "undelete" action hidden somewhere administrators can find it. If you want to truly delete something, you have to get in contact with our customer service folks (sometimes to our users' chagrin).

</comment><comment><USER39> " _every undoable action first needs to be represented by an object in your code. This is called the Command Pattern_ "

This is too OO for my taste. Having just seen a talk about MiniKanren, I wonder if you can implement undo effectively with a relational (logic) programming system. Is anyone aware of research (or practice) to that effect? My googling isn't turning up anything relevant.

</comment><comment><USER40> Cocoa offers the same undo implementation as described here with "NSUndoManager" where, for each action, you add the opposite action to an undo stack.

As a pattern it is proven to work. It just consumes memory and servers might not scale as well as a desktop app in this regard.

If the undo/redo stacks don't grow too long and the operations are simple enough in nature it might work though.

</comment><comment><USER41> I was thinking about how memory must work to allow "Undo" on desktop apps earlier today, and realizing how different that is as it pertains to the web. Undo is amazing, it's a life saver - it's probably literally saved me days of my life when I've accidentally deleted entire projects before.

</comment><comment><USER42> "Destroys privacy by posting tons of selfies"

UNDO UNDO UNDO

</comment><comment><USER43> I just tried sending a message in Gmail, and it didn't give me an option to undo. Is it a feature I have to enable?

<comment><AUTHOR> You're right, it's actually a "labs" feature: [https://support.google.com/mail/answer/1284885?hl=en](https://support.google.com/mail/answer/1284885?hl=en)

</comment></comment><comment><USER44> Never thought about it. The concept is interesting.

</comment><comment><USER44> Interesting concept.</comment>


Ask HN: Tax transistors? Funding basic income in post-work world? - <AUTHOR> Had a thought that taxing transistors would be the fairest way to fund transistors in a world where automation was destroying jobs at a rapid clip.  I acknowledge that taxation around any single metric would incentivize non-optimal work arounds but this seems like a fair enough proxy for "work done" that would be hard to word-around.<p>I'm interested from the UBI proponents how we would fund this kind of social program in a capitalist system where profits are still accruing to companies that controlled "intelligence." <comment><USER2> I'm convinced that we are taxing completely wrong. Money is earned using the shared resources of our society -- education, roads, communication, military, fire, police -- all paid for by taxes. On top of that, we need to recognize that Congress also spends money through tax deductions and things not taxed. So we need to move away from taxes -- into taxing business that profits from those shared public resources so we can return profit to the public.

</comment><comment><USER3> Don't we already have UBI? That's what the social security program looks like to me. It seems to me that if you want to expand UBI, you would be working to lower the retirement age. That's exactly the opposite of what is currently happening. The retirement age is rising, and the payments are shrinking. It doesn't seem like throwing taxation at the problem will address it.</comment>


Which programming language should I learn first? - <AUTHOR> http://nerdr.com/which-programming-language-should-i-learn/

<comment><USER2> Stopped reading after it said "c++ – The big one as it's a Microsoft product."

<comment><USER3> That post is so wrong in so many ways...

You don't need an IDE to program in Java, and if you use an IDE you don't have to use Eclipse. It just happens to be convenient and powerful, but the best way to start learning any programming language is with any text editor and command line compiling. Command completion is not something you want to learn the syntax, it is something you want to make your life easier WHEN YOU KNOW the syntax. And Eclipse can be used for other programming languages besides Java.

C++ - You're right gharbad... Microsoft Product??? Bjarne Stroustrup must be screaming right now...

MYSQL... a PROGRAMMING LANGUAGE???? He mixes apples with dogs... SQL is a query language for relational databases, and MySQL is a database engine. I think he made up that SIDU stuff... as I always refer to those operations as CRUD.

I must quote this:

"VERY IMPORTANT NOTE: Don't be swayed by the latest and greatest glittering turd (ruby, python, node this or that). Stick to the established languages for now. They are proven, robust and in demand. WordPress and every serious business uses them so they obviously must be good." <\-- No comments... jump off a cliff, 10.000.000.000 lemmings can't be wrong!!

It again mixes oranges with horses...

"Adobe Flash programming uses a very similar programming language to JQuery (its called ECMA script)" -> I guess he meant to say "JQuery is a Javascript library. Javascript complies with the ECMA standard, like Adobe ActionScript 3 aka AS3.

<comment><USER4> :) Love your comment about lemmings. We should all be programming in Cobol, shouldn't we?</comment></comment></comment>


Tesla: How "Bioweapon Defense Mode" Has Helped in California Wildfire – Inverse - <AUTHOR> https://www.inverse.com/article/50726-tesla-how-bioweapon-defense-mode-has-helped-in-california-wildfire <comment><USER2> Tesla have no shame in exploiting anything and everything to promote their products and brand</comment>


Guardian newspaper 'changed Iraq article to avoid offending Apple' - <AUTHOR> http://www.telegraph.co.uk/news/media/11425580/Guardian-changed-Iraq-article-to-avoid-offending-Apple.html

<comment><AUTHOR> If you see a paywall, just use your browser's private mode or delete cookies.

> The Guardian is facing questions over its relationship with advertisers > after allegations that it changed a news article amid concerns about > offending Apple. ... in July last year Apple bought wraparound advertising > on The Guardian's website and stipulated that the advertising should not be > placed next to negative news.

A Guardian insider said that the headline of an article about Iraq on The Guardian's website was changed amid concerns about offending Apple, and the article was later removed from the home page entirely.

The insider said: "If editorial staff knew what was happening here they would be horrified."

The Guardian declined to comment on the specific allegation, but said: "It is never the case that editorial content is changed to meet stipulations made by an advertiser."

</comment><comment><USER2> As the story says, The Telegraph has been accused by The Guardian and others [1] of changing content to please a major advertiser. Is this journalism for the readers or revenge for The Telegraph?

The Telegraph was accused of refusing to publish stories about serious corruption in a major bank, HSBC. That's much more serious than changing a headline to look more positive (if the accusation against the Guardian is true).

[1] [http://www.politico.com/blogs/media/2015/02/columnist- resign...](http://www.politico.com/blogs/media/2015/02/columnist-resigns-over- telegraphs-fraud-202691.html)

<comment><AUTHOR> Yes, the Guardian and Telegraph are at war now. I would say it's both journalism and revenge, because the Guardian likes to take the moral high ground on many issues, so its interesting to find out that they are not above accepting money for "native advertising" (corporate fluff disguised as articles). The backdrop of course is the upcoming UK election...

> This newspaper makes no apology for the way in which it has covered the HSBC > group and the allegations of wrongdoing by its Swiss subsidiary, allegations > that have been so enthusiastically promoted by the BBC, the Guardian and > their ideological soulmates in the Labour Party.

...

We will take no lectures about journalism from the likes of the BBC, the Guardian or the Times. Those media outlets that are this week sniping about our coverage of HSBC were similarly dismissive in 2009 when we began to reveal details of MPs' expenses claims, a fact that speaks volumes about their judgment and partiality.

Our support for Britain's financial services has never blinded us to the failings of the industry. In 2012, we revealed that HSBC was at the centre of a major HM Revenue and Customs investigation after it opened offshore accounts in Jersey for criminals living in this country. Many of the media outlets that are today so excited about HSBC's conduct showed remarkably little interest in those revelations at the time.

[1] [http://www.telegraph.co.uk/comment/telegraph- view/11423912/T...](http://www.telegraph.co.uk/comment/telegraph- view/11423912/The-Telegraphs-promise-to-our-readers.html)</comment></comment>


Let your community grow alongside you: Ship unfinished apps. - <AUTHOR> http://thestartupfoundry.com/2011/04/12/let-your-community-grow-alongside-you-ship-unfinished-apps/

<comment><USER2> "You cannot build a social startup in the dark corners of your room."

I think the title should read, Ship unfinished social apps.

You cannot generalize when it comes to all apps, especially those that have a narrow niche / target user. Sometimes you have to keep the door closed and everything on lock down just to launch with an edge over the competition.

That being said, my most successful app in the Android Market started off VERY crude, and with feedback, it turned into the great app it is today. However, had I launched TOO crudely, I don't know that those early users would even have stuck around long enough to leave constructive comments. It has to look like you are trying and willing to KEEP trying to make the app better.

<comment><AUTHOR> I actually debated on including the word "social" in the title and ultimately decided against it. It doesn't matter if you're building productivity software (spreadsheets, databases, etc…) or social software, you're going to learn exponentially more about the pain points your users experience once your app is in the wild.

At the end of the day users decide how they are going to use your product.

<comment><USER3> I'm not a total devotee of Extreme Programming, but it does have a lot of good ideas, chief among them being doing frequent releases from the very start, and constantly getting feedback from the customer.

In a context where your customer is the general public, it's fairly obvious how to adapt that development model. Anything from a limited closed beta to a simple public release might be appropriate, but ideally you want to develop in a way such that you have a minimally functional but stable app fairly quickly, and add features and refactor (hopefully based on user feedback) from there.

</comment></comment></comment><comment><USER4> I think the caveat is "as long as it works."</comment>


Tennis Player Andrea Petkovic on Maria Sharapova's Retirement from Tennis - <AUTHOR> https://www.spiegel.de/international/zeitgeist/tennis-player-andrea-petkovic-on-maria-sharapova-s-retirement-from-tennis-a-eddaae95-f534-4521-a1a1-6f28718924ef <comment><USER2> This appears to be paywalled, maybe there's a button to continue to the article but I don't know German.</comment>


Reply to Aphyr attack on Redis Sentinel - <AUTHOR> http://antirez.com/news/55 <comment> brown9-2 It's very refreshing to see here that "attack" is not used in the way that one might expect from just the headline, meaning "a possibly unwarranted criticism that I didn't like or found unfair, or that I am taking personally".

<comment><USER2> I am endlessly impressed with how antirez responds to any critique of Redis that I've ever seen. He's always taken it as a positive, and looked for the truth in the critique, rather than searching for something to be wrong and try to discredit the critique.

My opinion of him and the Redis project increases further every time.

</comment></comment><comment><USER3> Tangentially related:

In the PostgreSQL evaluation[0], Aphyr noticed that, if a packet confirming a transaction is dropped, the client ends up in a deadlock.

Does PostgreSQL keep a record of the past transactions, and their success or failure. If so, is it possible to query it?

[0] <http://aphyr.com/posts/282-call-me-maybe-postgres>

<comment><USER4> Yes, you can recover from lost acknowledgements by asking for the transaction ID from postgres before committing--or by making up your own flake ID and writing it to a table. Given a queue with at-least-once delivery (which includes, say, durable storage on the client), you can check for the presence of that ID at a later time and re-apply the transaction to recover from network errors safely.

The transaction ID _does_ wrap around, so there's a time limit depending on your transaction throughput. You can also ask for certain transactional properties on rows, though this won't allow you to recover in all (most?) cases.

<comment><USER5> Database constraints usually catch these problems in event of re-submission, especially if the client can assign primary keys (e.g., a UUIDv4) a-priori, but this also tends to be true in simpler cases, too.

All in all, I am not sure if anyone should find this surprising: if anyone has ever had a network stall when clicking the 'confirm' button at a web-based store, they are familiar with the uncertainty as to whether the order has been submitted or not (resolved typically by browsing the history or waiting for an email, or no).

I would guess modern e-commerce vendors would send you a UUID or moral equivalent to de-dup cart resubmissions these days...but if not, it'd be interesting to know why not.

<comment><USER4> Correct; if your writes are idempotent, retrying is safe. I cover this in the post as well. My above comment shows that it's possible to recover consistency even for writes which are _not_ idempotent--though depending on the semantics of your retries, there may be some locking required.

</comment></comment></comment></comment><comment><USER6> Redis is one of those things I both love and love to hate.

I've had good results using Redis as a lock server, but I live in (perhaps misplaced) fear of a client hanging or crashing leaving a lock stranded. Not that this is really Redis's problem.

<comment><USER7> Hello, you can easily mount a lock that auto-releases itself after some timeout using the new (2.6.13) extended SET command (see <http://redis.io/commands/set>) or simply a Lua script.

<comment><USER6> Since the jobs we're locking can have somewhat inconsistent times we're actually using an implementation where the tasks can get a lock with a time limit and can extend their lock so long as they still have it, so they do potentially auto-release.

Even given this, bad lock timing (not that likely) or a crash (more likely) could let inconsistency in.

 _Shrugs_

Like I said, my problem is not really Redis's. If I can't trust everything that uses a lock not to crash 99.99% of the time I should really be looking at our jobs and not at Redis.

Even then, though, it's probably more a matter of me not trusting things than it is said things not actually being trustworthy.

<comment><USER8> We're about to open source a similar deal (redis-based "soft guarantee" mutexes) -- ours is written in Python and mostly used as a way to coordinate (very frequent) parallel task execution a la CountDownLatch, so 100% reliable exclusion in the face of failure isn't critical.

I'd be interested to hear about your implementation if you can share (email is HN username at gmail.com)

<comment><USER6> I sent you a rather quick email.

</comment></comment></comment></comment></comment><comment><USER9> A response to this article on Redis: <http://aphyr.com/posts/283-call-me- maybe-redis>

<comment><USER10> His continued use of "CP" confused me for a while, so TIL about CAP Theorem

<http://en.wikipedia.org/wiki/CAP_theorem>

<comment><USER11> If you have the time, this video by Basho's CTO will give you a much better understanding of the tradeoffs that are involved in distributed system design: [http://www.infoq.com/presentations/Concurrency-Scale- Distrib...](http://www.infoq.com/presentations/Concurrency-Scale-Distributed)

A great alternative to thinking about things in terms of CAP that Justin brings up is harvest-yield, where yield is the probability of completing a request and harvest is the fraction of your data that the response actually represents. Here's the paper: <http://lab.mscs.mu.edu/Dist2012/lectures/HarvestYield.pdf>

</comment></comment></comment><comment><USER12> I'm frustrated that when the HN editors deduped the original story, they apparently deleted ALL the instances, leaving only this one. I wanted to read the discussion on the subject of Aphyr's research, not Antirez' response.

It looks bad, HN. We all know that VMWare is litigious as ____(try looking up benchmarks sometime.) But to (presumably) cave so quickly and effortlessly suggests... well, I'm not sure.

The other possibility is that Aphyr yanked them himself, probably under duress (or else there'd just be an ' __update __' at the bottom of the research's page.) Aphyr, is this what happened? I figure you probably can't talk freely if so, but say something.

<comment><USER4> [https://www.hnsearch.com/search#request/all&q=aphyr.com](https://www.hnsearch.com/search#request/all&q=aphyr.com)

HN stories on my original posts are still there, as far as I can tell. They just never hit frontpage.

<comment><USER7> Aphyr, this is very lame, it's not common to see a work like what you did, and none of your stories hit the HN front page? I don't know what to think, but I hope that at least my post will help to show more people your awesome work.

<comment><USER13> I think Aphyr's series was a little too meaty for the general HN audience (of today).

Talking about things like the FLP impossibility result, CAP theorem and specifying protocols with TLA+ may be a bit over the heads of many HN readers - clearly, people would rather read stories about the latest funding round, acquisition or frontend UI framework than a substantive article on distributed systems.

<comment><USER14> It's not fair to imply that these thing are over the heads of HN readers. There are plenty of smart people that just might not care about distributed systems enough to read through. Does my lack of reading medical journals speak to my ability to read/comprehend them?

</comment></comment></comment></comment></comment><comment><USER15> RethinkDB people, how does your database compare?

</comment><comment><USER16> DRBD? <http://drbd.org/>

<comment><USER4> Same limitations as any asynchronously replicated system; if both nodes diverge during a partition, you'll probably have to drop one's writes.

[http://aphyr.com/posts/287-asynchronous-replication-with- fai...](http://aphyr.com/posts/287-asynchronous-replication-with-failover)

<comment><USER16> Right. By operating at the block level it's a little more portable than most of the solutions discussed, though. Worth people's consideration, IMHO.

<comment><USER4> I'm inclined to think just the opposite. It's often possible to recover divergent data structures logically. Good luck doing that on an arbitrary block store.

<comment><USER16> My impression is that most DRBD setups are such that the backing volume is marked to recall which node last had 'master' (ie. write capacity), thus avoids this issue. However, to achieve this reliably it needs out of band STONITH (shoot-the-other-node-in-the-head), eg. IPMI.</comment></comment></comment></comment></comment>


Does there exist or is there a market for an online to-do list (see comment)? Edit: apparently rememberthemilk.com. - <AUTHOR>

<comment><AUTHOR> In the past, I have been continually frustrated by my inability to get things done. I find that I know what I _should_ be working on, but I instead do things like lurk here or obsessively check my e-mail. For the last month or so, however, I have started to write down the things that I would like to do in lists (using a Google homepage feature), and I find that I do a much better job getting things done.

I also live with my girlfriend, and sometimes we have things that we would like each other to do. Oftentimes, she'll ask me to do something, I'll say "okay", I'll forget, and it won't get done when it should. It would be nice if she could easily add to my list.

In general, I have a need for a to-do list application. I feel that if it's something I need, however, that others might find a use for it as well. The idea I have is to allow it to connect with other applications like Google Calendar, although it would also have a built-in one for those who don't use a calendar program (me included). I would be able to add ideas to my to-do list either by adding them to the calendar or by simply adding them with some priority (i.e. Immediate, High, Medium, Low). Then, in my preferences, I would be able to assign priorities to items based on how many days away they are (i.e. 1, 5, 10, 11+).

Finally, the point of all this would be to have a simple list of things I need to do, with highest priority items appearing on top. Items without an explicit due date would gradually increase in priority based on some scoring system. There would be a simple way to mark items off the list or to lower the priority. I feel that this system would produce a nice mix of tasks that include items with a deadline and things that I would like to get done that don't necessarily have a deadline.

The additional interesting part of the whole thing would be to allow other members to add items to your list. You could have public items on your calendar (as with Google) which everyone could see, but you would also be able to have friends add things to your calendar, for example if they are planning a party and would like you to attend. Now it would conveniently show up in your to-do list and you wouldn't forget about it. Or if your wife wants you to clean the gutters sometime this week, she could just add it to your list with Medium priority, with the knowledge that it would gradually rise to the top of your list and you would get it done.

Does anyone find this to be an interesting idea? Is there anything out there that does this already? As I said, I really feel like I could use something like this, so if it's already out there, I would be quite happy to use it. If not, well, I guess it's something I should make :-).

Thanks in advance for your comments.

<comment><USER3> I've seen a lot of todo list applications in the past year. <http://www.rememberthemilk.com/> is the most popular I believe and should meet your requirements.

For now I'm sticking with paper notepads. They're flexible and portable. The only downside is that copying tasks from my "this week" list to my "today" list involves rewriting.

<comment><AUTHOR> Thanks for the link. I've signed up for it, and it seems to almost precisely describe my idea, so that's good for me; it will save me some work :-).

</comment></comment></comment><comment><USER4> Seems to me that your problem is not making your to-do list more _efficient_ , but actually more _effective_. Any to-do list system (rememberthemilk, GTD, Outlook, etc...) will help you with the efficiency part, but not with the effectiveness part.

I highly recommend you the book First Things First, by Dr. Covey: <http://www.amazon.com/First-Things-Learn-Leave-Legacy/dp/0684802031/>

</comment><comment><USER5> I've always wanted something that works like Omni Outliner does - <USER2> infinite indents. I've found several todo lists on several online project management packages, but this has always been the dealkiller for me. It's what allows me to break down tasks to bite sized increments - no matter how large the tasks are originally. I've only found that OmniOutliner and LifeBalance do this...and they aren't online. Doesn't seem like rememberthemilk does it either.</comment>


Radio Lockdown: Better legislation implies the ban of bazookas to kill a fly - <AUTHOR> https://ec.europa.eu/info/law/better-regulation/initiatives/ares-2018-6621038/feedback/F240080_en?p_id=380919 <comment><USER2> Good reply to the regulatory overreach. Only one change to consider, TDWR is on all the time insofar as I can tell from checking out the weatherunderground feed of Tampa's TDWR. Even if it did somehow manage to cause interference as you've pointed out it would have to be on top of the site if it were to cause an issue and even then it would be easy to track down.

EDIT: The TDWR referenced above is at [https://www.wunderground.com/weather- radar/united-states/fl/...](https://www.wunderground.com/weather-radar/united- states/fl/tampa/tpa/)</comment>


How exercise changes our DNA - <AUTHOR> http://mobile.nytimes.com/blogs/well/2014/12/17/how-exercise-changes-our-dna/

<comment><USER2> [https://hn.algolia.com/?q=exercise+dna#!/story/forever/0/exe...](https://hn.algolia.com/?q=exercise+dna#!/story/forever/0/exercise%20dna)</comment>


Landing Beta Test – Finance APP – Feedback Please - <AUTHOR> http://bankity.com/?utm_source=facebook&utm_medium=ad&utm_campaign=Facebook%20ad%202 <comment><USER2> The wiggling content is very distracting and pulled my focus away from trying to figure out what your app does. The same screenshot is in 3 different places, and I am left with no real idea of what your app does, besides provide a single circle graph of my bank account. I wouldn't consider "420" to be an optimal number for a advertisement, although I did find it amusing.

I would suggest redesigning the page to make your app's core function more readily apparent, ditch the wiggle content, use more explicit terms in your top bar (the typing thing, not sure what you would call that), and use a much greater variety of screenshots to show off more of your app's functionality.</comment>


Why the Leather Cover Crashes the Kindle 3 - <AUTHOR> http://connectify.blogspot.com/2010/12/why-leather-cover-crashes-kindle-3.html

<comment><USER2> The post has changed for some weird reason since submission. Here's the text, via the Google cache:

I love my Kindle 3. I was in the middle of writing a blog post about how great the Kindle 3 and Connectify work together (which I will post in the next day or two), but started having a problem with my Kindle crashing randomly. I searched the forums and lots of people reported the same problem, but only when they had the Amazon leather cover without a light. But no one ever saw this happen on the version with the light, and no one seemed to explain how that could happen.

It didn't seem to make a lot of sense that a leather cover would crash an electronic device, so I got curious and started to look closely at my Kindle's case.

The unlit leather Kindle case has 2 black hooks that slide into the side of the device to hold it into place.

So then I looked at the lighted version to see how it's different:

On the lighted version, the hooks are gold! That's how the light gets power, of course. One of them is power and one of them is ground.

So then I looked really closely at hooks on my cover:

It's coated in a black, textured paint, which does not conduct electricty. But look closely along the edge, where it rubs against the inside of the Kindle. It's still black, but there are now spots with a smooth texture where the paint has rubbed off.

So out came the handy-dandy Radio Shack multimeter, set to measure resistance. I found a smooth point on each of the hooks and:

They're connected? It's hard to get a good reading, without scraping all the paint away. But that's a connection... remember that's how it powers the light. Depending on your contact you can see some pretty low values, which imply a pretty good connection between the two.

This is why the Kindle crashes. Once a bit of paint has rubbed off the hooks, power starts flowing through the cover, leading to brownouts; the CPU does not get enough juice to operate properly and ends out either hung or rebooting!

<comment><USER3> Escapist has the pictures. [http://www.escapistmagazine.com/news/view/106355-Amateur- Eng...](http://www.escapistmagazine.com/news/view/106355-Amateur-Engineer- Figures-Out-Why-His-Kindle-Randomly-Restarts)

</comment></comment><comment><USER4> Should be simple to get more data - just short out (with appropriate resistors!) the connection points and see if your Kindle Crashes.

50%+ of my reading get's done by the K3 nightlight - I'm surprised people manage to get by without it.

<comment><USER5> But that's the point: to trigger the brownout that crashes the system, you need to really short-circuit those points. So resistors in series won't do it.

<comment><USER6> You use the resistors for safety to determine how much current is needed to kill the device. I'd use a potentiometer, and turn down the resistance until bad things happened. Or, more likely, I'd insulate the hooks on my case or sever the connection between them, and not risk damaging the Kindle.

</comment></comment></comment><comment><USER7> This post has nothing to do with a leather cover crashing the Kindle (apart from the tags and the URL). Are people up voting this before having read the actual article or am I missing something?

<comment><USER8> I believe the website changed the content of the article. Note how his blog has two posts with the same text now. Probably trying to take advantage of all the Slashdot/other traffic to sell whatever.

<comment><USER9> I think he may have taken in the criticism over the 2MΩ reading and started to think he made a mistake.

</comment></comment></comment><comment><USER10> Interesting... I had some random crashes with mine, and I have a leather cover. Haven't had any lately. The worst was when our plane was supposed to leave from Amsterdam for PDX, and I thought I was going to be stuck for the whole flight with no Kindle... it wasn't reacting. Luckily it rebooted or something, but I was getting pretty pissed off.

<comment><USER11> If the device is really acting up, and needs restarting teep the power button/slider 'on' for 12-15 seconds. That will force a reboot on the device.

</comment></comment><comment><USER12> Ähm... has the page changed? There is not a single mention of a Kindle crash, and the DDG summary of the page when searching for the title shows something completely different than what I see there. Hm.

<comment><AUTHOR> Looks like the blog did indeed "update" the page at the same URL, after I had posted the link here.

I apologize for the confusion, even though it's the blog's fault. :)

</comment></comment><comment><USER13> Wow, I had no idea you could get power from the hook ports on the Kindle. I have a separate light that uses batteries.

I may have to do some hardware hacking in the near future!

</comment><comment><USER14> So weird, my Kindle 3 crashed twice yesterday, something that's not happened in the 3~ months I've owned it. And I have a leather cover. Curious if this is why.</comment>


Apple's Comments on the Federal Automated Vehicles Policy - <AUTHOR> https://www.regulations.gov/contentStreamer?documentId=NHTSA-2016-0090-1115&attachmentNumber=1&disposition=attachment&contentType=pdf <comment><USER2> Presumably this got posted because it is tacit confirmation that Apple is working on a car, or at least thinking about it. The comments themselves don't seem particularly surprising or noteworthy.

Although I do think it's funny that even Apple's _legal comments to federal regulators_ use the same font and whitespace conventions as their marketing stuff.

<comment><USER3> The way to do branding right is to make it part of your DNA, not just a tool to deploy when you think branding matters.

</comment></comment><comment><USER4> The only interesting thing in this is their recommendations (which perhaps are similar/identical to those of other companies; I didn't dig around on the gov web site).

They remind me of FDA drug testing regulations (Section 505 of Food, Drug, and Cosmetic Act if you care): what you actually ask for is a waiver of the law against prosecution for administering an unlicensed drug, saying, "if I make compound X using process Y and then give it to a specific subset of people using protocol Z then please don't prosecute me as I think this will not be an undue risk due to A, B and C"

Not a bad model to use.</comment>


Ask HN: Where can I buy a small software company? - <AUTHOR> So I currently have a software company that spins off a lot of cash and doesn't require much time to keep it running. I'd like to buy another software company / software product that I can work on and grow and make more money.<p>The problem, though, is wading through the crap that's out there on sites like flippa.  Are there sites that have good, solid businesses for sale in the $50k - $500k range?  A successful side project that the owner doesn't have time for any more? <comment><USER2> You should talk to the people at tiny.website — they buy companies you're talking about. Maybe they'll let you partner with them?</comment>


Why Events Are a Bad Idea (for high-concurrency servers) (2003) [pdf] - <AUTHOR> https://people.eecs.berkeley.edu/~brewer/papers/threads-hotos-2003.pdf <comment><USER2> Modern processors are much faster than the outlying memory and persistent storage devices. They and compilers in combination are relatively good at optimizing for predictable patterns of using sequential blocks of the outlying memory. Context switches between tasks are expensive, because the state of the processor must be (at least partially) serialized and stored as well as the loss of the implicit context of the caches.

Thus it makes /far/ more sense to have a number of threads (dependent on the hardware capacity and how readily the problem can be divided to independent or very loosely coupled tasks) which poll message queues than it does to have a completely independent thread for every event.

Languages based around message passing are thus the obvious choice for this type of programming.

<comment><USER3> What modern server is this describing? "a number of threads ... which poll message queues..."

and what is this describing? "...a completely independent thread for every event."

"Languages based around message passing are thus the obvious choice for this type of programming." Ruby? Obj-c?

<comment><USER2> The two languages that come to /my/ mind are Erlang and Go.

Other programmers might have different choices. There's no reason you couldn't use a language that has threads to implement the N threads with event queues model, or something similar for that language if it has shared memory. If the language of choice lacks it you might be able to use a similar multi-process (externally) load-balanced model.

</comment></comment></comment><comment><USER4> A few years later, Igor Sysoev will make NGinX which will blow Apache away in speed, and Apache 2 will adopt the paradigm.

<comment><USER5> There were _many_ fast(er than Apache) web servers before nginx, many using various concurrency models, including the one used by nginx.

</comment></comment><comment><USER6> Threads vs. events is a false dichotomy to me. Currently writing an event- driven finite state machine dispatcher that fires up threaded processes to perform long-running tasks that do not modify state. The FSM brings order and structure to chaotic event interactions, while threading enables full utilization of CPU cores. All the better to drain your battery, lol. Seriously though, I made this choice to balance reliability with responsivenes.

Choose the right tool for the job.

<comment><USER7> I agree that they are not contradictory but rather complementary: [https://github.com/tinspin/rupy](https://github.com/tinspin/rupy)

My web server uses multi-threaded events.

So both!

</comment></comment><comment><USER8> Modern version of "considered harmful."

</comment><comment><USER9> here's a link to a related discussion on HN entitled Why Threads are a Bad Idea (for most purposes) (1995)"

[https://news.ycombinator.com/item?id=14547063](https://news.ycombinator.com/item?id=14547063)</comment>


Modarri: The Toy Car Reinvented - <AUTHOR> http://www.kickstarter.com/projects/1344682921/modarri-the-toy-car-reinvented?ref=live

<comment><AUTHOR> My friend here in Santa Cruz started this toy company so I'm posting in case there might be interest. Backstory:

[http://www.santacruzsentinel.com/santacruz/ci_24625897/toy-k...](http://www.santacruzsentinel.com/santacruz/ci_24625897/toy- kid-all-us)</comment>


Battle of the Lisps - <AUTHOR> http://symbo1ics.com/blog/?p=729

<comment><USER2> Lisp attracts hot-air punditry the same way Ruby attracts aerosol-based beauty products.

<comment><USER3> There wasn't much hot air after the title, I thought it was a pretty even handed comparison.

<comment><USER4> I found it superficial and bordering on mistaken.

</comment></comment></comment><comment><USER5>
      This problem [of software libraries] was definitely recognized by the Scheme community, and was "solved" in R6RS. However, R6RS seems to have been a flop...

I've heard this argument before (R6RS is a flop), but no-one can give me any logical reason why this is the case. I wish Scheme implementors would stop dragging their feet and implement R6RS already! Only with a portable library mechanism (specified in R6RS) can Scheme users like myself begin the effort of building a standard library platform for all Scheme implementations.

<comment><USER6> > ... but no-one can give me any logical reason why this is the case.

If you search the c.l.s archives, you can find the various reasons.

> I wish Scheme implementors would stop dragging their feet and implement R6RS > already!

My limited understanding of the situation is as follows:

R6RS made it through the standards process even though a substantial number of implementors and practitioners weren't happy with it. Many refused to implement R6RS, or else ignored it, but some big players did implement it. After that, it was a stalemate for a while, with the community divided.

Then the current steering committee decided that this rift needed to be repaired. I think they saw that some Schemers wanted to keep Scheme small, while others wanted it to be more practical and include more "batteries". Read more about their conclusions and plans at <http://www.scheme-reports.org/> (strangely (or perhaps not so strangely?), I can't find a link to that site from schemers.org)...

The long and the short of it is, to reunite the community, the steering committee decided to define Scheme (R7RS) as a small core language ("wg1") + a superset of features/libraries that most people are using in one way or another anyway ("wg2"). If an implementor only wants to implement wg1, then that's fine, and it's mostly like R5RS anyway. If they want to provide a full- featured batteries-included implementation, then they implement wg1 + wg2 (which will take the best and least controversial features from R6RS and probably also draw heavily from the SRFI's). This satisfies both the "keep it small!" faction and the "we want more practical stuff included!" faction.

As we speak, the R7RS wg1 and wg2 groups are working out the kinks for their respective proposals / public reports, with votes and discussions actively taking place. I think R7RS is going to have broad support and be rapidly adopted.

</comment></comment><comment><USER7> Aw, why doesn't he mention Racket (formerly PLT Scheme)? I've been playing around with it since I saw it on HN a few weeks ago and it's a nifty implementation. DrRacket is a great environment, and it seems like it has good library support - both lots of things available, and easy to drop in to your code, with (require ...).</comment>


iPhone, Pico projector, laser pointer == game - <AUTHOR> http://www.laservr.com/site/blog/ready-aim-fire-lasers

<comment><AUTHOR> Would Hacker News reader's play a mobile "projected reality" game, using a laser pointer as the primary interaction device? The next phase is going to be taking the machine vision to the next level, whereas you're not simply detecting bright dots on a wall, but actually interpreting the player's environment and actions. It wont be easy!</comment>


Show HN: Build activity streams with Rails and getstream.io - <AUTHOR> https://github.com/GetStream/stream-rails

<comment><USER2> This is really awesome! I was working a gem similar to this while ago, but I didn't open source it, because I couldn't support it.

This is amazing, good job guys! Excited to try it out.

<comment><AUTHOR> that's great to hear :) let me know what you think about it!

</comment></comment><comment><AUTHOR> Hello there, GetStream.io co-founder here. I just released a ruby gem that makes it easier for RoR users to integrate activity streams (using our API service). Soon I will create a small demo app based on this (as I already did for Django and Laravel). Any feedback and suggestion is welcome! Thanks, Tommaso</comment>


Swotti: a semantic-web based, opinions aggregator - <AUTHOR> http://www.swotti.com/index.php?lang=en

<comment><USER2> This is quite promising and impressive.

However, you need someone to work on the English right away. "Opinion Analizer" is... not quite what you think it means.

</comment><comment><USER3> As a test I looked for "lenovo x300" as I know that similiarly named products exist, but one of the first opinions came back as "The Dell Latitude X300 is a very good choice for those who want prime performance with premium..." so while I think it's a great concept (and it will definitely get better!), I'd take a good look at the model you're using to ensure that it indeed disambiguates as necessary.

Overall, I really like the idea, and I think it's visually implemented very well. It packs a lot of data on to one screen (nicely).

</comment><comment><USER4> I tried out a couple different sites. twitter, pownce, evite.

It seems like it was somewhat on spot, twitter having about 75% favorable reviews, rest due to downtimes. However, pownce had 100%, which seems like it probably didn't trawl the web for enough mentions of it.

Evite, had about 20% hates. I had expected it to be higher. I too hate eVite.

I remember this sort of thing before at another startup, and its processing was faster, but I don't know where they disappeared to.

</comment><comment><USER5> It wasn't working for my first few searches, but I tried "Cybershot" and got some results, I could see how this would be useful in looking for reviews.

I'm not sure what to say about the use of a cartoon dog in a search tool, however...

</comment><comment><USER6> Welcome to 2008! _Semantic is the new Web 2.0_.

This is going to be the next most overused term ever, suddenly you will have sematic widgets, semantic dating sites and semantic platforms. sigh!

</comment><comment><USER7> I typed Art of Computer Programming and ball is still spinning for last 5 minutes ;(

</comment><comment><USER8> Fun to use, and a pretty good example of semantic web.

</comment><comment><USER9> How is this the semantic web?

</comment><comment><USER10> I typed in "toaster," and it said, "Seems to be a Television..."</comment>


NASA, SpaceX to Launch First Astronauts to ISS from U.S. Since 2011 - <AUTHOR> https://www.nasa.gov/specials/dm2/ <comment><AUTHOR> May 27, at 4:33PM EDT.</comment>


3 easy ways to generate Python Docs - <AUTHOR> http://wesleyzhao.com/generating-python-documentation-from-comments

<comment><AUTHOR> Easiest way is through Python's pydoc module. $ pydoc -w name_of_your_module</comment>


Slync.io, reshaping global supply chains. Looking for Full Stack Engineers - <AUTHOR> https://slync.io/careers <comment><USER2> Looks like the submission form to apply is missing using Firefox. Everything after the position descripts on all four positions is cut off by the footer. It looks like the footer and the overall page length are not respecting the size of the container.

<comment><USER3> Looks like it is working now

<comment><USER2> Excellent!

Though that would have been an amusing test for a front end dev. "Can you actually troubleshoot a render issue to get the link in order to just apply?"

<comment><USER4> Exactly! We were undergoing a short maintenance to update our positions and some of the website structure.

Shoot us an application if interested. We are looking for devs with that attention to detail :).</comment></comment></comment></comment>


Coronavirus pandemic takes hold, we are making decisions without reliable data - <AUTHOR> https://www.statnews.com/2020/03/17/a-fiasco-in-the-making-as-the-coronavirus-pandemic-takes-hold-we-are-making-decisions-without-reliable-data/ <comment><USER2> Are we sure that the economic damage of the shutdown of the world economy out weighs the heath risks of the virus. Are we in group think here? A major recession/depression means a lot of people go hungry, lose access to medical care etc. Does anyone know of studies or research that looks at the health impacts of a shutdown vs. the health risk of the virus ? Just asking questions.

I keep asking this question and I get no response from anyone. This smells like group think. Are we not able to discuss such questions ?

<comment><USER3> it seems like this is the response from most people everywhere about until their region hits the knee of the exponential curve. this pattern played out in Italy, Spain, France, and now the US.

the Imperial College paper estimates 2 million dead in the US with no response and ~1 million dead with a limited response that doesn't involve a full shutdown. That paper explicitly doesn't consider the very severe economic impacts but it's hard to imagine that deaths on that scale aren't worse than whatever they might be.

<comment><USER4> ~1 million is the current annual death rate in the US (~0.8% last I checked), and the disease kills older people much more than younger people. How many of those 2 million would have died anyway in the next couple of years? How many would have contributed to the economy over the next few years? How many of those who will die from a recession would have contributed to the economy?

These are tough questions, but I think they're worth answering so we know what we're really gaining by shutting down the economy. I know we want to save as many lives as possible, but we should also know the cost too.

<comment><USER5> Another thing to note is that the virus will overwhelm emergency rooms world wide and deprive many other patients of adequate care that will cause some unnecessary death.

So it isn't just virus deaths you have to factor in.

</comment></comment></comment></comment><comment><USER6> Acting without reliable data reminds me of war. And that got me thinking: is this the closest exposure to "Total War" that any living generation (except the greatest generation) has experienced? It's not like recent wars that can be ignored by shutting off the TV. This captivates all of us and is becoming impossible to ignore.

<comment><USER7> No, as I wrote another day, polio, the Cold War, the meth/crack epidemic in the USA and the vodka epidemic in Russia were/are pretty scary.

(A lot of apartment blocks in Russia became 100% female after all the men either died in the Afghanistan war or destroyed their livers with vodka/wood alcohol.)

SARS (Corona-1) in 2002/2003 was bad too, but mostly affected Asia, with isolated incidents in North America.

<comment><USER8> A distinctive feature of a pandemic event is that it really is a global thing. Even the world wars could claim to have quiet fronts... and that matters as a global society. Normally - since the modern era began - we're in a default state of national competition and every country is under some obligation to work itself to the bone and exploit what it can to get ahead of the others. Hence the default response to crises has long been "keep a strong international image, maintain business as usual". The crisis harms a select group somewhere and everyone else ignores it. But we did periodically have pandemics, and each one changed the character of things going forward.

And it's clear why that is the case; you can't really get ahead if you don't take care of the disease. The as-usual response fails because it affects everyone. Even AIDS, which was approached so, so reluctantly, eventually got an organized response.

And this response is more likely to be humane than most crisis management because there is so little room to evade the issue and try to fit it into the usual powermongering circus.

</comment></comment></comment><comment><USER9> This article fails to make a single mention of Italy's case-load and its effect on Italy's healthcare system.

<comment><USER10> Italy seems to be an outlier. They're hit significantly harder then any other country.

<comment><USER11> Not true. France is hit, eastern France's hospitals are at full capacity. Doctors are starting to consider letting people over 70 die without access to an ICU.

Also, it's kind of strange that on this forum people do not get the notion of exponential increase. It's twice worst every 72 hours. Time runs out really fast.

<comment><USER12> People totally get exponential increase. I agree it's really bad given that we have infinite population! Oh wait, we don't. The exponential increase will go on for 3-4 weeks after which there will be no more people to infect; the time in ICU is 2-3 week, there's overlap, so in say a month we will be done. Recessions last years; in case of Great Depression, a decade. Remember how Great Depression ended in Europe?

</comment></comment></comment></comment><comment><USER13> I think that Ioannidis makes a valid point about the need for accurate data. But isn't the (pretty decent) italian healthcare system getting completely overwhelmed a strong argument against the possibility that the corona outbreak could get "buried within the noise" of seasonal influenza? I also don't understand how shutting down non-essential businesses for a few weeks is supposed to cause large damage.

</comment><comment><USER14> At what point do randomly sampled tests make sense?

I guess now you'd test too many negative and would need too many tests to get reliable results. (you need to have a decent sample of sick people for statistical significance).

Than again the infections also cluster locally a lot, so you can't extrapolate for a country well..

</comment><comment><USER15> I'm sure it wasn't the author's intention, but the article has a lot of the patterns and phrasing I see in denialist literature (global warming, for example).

I agree with the author that we need more data. But he nerfed the urgency of his plea by using wording that downplays the problem, and seems to only be talking about the situation in the U.S. and U.K. No mention of the data points collected at great cost by China and Italy, not to mention Iran (which seems to be digging mass graves).

I'm confused. What does the author expect from publishing this piece?

<comment><USER16> about your last point : it mentions doing random sampling periodically to get a better assessment of the spread, in order to be able to cut lockdowns when the epidemic is already touching 99% of the population ( and not wait weeks until we see the numbers drop in hospitals).

also, that we take south korea as an example for future policies and not china.</comment></comment>


An End to Negativity in the Tech Community - <AUTHOR> http://jsconf.eu/2011/an_end_to_negativity.html <comment><USER2> There's trolling, and then there is the negativity which comes from utter weariness with things. You spend 5 years on the mailing list, trying to help all the newbies, but it just never gets any better. Every week there's a new guy who didn't read the archives, who never even bothered to look at the documentation or the FAQ, or who thinks he knows (after a 10 minute reading of the Wikipedia article) that he knows exactly what's "wrong" with your project and that _his_ ideas will solve everything. You spend 5 years politely pointing them to the right place, or gently explaining the problems with what they're proposing, but nobody ever learns. Then you just start ignoring them, because you've run out of politeness--this is how we get 3 year old bug reports with 20 "me too!" comments and a single "Won't fix. Closed" from the developer. But all the other people have started ignoring them too, except the very-recently-noobs. Who don't know any answers, but will happily post all sorts of misinformation and noise. So you start to answer questions like "How to download iso plz?" with "Look at the fucking front page of the website", instead of the old "Here's a link, and you'll need bunzip2 installed to unpack the file". You've spent years trying to be nice and polite but it never seems to help--you just get more entitled idiots asking the same crap, so maybe it's time to try being nasty.

In the end, of course, it doesn't help, but it sure feels good to get that out. I'm working on it, because it's not good for the community, but it's hard to avoid sometimes.

<comment><USER3> It sounds like you are describing burnout. Normally being easily irritated by expected behavior means that one is tired,

Beginners are going to ask the same questions. Some of them will ask for help rather than read the documentation because they learn better through social interactions than through reading. Some will propose ideas that seem good to them but the community has already found them flawed.

When one reaches the point of being easily irritated by known normal behavior, it is time to get out of there to prevent negative behavior. Take some time off from the mailing list. It sounds like you have at least spent 5 years. It could be longer. Take a break. Rest. Ask others in the community to help out beginners.

<comment><USER2> Yeah, basically I got burned out. I've backed off from the mailing list, probably post 1/8th what I used to.

</comment></comment></comment><comment><USER4> Even though the Dart hate is the most recent example, I think the issue of negativity & trolling is much larger than one new language release. It seems that if anyone comes up with a new technology/idea that doesn't fit the exact zeitgeist of a particular community it is immediately & thoroughly slammed.

Having a 'thick-skin' is all well and great, but truth is a lot of people don't, and criticism hurts. Constructive criticism can be a very useful thing, but being adrift in a sea of 'constructive criticism' with not a dot of positivity in sight is just demoralising.

I know it can seem that if a bad idea is not immediately killed you will be stuck with it forever & sometimes this is the case, but not always. Sometimes things are just different, people have different ideas. If someone has a different idea that to you seems stupid, smile politely and walk (run?) away.

Bad ideas eventually become self-evident anyway, you will have just saved some time.

<comment><USER5> DART is not the product of some 16 year old hacker with a thin skin, DART is the product of a company worth $200 billion dollars and that company has enough market share to make something like DART something I have to deal with. If a 16 year old hacker came up with DART it would only succeed on it's merits, when a $200 billion dollar company invents something like this they use that money to shove this language down your throat.

Just because Google hired James Gosling doesn't mean they need to put him back to work recreating Java.

If the VM is exposed and we can compile whatever language down to DART VM byte code I'm all for it, if DART means programming in DART then I will shout from the rooftops how much it sucks in hopes I never have to deal with it.

<comment><USER2> Google didn't write DART, Google employees did. Maybe they should have known better, I don't know--I have not looked into DART at all. I recently released a project that had been funded by the US Government, but that doesn't mean it didn't suck when people trashed it in comments.

</comment></comment></comment><comment> buff-a "I have an important message about negativity. Please watch this 34 minute video to find out what it is."

No.

<comment><USER6> Stop being so negative. Here, I found this video to explain it to you...

</comment></comment><comment><USER5> DART is just a more java like javascript. Java sucks and so does DART. All that's missing from DART is checked exceptions (and namespaces apparently, I miss typing __PR_ReallySecretStruct from C). Can we have DWORDS? Please?

Look at this DRECK and tell me it doesnt remind you of Java.

[https://code.google.com/p/dart/source/browse/branches/bleedi...](https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/client/samples/swarm/CSS.dart)

Negativity? It seems like he's complaining about criticism. DART sucks and people are saying so, get over it. It's not just an email, it's a 200 page spec outlining exactly how and why the language is the retarded child of C and Java for browsers.

We all adopted javascript and you still have to typeof(blah) to find out if a variable is defined. I think that stuff sucks, and if you're improving javascript you might as well get rid of the java line noise at the same time.

If you're building a language for the web in 2011 I'd hope it at least has namespaces, monads, variables immutable by default, partial application, etc. It's not 1956 when these ideas were new.

I'll be negative about DART in hopes that it sucks less and isn't java/C for browsers. I'm done with languages that are just syntactic sugar for a JMP instruction and pushing a this pointer on to the stack. Maybe a language where we can glue functions together like:

      let addByOneMultiplyByTwo = (add 1) >> (mul 2)

No thanks, I'll stick to coffeescript where the emphasis is on telling the browser what to do, not how to do it.

A main function is just an implementation detail not something that should be part of the language. Not all programs start in main and it's just an artifact that the first function some operating systems look for is called "main". I really don't need implementation details dating back to Jan 1, 1970 to clutter up a new language.

<http://www.dartlang.org/docs/spec/dartLangSpec.pdf> check page 72 to see that main() is actually a part of the language. WTF?

<comment><USER7> The bad thing is bashing without trying to understanding the problem they are trying to solve and the audience they are targeting.

</comment></comment><comment><USER8> Tempted to start calling HN "Hater News"...</comment>


2 Wall Street banks made millions selling the collapsing shares of MoviePass' co - <AUTHOR> https://www.businessinsider.com/wall-street-banks-made-millions-in-fees-selling-collapsing-moviepass-shares-2018-8 <comment><USER2> Can this company come back?</comment>


Ask HN: Do you use any sort of "function-code visual map" - <AUTHOR> I am currently using Visual Studio Code for doing web dev stuff. I'm finding it easy to get lost in my code. It just becomes convoluted/too much and I have to start over again and chunk things-write separate functions. I've also made really tiny text so I can "overall see" code. I've considered orienting my monitor vertically.
I was just thinking about a visual representation of the code and how it connects to other functions. It would be cool to see real-live execution like the code blocks light up or something as they "turn on". Like a circuit diagram or something. I don't know.
I'm not necessarily talking about those boxes with arrows pointing to other boxes (not a flow-chart) the ones you see when working with Java for instance.
Atom is cool but also uses more resources than Visual Studio Code, where Atom you could to me mod it easier since it's using familiar language eg. JavaScript versus something like C# or whatever VS Code uses.
I have junk computers so that's where I'm at right now. <comment><USER2> "Visual representation of code and how it connects to other functions" sounds precisely like boxes and lines. I'm not sure why you bring up Java in this regard; are you referring to UML?

<comment><AUTHOR> I brought up Java because I took an intro class in Java and they showed us those visual maps with boxes and line. I don't know, I'm not sure what I'm looking for but yeah maybe that is it ultimately.

I just had this thought of like empty function declarations with the names, and variables inside and then these are linked to each other I don't know. I looked up UML.

I'm going to have to study this again figure out the white/black diamonds. Thanks.</comment></comment>


Parallelizing Enjarify in Go and Rust - <AUTHOR> https://medium.com/@robertgrosse/parallelizing-enjarify-in-go-and-rust-21055d64af7e <comment><USER2> How much does printing to stdout in parallel tests skew the benchmark? Isn't stdout be definition synchronized and you are better off benchmarking without stdout involved?</comment>


Dropbox ToS Update: "admins may have access to team member accounts" - <AUTHOR>

Just got this via email, the link requires login so pasting it here:<p>> Hi <name>,<p>> We're working to make it easier for your Dropbox for Teams administrators to manage all the stuff you and your teammates have in your Teams account. Soon, we'll be releasing new features for admins to manage the security of your team's stuff and make it easier for them to help when things go wrong.<p>> In some cases, your admin may need the flexibility to take some actions on your Teams account, such as helping to manage shared folders or restoring access if you get locked out of your account. In order to clarify that admins may have access to team member accounts when managing the team, we're updating our Dropbox for Teams Agreement and Privacy Policy.<p>> You might have some personal files in your Teams account that you'd like to move to a personal account. For example, if you want to keep vacation pictures in a different account from your latest Excel spreadsheet, you can use this online guide to move your files:<p>> View the new agreement and get started here[0]<p>> Keep in mind that you can only link one Dropbox account to a computer at a time. If you need to access your other account, you can log in to the Dropbox website.<p>> The updated Dropbox for Teams Agreement takes effect on November 3, 2012. If you have any questions, check out our Help Center or email us at firstname.lastname@example.com.<p>> Thanks and happy Dropboxing! > - The Dropbox Team<p>> [0] - https://www.dropbox.com/updated_terms/ <comment><USER2> <https://www.dropbox.com/updated_terms/> Clickable.</comment>


Medieval Lucky Charms - <AUTHOR> http://blogs.bl.uk/digitisedmanuscripts/2018/03/medieval-lucky-charms.html <comment><USER2> Curious to see the emphasis here on written 'charms' with words.. The long clash between native, oral cultures and The Word in a book brought us to the modern times in the West.. more clashes of paternal vs maternal, buildings vs natures' groves, monogamy vs plural families, and more.. are somewhat implied in this tiny and very one-sided glimpse from a bookshelf of history.

However, on an upbeat note, the Christianization of the Irish peoples may be said to be generally a happy, gradual transformation over centuries.. and there is no doubt that many hearts and minds have steered well in its social fabric since then.

May the Road Rise to Meet You, all people on this day.

</comment><comment><USER3> I was hoping to see medieval cereal but charms against poison is even better. Also, I'd been doing it all wrong; knees and bones. Who'd've thunk?

<comment><USER4> None of that was magically delicious.</comment></comment>