What to use instead of std::set [pdf] - <AUTHOR> http://lafstern.org/matt/col1.pdf <comment><USER2> A fun trivia point that I have never seen anyone exploit, for many cases a linear search with a sentinel value can outperform a binary search. It is amusing to see the lengths people go through to optimize collections that will never be more than 1k in size, only to actually be working against the things computers are really good at.

<comment><USER3> Computer science curricula usually contain an introductory algorithms and data structures class, but these don't usually put focus on topics like cache locality or branch prediction.

Do you agree? And if so, would that—at least partially—explain your observation?

<comment><USER4> My undergraduate algorithms course did point out that memory hierarchies and branch predictors laugh at big-O notation, and that you should always (as Roboprog said) measure measure measure instead of just assuming a particular algo is best. It was one little piece of material in a course with a lot of ground to cover though, so it's hard to say how well it stuck with the class...

</comment></comment></comment><comment><USER5> Set is just sort of weird in other languages, I've never looked at set in the STL. I'm sort of surprised at the implementation in STL. Almost every other language's library tends to implement sets as a special case of a hash map without values, just keys.

This leads a lot of people down a weird alley where they think they're getting a list that prevents duplicates and then have all sorts of weird behavior when they iterate over it. However, 90% of the time they don't care about order and the set is nowhere near large enough to really show the overhead you're incurring over a normal linked list or array list.

Still, it's funny when they finally run into either of those issues and someone has to explain that the entire point of a set is really a data structure optimized around answering the question, "Do you contain x?" and not "Prevent duplicate entries."

I've actually used sets before, but for the purpose of having a sort of "memory" about nodes the code has seen before while looking for cycles in a graph. Even then, that was hardly production code and more a slow running data clean up operation.

<comment><USER6> Uh, OK: "Is x a duplicate?" -> "Do you contain x?"

<comment><USER5> Not _exactly_. Typically, iterating over a set is generally not what's intended when someone designs a set structure. This in turn becomes a problem in some languages.

95% of the time it simply doesn't matter. I mean, people iterate over maps all the time in day-to-day stuff, which is also a lookup-oriented structure.

But the other 5% of the time people expect list like behavior or performance from a set and don't get it, they act like this is a totally new thing for them even though they've been programming for years. :-/

EDIT: To clarify, it's really hard to explain to some folks that sets are optimized to answer quickly if they contain an X and Lists are optimized to quickly let you do a thing across all elements. Sets just _happen_ to give you values back most of the time, but the real question they're trying to answer is if you have previously placed a known value into the set. Returning the actual contents of the Set is not actually a requirement at the more abstract, theoretical level though most standard libraries provide that.

In some libraries, actually getting at the contents and iterating over a set is quite hard. I've seen highly optimized sets for massive data that doesn't actually store the item, but a highly optimized, almost range encoded version (hashes 0xabcd through 0xafaa are in the set) of the data.

Like I said, the distinction between a list that disallows duplicate entries and a set really doesn't show up until you get into some pretty large scale things that most programmers don't ever use.

However, I feel understanding the distinction and how trying to answer one question (Do you contain X?) can lead to design decisions that make answering another question (What are all the unique values out of the values I just added to you?) more difficult leads to better programmers. That is, if they have the skills to abstract the thought exercise and apply it to other situations.

<comment><USER6> Thanks for the follow up. I don't expect a particular order if I spin through the contents of a set, but it hadn't occurred to me how expensive it might be simply to _get_ the sequence.

This makes a good example of when "polymorphism" or "strategy patterns" are useful to swap in and out _how_ you do some related things to fit what actually ended up happening in an app.

</comment></comment></comment></comment><comment><USER7> For those wondering what value a CS degree has, this is the kind of material that is covered in a data structures class in a good CS program.

</comment><comment><USER6> Suggested title: "Why you shouldn't use set in C++ STL, ..."

<comment><USER8> Or just "Why you shouldn't use std::set, ..."

<comment><USER6> That, and C++ just isn't my cup of tea. Meyer's "Effective C++" book convinced me of that quite some time ago.

If I was in the video game industry, I guess it would be the only game in town though. Glad I'm not.

<comment><USER9> While AAA games haven't given up C++ and probably won't for a long time, many games in the indie and mobile space are made without any of the creators writing a line of C++, in favor of C#, Lua, Java or Javascript.

</comment></comment></comment></comment><comment><USER10> Actually, if you don't need the entries to be sorted, the sparse_hash_set from [https://github.com/greg7mdp/sparsepp](https://github.com/greg7mdp/sparsepp) is much faster than std::set or a sorted vector (except for iteration) and barely uses more memory than the sorted vector.

<comment> Ono-Sendai Or use unordered_set.

<comment><USER10> Well, you certainly could, but unordered_set will use significantly more memory than the sorted vector or sparse_hash_set, and is actually slower than sparse_hash_set.

</comment></comment></comment><comment><USER11> To me set implies the mathematical definition of a Set, not just a lists that prevents duplicates. As such it should be optimized for the various set operations: union, intersect, compliment, sym_difference, isdisjoined, issubset.

for just avoiding non-duplicates a list and a bloom filter is probably a faster data structure than a set.

<comment><USER12> complEment is tricky. How do you propose that it be encoded?

You don't literally want to create a complement set and populate it with every possible object that is not in the original set (but _could_ be, according to type).

A clone of the set with a complement flag? That could work.

At least until someone constructs a complement of a set, and then wants to iterate over it, oops!

</comment></comment><comment><USER13> There's actually an item about that in Scott Meyers's Effective STL book.

Item 23: Consider replacing associative containers with sorted vectors.</comment>


Sources: Security Firm Norse Corp. Imploding - <AUTHOR> http://krebsonsecurity.com/2016/01/sources-security-firm-norse-corp-imploding/ <comment><USER2> "Those sources say the company's investors have told employees that they can show up for work on Monday but that there is no guarantee they will get paid if they do."

Is that even legal?

<comment><USER3> To tell people not to come in because there is no money?

</comment></comment><comment><USER4> Didn't exactly call this in particular, but an old comment of mine about how many serious infosec professionals had a very low opinion of Norse: [https://news.ycombinator.com/item?id=9855582](https://news.ycombinator.com/item?id=9855582)

Definitely not surprised.

<comment><USER5> A lot of infosec professionals have the same opinion of the "threat intelligence" pile-on overall.

Norse had some amazing engineers working on their appliance, way before demand in any way justified that level of investment. Fortunately most of them have already found new jobs.

<comment><USER4> True, the threat intelligence industry is a mess and reminds me a little of early tech startups in the last bubble. It's a response to breach hysteria.

Threat intel is a good idea in theory. As more and more threat intel companies start being filtered and shutdown (and I'm sure 80% or more will), there'll probably be a few left that provide some real value to security programs. Until then, it's just going to be 90% marketing.

</comment></comment></comment><comment><USER6> Remember a wave of personal firewall products around 2005? zonealarm/norton/mcafee all had those sexy "security" popups/notifications about IP x.x.x.x HAXORING you with ICMP packet.

This is what Norse offers, but repackaged for clueless executives instead.

<comment><USER7> BlackICE defender was hot stuff for my NT4 clusters.

</comment></comment><comment><USER8> This is pretty amazing. At least as implied by the article, this isn't just mis-management of the company, this is serious misconduct.

</comment><comment><USER9> Anyone that knew anything about security knew that Norse was full of it. Norse is a shining example of how little information most people have about the security products and services they buy. It's all marketing, and it leads to more snake oil than not.

<comment><USER10> Let's not forget when Norse named a fictional person named "Lena" as the person who perpetrated the Sony hack in 2014 based on "Open-Source analysis" of the leaks.

[http://gawker.com/researcher-sony-hack-was-likely-an- inside-...](http://gawker.com/researcher-sony-hack-was-likely-an-inside-job- by-a-wom-1676556756)

</comment></comment><comment><USER11> Doing serious due diligence when joining a startup is always a good advise.

<comment><USER12> From the fine article: "The data scientist said she vetted Norse's founders prior to joining the firm, but that it wasn't until she was fired at the beginning of 2016 that she started doing deeper research into the company's founders.

"I realized that, oh crap, I think this is a scam," Landesman said. "They're trying to draw this out and tap into whatever the buzzwords du jour there are, and have a product that's going to meet that and suck in new investors.""

I guess the lesson is that even serious due diligence isn't a guarantee.

<comment><USER13> For many people "serious due diligence" is a Google search.

Relationships between people, even business ones, are based on trust. You'll rarely know if someone deserves your trust by the time you have to give it to them, so it's more important to realize whats actually going on then to be lulled into a false sense of security for how you think someone is.

It amazes me that in so many of these stories the people who got hurt, usually employees or investors, will just stand around afterwards with their hands in their pockets saying how smart the perpetrators are and how they were fooled. It isn't that this particular situation has no guarantees, it's that their are few to no guarantees in life (especially when money is changing hands).

<comment><USER11> When I mentioned "serious due diligence" I didn't mean Google search. I should have spelled it out. When a founder is neither a well-known person nor someone you know personally very well, the answer is a background check done by a professional.

Of course there is no guarantee, I'm talking about being prudent and improving your odds.

Finally, I personally know how it feels being employed by a startup founded by a con artist.

</comment></comment></comment></comment><comment><USER14> my only insight into Norse's shadiness is it's low class tweet stream: [https://twitter.com/norsecorp/status/497487387245547521](https://twitter.com/norsecorp/status/497487387245547521)

<comment><USER5> What problem do you have with them paying people for wearing their vendor swag around a conference full of buyers? $100/h is cheap in the scheme of Black Hat promotions, too.

I love their knit hats. I wonder if I can buy a case of them from Solarflare.</comment></comment>


basecamp/handbook: International Travel Guide - <AUTHOR> https://github.com/basecamp/handbook/blob/master/international-travel-guide.md#international-travel-guide <comment><USER2> > TL;DR: Don't Travel With Work Data

That line from the handbook says it all.</comment>


$330,000 in aid bought my slot in the American meritocracy. Now I see its flaws - <AUTHOR> https://www.vox.com/first-person/2017/7/20/15999718/financial-aid-education-meritocracy-income-economic-inequality <comment><USER2> _giving me a permanent marker of upper-class status and a near guarantee of material comfort._

Someone needs to let the author in on the bad news.

 _Many people whose parents pay the full tuition of $50,000 to $60,000 per year have, without any hint of irony or discrepancy, described themselves to me as "middle class."_

Because by certain perfectly reasonable definitions, they _are_ middle class. The problem is, the author is trying to measure middle class by very different metrics - those of his parents, and via the statistical interpretations that support that position. But whatever 'most' people in the 'middle' of the economic scale make for almost meaningless metric for a social class, which is driven as much by the outcomes of that income allow as by the relative size of your slice of the pie.

The problem is that while his parents >were< middle class, if you take 'middle class' to mean the relative freedom and safety that it once stood for, his parents aren't that any more. The country has progressed technologically, and regressed as a society, and the independence and security that was once afforded the middle class is no longer available via the channels that his parents started out on.

But, admitting this would involve admitting that the precious society of his childhood was complicit in it's own demise, which, in some parts of the country, is quite literally inconceivable.

</comment><comment><USER3> >On a more personal level, we should be more truthful, with others and with ourselves, about the situation we are in. This does not, and should not, require a performance of guilt — this has nothing to do with being a "bad" person.

Agreed, but sadly, this interpretation of "privilege" is not what people mean. It IS about labeling certain people as "BAD", who therefore must be punished somehow.

</comment><comment><USER4> This type of argument about meritocracy and class, although important, is missing the point.

It's not as if you eliminated all class contributions to elite school attendance suddenly problems with meritocracy would disappear.

The problem is that we overvalue superficial indicators of ability or human capital as if they were perfect, and ignore more significant, directly relevant ones.

Not too long ago, there was a linked article about selection bias in education ([https://fredrikdeboer.com/2017/03/29/why-selection-bias- is-t...](https://fredrikdeboer.com/2017/03/29/why-selection-bias-is-the-most- powerful-force-in-education/)). Lurking in that insightful essay were even darker problems, though: if you look at Figure 1 of that piece, what you might notice was the huge spread in CLA scores as a function of SAT, revealing how imperfect SAT is. But it goes further than that, because each of those points is a mean, and behind each point is an even wider distribution. What we tend to do is take something like SAT, and treat it as if it were a perfect rank ordering of ability, when it's not. I'm not saying SAT is all it takes to get into an elite school; what I'm saying is that we overvalue things like SAT in evaluating outcomes, and ignore all the vicissitudes of life. It's not a class-based issue, it's much broader than that.

This extends much more broadly in my opinion than education, though, to licensing laws, regulatory capture, patent abuse, corporate management, etc. There's a kind of "winner takes all", or "the end justifies all rationalizations for the means", assumption with regard to credit in our society, and meritocracy is just one symptom of this.

It becomes mindless at times.</comment>


Passenger-carrying drone to fly in Dubai - <AUTHOR> https://www.apnews.com/d53625cc57124bf992e934522d4c1d6e <comment><USER2> Who handles the liability when someone's leg is cut off by a propeller?</comment>


Why text messages are limited to 160 characters - <AUTHOR> http://latimesblogs.latimes.com/technology/2009/05/invented-text-messaging.html <comment><USER2> There is a technical aspect of the GSM encoding that most people doesn't know: It's just 140 bytes. In most encodings (the way computers represent text as 0 and 1) one character of the english language can be seen as a byte, this is because the 8 bits of the byte are used to represent 256 numbers that are mapped to letters, since there is less than 127 characters (leters and symbols) in the english alphabet, the GSM encoding use only 7 bits (less than a byte!) to represent the letters, and taking adventaje of those bits left it finds the way to have 20 more characters than bytes.

</comment><comment><USER3> This doesn't seem to jive with the generally accepted reasoning for the 160 character limit.

From Wikipedia:

The key idea for SMS was to use this telephony-optimized system and to transport messages on the signalling paths needed to control the telephony traffic during time periods when no signaling traffic existed. In this way unused resources in the system could be used to transport messages without additional cost. However, it was necessary to limit the length of the messages to 128 bytes (later improved to 160 characters), so that the messages could fit into the existing signaling formats. Therefore the service was named "Short Message Service"

<comment><USER4> I think that both this article and the Wikipedia article are correct.

The LA Times took the more human-centric approach to the story, which from a technical perspective was just 'how many and which characters can we cut out to maximize the 128 bytes available'. It also highlights the person (or the person who lead the team of people) who actually extended the SMS control channel to include text messages.

I think that overall the story told by the LA Times is probably a lot more interesting to its readers than the tech behind it.

</comment></comment><comment><USER5> This article makes me think back of my first venture I started with a friend of mine during university. We developed a j2me app which compressed the sms and allowed you to write roughly 400 characters within one sms while still only paying for one. Learned a lot on the way and will always think back of it as being my most exciting "course" at uni (In fact I'm thinking on how to revive it these days, but still very unsure).

</comment><comment><USER6> About who and why, back in 1985. Didn't know someone had actually 'tested' the message length.</comment>


Show HN: Docker Cheat Sheet - <AUTHOR> https://medium.com/@eon01/dockercheatsheet-9730ce03630d <comment><USER2> Docker is a reasonably useful tool but its interface is _terrible_ , full of confusingly named features and inexplicit cross-domain concerns. One can't help but think that such articles are merely a reaction to this horrible reality.

 _Documentation is an admission of failure._ \- Eric S. Raymond, The Art of Unix Usability (2004)

 _I came to the conclusion that the designer of a new system must not only be the implementor and the first large-scale user; the designer should also write the first user manual._ \- Donald E. Knuth, 'The Errors of TeX' (1989)</comment>


Ask HN: Is a Chromebook one of the "safest" laptops to use? - <AUTHOR>

This is assuming that one would solely use an external HDD, and not cloud storage. Although, one would still have a Google account. However, an individual could just browse as guest at all times.<p>This is not taking into account using Tor. <comment><USER2> What do you mean by "safe"? Data confidentiality? Freedom from malware? Something else?

Are you planning on running this chromebook normally, or in developer mode (perhaps installing crouton or similar)?

<comment><AUTHOR> Good question.

Data confidentiality and freedom from malware and other exploits. I think running it normally would be safer.</comment></comment>


Decentralized Hacker News - <AUTHOR> Do we have a decentralized hacker news ?
Something like hacker news, where users can post only after they spend a hacker coin.
- For posting require a hacker coin.
- Challenge/wrestle the validity of post by staking some amount of token.
- Whoever wins the argument takes the opponents token.
- There can be a karma component as well, where in the bad actors need to pay 1.5x amount of token if they did a bad karma last time.
PS : Not a fan of everything decentralization. This post was just a thought and so decided to post here. <comment><USER2> That's one of the problems I have with this crypto stuff.

There is no problem with HN - it's one of the best place on the net, but hey let's imagine a solution with crypto. A solution to what exactly ? There is no problem to begin with. Just like with 99.999% of stuff that crypto is supposed to solve.

I know it's just a thought exercise as you posted, so no offense, but it actually greatly illustrate the state of crypto applications (in my opinion)

<comment><USER3> A while back I did a design for a fully distributed discussion board, kinda like Reddit but with no central host that can be controlled and must be funded by a single entity or group.

It was heavily based on the principles developed for the old USENET news network and designed to work around the problems discovered by users of that system.

I found that cryptography was a necessary component of the distributed system - it's the only clean way to solve a host of problems associated with distributed discussion boards if you want to avoid things like censorship and special interests controlling discussion.

For example allowing the moderators of a group to moderate and remove spam posts and e.g. hate speech without making that mechanism vulnerable to spoofed article cancellations is tricky. The simplest way to handle the issue was to use a public key crypto system to package moderation commands. Moderation commands to edit/delete articles are sent alongside an encrypted hash for the command. The command is only valid if the public key for the moderator decrypts the auth packet and the hash matches the command text.

Crypto is also great for things like non-repudiation and reputation systems, both of which are important for a discussion system application.

By the way, there IS a problem with HN... several, actually, depending on your view of what's desirable in a site like this. It's not terribly scalable, it's rather biased toward a particular locality's view of the world, and like many such sites everyone is effectively anonymous.

The problem with HN that a distributed system is required to address is that HN belongs to a private company that has motivations based on its own interests instead of the good of the public or promotion of free speech.

HN can be controlled, edited, is in a legal jurisdiction that allows a corrupt government to obtain control of it or otherwise interfere with it, and in general suffers from all the problems of a centralized discussion board.

<comment><USER4> This is totally valid; I think the complaint was really with modeling a solution to a non-problem with a cryptocurrency, specifically.

</comment></comment></comment><comment><USER5> > \- Challenge/wrestle the validity of post by staking some amount of token.

> \- Whoever wins the argument takes the opponents token.

Hacker News isn't fight club, not all posts and comments are arguments seeking refutation, and there isn't a single objective "winner" or "loser" in every discussion, nor a means to judge which is which. The people who tend to see every comment as an opportunity to "score points" tend to be the worst sort for a community... attaching an economy and gamifying that would only incentivize point scoring, gambling and rules lawyering over healthy or insightful dialogue.

> \- There can be a karma component as well, where in the bad actors need to > pay 1.5x amount of token if they did a bad karma last time.

So I can get some bot accounts and just mass downvote or flag anyone I disagree with to make it all but impossible for them to participate in the future? Good to know, I guess.

<comment><AUTHOR> 1\. So lets say even if an actor is trying to bring down a 'normal/good' post by staking token against it, it is eventually the one staking the token who will loose. The jury members will be there to ensure that.

2\. Karma component will only kick in, once the user has been identified as a bad actor by a jury. So you will never be able to bring bot accounts and just mass downvote. Good to know, I guess :)

<comment><USER5> There's a "jury" too?

A decentralized system that depends on a central source of authority? Who are the jury members? How are they selected, and by whom? How are they held accountable for their actions? How are their biases accounted for? How do we know they're not in collusion with the mods or other users?

>Karma component will only kick in, once the user has been identified as a bad actor by a jury. So you will never be able to bring bot accounts and just mass downvote.

So my downvotes don't count when the jury likes the person I'm voting against?

</comment></comment></comment><comment><USER6> Much of the value of HN, apart from the community, derives also from the subtle but firm moderation. I am not sure how that would work on a decentralized system.

<comment><AUTHOR> Agree. Here is how I was thinking.

\- For posting require a hacker coin. \- Challenge/wrestle the validity of post by staking some amount of token. \- Whoever wins the argument takes the opponents token. \- There can be a karma component as well, where in the bad actors need to pay 1.5x amount of token if they did a bad karma last time.

<comment><USER7> Why would I use this over the original, iconic HN run by Ycombinator?

<comment><AUTHOR> All iconic centralized systems have points of failure. Why do many people feel insecure or powerless by facebook ? It was iconic in its time !

PS : I am not of any extreme opinion that everything should be decentralized. This post was just a thought and so decided to post here.

<comment><USER8> This is getting crazy. First Google, now Hacker News, Wtf ??

</comment></comment></comment></comment></comment><comment><USER9> this can easily be abused for monetary advantage.

Also, How do you determine who won the argument? How will the Jury decide the winner? this is all subjective

Winner for traditional debates between two individuals can be decided on quite simply. Whereas, for this scenario, the person staking the argument will have to defend against the whole population trying to bring it down. It won't be a "healthy" competition by any means.

</comment><comment><USER10> I think there are a few implicit assumptions in your post that could be examined for a better proposal.

1\. Consensus of what is valid doesn't require a tradable and fungible token so adding that game element is not required for decentralization (and I suspect would decrease the value of the service to increase the value of the game, something people are increasingly complaining about)

2\. Most posts on Hacker News are regarding trading information, which is a not a zero sum game, unlike the game mechanics you are proposing. Both sides can be right.

</comment><comment><USER11> Why would a place like HN where we exchange ideas and stories for free need to be walled off behind some crypto type system?

I see no value in that.

</comment><comment><USER12> You're describing stackoverflow answers

</comment><comment><USER13> > Something like hacker news, where users can post only after they spend a > hacker coin.

You don't need the service to be decentralised to achieve this. (Or the later points) There are many hn clones - just add payment to one.

What's the actual motivation for the decentralised part?

<comment><AUTHOR> Just adding payments (centralized) will result in favoring of some groups/content over other for monetary benefits for instance.

</comment></comment><comment><USER14> I don't think that this is the problem that your solution is looking for.

</comment><comment><USER15> Experiments are nice, but the practical usually blows up for unknown reasons. There's no point to change the whole site when it would mean most readers getting lost or turned off.

</comment><comment><AUTHOR> Just realised someone downvoted my comment without any argument. Proves the point that we need a decentralized hacker news.

<comment><USER16> Why couldn't such a system be implemented in a centralized manner?

<comment><AUTHOR> If a centralized token is added, then this central authority has incentives in increasing the amount of tokens for staking because ultimately the amount collected will be going into their pockets. Checkout what upwork is doing with paid tokens/connects.

Additionally this can also favor certain thoughts/groups by the central authority. ( The jury itself will be selected/hired by the central authority. ). Large number of posts get removed from social networks, because they pertain to certain thought or are against some govt.

<comment><USER16> One of the things I value in HN today is the top-level moderation. Are you saying that wouldn't work anymore and this new community would operate purely on self-moderation instead?

<comment><AUTHOR> Yeah, but that's just a thought. Have a look at Kleros [https://blog.kleros.io/become-a-juror-blockchain-dispute- res...](https://blog.kleros.io/become-a-juror-blockchain-dispute-resolution- on-ethereum/), they are building a "Dispute Resolution Layer". Something on these lines should work, I think.</comment></comment></comment></comment></comment>


Should I do my startup's taxes myself? - <AUTHOR>

I need some help from another bootstrapper in the HN community. I'm moments away from opening Turbotax Corp. (which cost me about $130). Does it make sense for me to a)do my own corp taxes b)use Turbotax.<p>A bit of background. I run a bootstrapped startup that is still pre-launch - yet profitable. <comment><USER2> I'd give it a go with TurboTax and then have an accountant review your tax return. He may help you find some hidden deductions under an obscure rule. By presenting the accountant with a preliminary return and a decent set of books, you should be able to keep his costs down.

Depending on your potential tax liability, consulting with your accountant may be more or less important, but it's difficult to know with such limited information. There would be penalties/interest for any unpaid tax liability, but the amounts aren't usually significant if you're dealing with small numbers.

Good luck!

</comment><comment><USER3> I've had a CPA and a bookkeeper doing my personal and corporate taxes while we were a profitable IT consulting firm and while the company was quiescent. I sleep so much better at night knowing the books and the taxes are done right, and having someone else around to keep an eye on them.

Yes, it costs more in real money than doing it yourself. The value of the peace of mind outweighs the cost for me.</comment>


Scrabble rule change allows use of 'OK' - <AUTHOR> https://www.theguardian.com/books/2019/may/02/scrabble-change-of-mindset-allows-use-of-ok <comment><USER2> I've posted this before but in my family we play serious Scrabble but with house rules that improve the game.

Rule 1: On your turn, but before playing your word, any letter in your hand may be swapped with any letter on the board, as long as the swap makes a valid word (some people already do this with blanks, we do it with any letter). Swap one letter at a time, as many times as you like. No points are scored for swaps, just for playing your word.

Rule 2: Dictionary may be consulted at any time to look up a specific word - however you cannot "leaf" or browse through it. Dictionary priority goes to whoever's turn it is.

The net result of this variation is that

a) the board remains MUCH more open the whole game - there are many more places to play, and the words played are more likely to be bingos or longer words, which in turn open the baord up even more. Often under official rules you get three or four letter words that just close down the future play possibilities.

b) high-point letters which usually are "luck of the draw" like Q and Z, now become skillful, since they will be reused by many players throughout the game

c) turns can take 5-10 minutes at a time :)

Source: my grandmother, who played these rules with the inventor of Scrabble back in college, before he had sold the game for mass distribution (they changed his rules to simplify them)

<comment><USER3> _"the board remains MUCH more open the whole game"_

I think that's a sign of suboptimal play. The goal isn't to score as many points as possible, it's to score more points than your opponent. Opening up a line towards a triple-later or even triple-word square only is worth it if your word scores really high.

Also, there often are high-scoring moves that 'weave' new words inside the existing grid. An extreme example is adding the o's in an existing grid of x'es:

       xxxxx
       ooxoox
         xxxxx
            x

(That's one reason competitive players have to know the full sets of two- and three letter words)

Even if such a move scores 20-ish points less than your points-wise optimal move, it may be the better choice.

<comment> frosted-flakes Unless you're playing competitively, the goal is also to have fun, and games are much more enjoyable when there's room to expand and you're not forced to place sub-optimal words.

<comment><USER4> The goal in Scrabble is to crush your friends and hear their lamentations as I get double words scores while blocking their potential expansions. It is not this fun thing that people keep talking about.

</comment></comment></comment></comment><comment><USER5> This promises to causes a big shakeup of the Scrabble meta, two letter words are the lifeblood of high-level scrabble play and `K` is a juicy, juicy letter (points wise) to have an extra 2 letter word for.

<comment><USER6> Indeed. I wonder if Words with Friends (et al) will quickly follow suit?

</comment></comment><comment><USER7> This is huge. Two letter words are very important in Scrabble for exploiting double use of double/triple letter/word scores. K is a medium-scoring letter so being able to have a two-letter word with it in makes quite a difference.

</comment><comment><USER8> playing a lot of scrabble -- our regular play includes a list of two-letter words on paper, in pencil, nearby to settle disputes (not visible during play). The arguments get heated ! .. (our list is smaller than the official list of two letter words, based on mutual agreement of real-world use). Personal opinion is that the official list is already too broad, and makes the play "muddy." Dictionary exploration is nerd-fun! We use a 1950s Webster's Unabridged English (which webster? have to check) and a 1980s Oxford American- English; both have their quirks ! happy SCRABBLE™

<comment><USER9> > the regular players have a list of two-letter words on paper, in pencil, at > hand.

No, this is against the rules. You know what we call a list of words? A dictionary. You aren't allowed to have those open until a word gets challenged. A decade ago I had all the two letter words in the Scrabble dictionary memorized, I doubt I'd still be able to spit them all out.

<comment><USER10> OP said it wasn't visible during play, only as a quick reference when resolving disputes -- quicker than hunting through a full-size dictionary.

> No, this is against the rules.

It wasn't, but even if it was, that's only the official rules. We can choose to play by different rules.

<comment><USER9> I'm pretty sure he edited that comment without noting it, the current text doesn't match what I quoted. I do think I misread his intent, but I don't think he originally said that it was just for resolving disputes or specified that it wasn't visible during play. You can see other comments reacting in line with my original interpretation, too.

</comment></comment></comment></comment><comment><USER11> Next: KO

<comment><USER12> KO is already a valid word in international (English language) tournament play.

Personally, I am sad about this. Serious scrabble play is largely about rack management - i.e. trying to get a set of tiles that you can play all at once for a 50 point bonus (bingo). That means dumping tiles that make it harder to score a bingo (duplicates, difficult letters) while taking into consideration the likelihood of drawing better tiles given what's been played and what letters your opponent is dumping (signalling what's in their rack). Most turns are about maximizing the points from non-bingos while putting together a good rack, and that frequently means playing words parallel to what's already on the board to double-up on a premium tile.

The 2006 OSPD addition of "ZA" and "QI" really changed the game, and not in a good way. Q-sticks (sticking your opponent with an unplayable Q) were a staple of end-game play, especially but are now basically obsolete.

OK rankles especially as an initialism. There will be (very nerdy) riots if a 2 letter 'V' word is ever added.

<comment><USER13> I'm unfamiliar - do common noun acronyms (like scuba) with more common usage than their full-fledged counterparts get in?

If so, I could see UV being added.

<comment><USER13> Edit: just kidding, KO is in, and a quick search says scuba is in as well. Yeah, I'm very surprised that UV is not.

<comment> T-hawk The general rule is, if the letters are pronounced phoenetically together as a word, it counts. That's why Scuba and Laser are in. It's the difference between AWOL (in) and MIA (not).

OK was never accepted before because it's not said as "ock". UV isn't pronounced "uhv" so should also be excluded. I guess now the distinguishing feature between those cases is that UV is an initialism while OK isn't. I can't think of any other example like OK, a word that is not an initialism and is said by naming each letter rather than pronouncing them phonetically.

Ko is in for being a (loan)word in its own right, not as the two-letter abbreviation for "knockout". [https://en.wikipedia.org/wiki/Ko_fight](https://en.wikipedia.org/wiki/Ko_fight)

</comment></comment></comment></comment></comment><comment><USER14> Ok

<comment><USER15> GG

</comment></comment><comment><USER16> That seems okay to me.

</comment><comment><USER17> The addition of ze (gender-neutral pronoun) is even better than OK.

<comment><USER18> (tangent to scrabble per se)

I like the idea of "ze" (gender-neutral pronoun), but this is the first I've come across it. Hopefully it'll catch on as IMHO it's a big improvement over alternatives like "they".

While on the topic of "missing" words, when will our language finally get something reasonable for "you (plural)"?? Extant "y'all" (southern) and "yous" (NJ) are not cutting it!

<comment><USER19> Y'all is often singular. Y'alls and All y'alls are plural.

There's also youse, seen in Irish english. (at least in the Dublin dialect, can't say I've heard it much in the north)

<comment><USER20> 'Ye' is also used in some parts of Ireland (and was used in archaic English).

<comment><USER19> Yeah, definitely see that (mainly from a Donegal speaker), but I think it's more an indeterminate number. "How're ye getting on" is pretty common in verbal and informal written forms, directly to one person.

</comment></comment></comment></comment></comment><comment><USER21> Blasphemy!</comment>


CRISPR Reverses Huntington's Disease in Mice - <AUTHOR> http://www.genengnews.com/gen-news-highlights/crispr-reverses-huntingtons-disease-in-mice/81254532 <comment><USER2> CRISPR is one of those technologies that will either result in huge quality of life improvements or destruction of humanity.

<comment><USER3> I think it'll be both. First huge life improvements, then someone will mess up..

</comment></comment><comment><USER4> Are there any global statistics of scientific research fields, e.g. how many people are working on specific problems like this one?</comment>


Palmissano on Google World Domination: "No." - <AUTHOR> http://searchengineland.com/ibm-ceo-on-googles-world-domination-no-32472

<comment><USER2> Hmmmm. Palmissano says:

"Is Google going to become the computing platform for the enterprise? Is a bank going to run itself on Google? Is an airline going to run itself on Google? Is IBM going to run its supply chain on Google? Is Bharti Wireless going to run themselves on Google? Is the banking system of China that we've built going to be on Google? Is the Russian Central Bank [network] that we're building going to be on Google? No."

Problem for this argument is that many US state governments already have "gone Google":

[http://arnoldit.com/wordpress/2009/12/26/mr-google-woos- stat...](http://arnoldit.com/wordpress/2009/12/26/mr-google-woos-state- governments)

I don't see how any of the industries Palmissano mentions (banking, airlines) are more mission critical than state government, which is involved with firefighting, police work, healthcare, public services, etc.

</comment><comment><USER3> The arrogance of his comment is what will bring down IBM in the end.</comment>


How to be right 90% of the time, and why I'd rather be wrong (2007) - <AUTHOR> http://paulbuchheit.blogspot.com/2007/03/how-to-be-right-90-of-time-and-why-id.html <comment><USER2> I think your argument fails with the assumption that not starting a business gives leaves you with nothing. Starting and failing 80% of the time does not net you with 0. The opportunity cost of the time you spent on failed ventures is much greater than 0. Therefore, there is some risk inherent in starting a new business.

That being said, ever reward has a commensurate amount of risk. Putting yourself out there could result in you creating something great!

</comment><comment><USER3> Following Paul's logic, it's vastly better to be an investor than an entrepreneur. The former can be wrong 80%, but the latter must be 100% right.

<comment><USER4> The entrepreneur doesn't have to be right 100% of the time. Granted being wrong once could ruin you financially and cost you a few years in opportunity cost, but that doesn't prevent you from trying again - maybe a year or two down the road if need be.

I've been wrong 3 times now but I'm still up at bat swinging. I'm also guessing my batting avg is getting better with each subsequent swing.

</comment></comment><comment><USER5> (2007)</comment>


Exxon Might Be in Trouble Over Climate Change - <AUTHOR> http://www.bloombergview.com/articles/2015-11-06/exxon-might-be-in-trouble-over-climate-change <comment><USER2> First, I agree that we are driving the cause behind the recent climate change issue.

However, I'm not quite sure how they can prove Exxon lied about this if climate change itself is something that can't be proven easily as true in the court of law.

It has a majority agreement among the scientific community but people are allowed to disagree about it outside of that community and in the courts.

If the climate change can be proven as a legal fact 100% all the way, then you can say Exxon intentionally lied but Exxon can just say it believes that and get away with it as their protected right.

As long as we continue to proclaim legally that companies are "people with rights", than we have no rights to change how they can speak or "lie" to people.</comment>


Ask HN: Where to get graduate school advice? - <AUTHOR> Hi, I'm looking to pursue a masters degree in the near future. Nobody in my circle has a masters degree so I'm sort of venturing into new territory here. I'm looking for someone to look over my resume, see where I could reasonably get in, advice on how to pay for it, tell me what my job prospects will actually be, etc. My undergrad wasn't pristine so I'm basically looking for standalone academic advising - is there a service like this? I've looked online for a business like this but my google-fu is failing me. <comment><USER2> Write down a list of the grad schools in your geographic area. Read up on their websites about the programs you're interested in to learn their tuition, graduation rates, job placements rates, and salary information.

Then go meet alumni of these programs. I've done it several times myself. They'll be happy to talk to you.

You can find these alumni by searching for them on LinkedIn and then emailing them. Checkout this article to learn how to get their advice: [http://www.climbuptheladder.com/networking-more-than- linkedi...](http://www.climbuptheladder.com/networking-more-than-linkedin/).

</comment><comment><USER3> Many grad schools publish post graduation job and salary prospects, so I'd start with that. Many also publish average GPA/GRE scores, so look at those to get an idea of where you stand.

Because the job market is being saturated with masters degree holders, it's important that you don't get a potentially expensive degree from a low ranked school, and if you do go to a lower ranked school, to make sure your degree is in a high demand field.

Masters degrees can be very rewarding, but you need to be aware that graduate school brand will strongly determine the quality of your job prospects post graduation.</comment>


MasterCard forces Paxum to drop Bitcoin illegally - <AUTHOR> http://www.betabeat.com/2012/02/13/mastercard-and-banking-partners-force-paxum-to-drop-bitcoin-due-to-potential-risk/

<comment><USER2> It doesn't seem to be illegal, unless someone is alleging coercion or conspiracy -- which is not in the article.

</comment><comment><USER3> The headline and article have been corrected: it was actually Paxum's banking partners, not Mastercard, who saw BTC as risky and forced the change.</comment>


Home College: Hire a Personal Quarantine Professor - <AUTHOR> https://medium.com/@hrobbins01/home-college-or-why-not-hire-a-personal-quarantine-professor-11a6cfaec46c <comment><AUTHOR> It may be the idea is too early!</comment>


Show HN: List of Hiring Freezes in Europe - <AUTHOR> https://www.cvandme.com/ <comment><AUTHOR> \- Focus: software developers in Germany

\- Hope this can be helpful to anyone who was laid off and needs to apply for a new job

\- The idea is give & take - roughly 1000 user entries so far</comment>


Will Swift also replace Applescript? - <AUTHOR>

<comment><USER2> No. Just… no.

They are not at all the same thing, or having the same scope.

In fact, swift will not even replace Objective-C, but will live side by side.</comment>


How To Listen To The Radio Using Plants - <AUTHOR> http://www.youtube.com/watch?v=ADZiPOUfzns

<comment><USER2> Gives new meaning to the term "amplitude modulation".

Commenter Roei Dahan got the gist.</comment>


The Corporation - <AUTHOR> http://www.trueactivist.com/the-corporation/

<comment><USER2> This tried to download something as soon as I visited the page.</comment>


Why ContentEditable is Terrible (2014) - <AUTHOR> https://medium.com/medium-eng/why-contenteditable-is-terrible-122d8a40e480#.mqvm5uq1o <comment><USER2> My business depends heavily on rich HTML editing ([https://qwilr.com](https://qwilr.com)) - and I can't begin to explain how much time and energy and engineering resource we've poured into trying to improve that experience, and make it reliable across browsers.

We had an enormous leg up in that effort - the guy who built the Google Wave editor helped us design and build the core of our editor; even so, its been this massive thorn in our side. Its been months and we still haven't gotten our custom editor out into production for all users (just a beta testing subset at this point).

I recognise of course the myriad competing forces for engineering time on the browser vendors ("implement X new shiny API!") - but O how I wish they would agree upon / build a rock solid content-editable experience.

#totally-selfishly-motivated-whining-complete.

</comment><comment><USER3> I don't accepts axiom 1 as valid.

      1. The mapping between DOM content and Visible content should be well-behaved.

I don't see why the same edit, applied to two documents with visually identical renderings, should again produce two identical renders.

As a simple example, take document (a) consisting of the words 'an axiom' styled white on a white background, and document (b) an empty document with default styling of black text on a white background. Both would appear blank.

Now apply an edit, say inserting the text 'a fallacy' into both documents. After the edit, document (a) can be expected to remain blank while document (b) can be expected to show 'a fallacy'.

<comment><USER4> That's not the same edit. In one case, you're appending to the document. In the other, you're appending to a child element. However, appending "a fallacy" to the document in both cases would produce different results due to text positioning.

I think if you want #1, you need an isomorphism between documents and their appearance. This article only asks for a homomorphism, where different documents are allowed to produce the same result.

</comment></comment><comment><USER5> Beautiful description.

Marijn Haverbeke has been writing some great material about his experiences creating ProseMirror [1]. I wonder how the two systems compare.

[1] [http://prosemirror.net/](http://prosemirror.net/)

[2] [http://marijnhaverbeke.nl/blog/collaborative- editing.html](http://marijnhaverbeke.nl/blog/collaborative-editing.html)

</comment><comment><USER6> With the Range and Selection APIs, contenteditable is almost not necessary anymore. It still requires a ton of work on top of them to build a decent editor, but it should be mostly possible now at least.

</comment><comment><USER7> I spent half a year reimplementing what should be a native browser behavior, and it is currently used in production at a company with 100k+ users.

[https://github.com/amark/monotype](https://github.com/amark/monotype)

It solves some enormous headaches, yet is NOT an editor, but a replacement to selection and range APIs.

</comment><comment><USER8> mobiledoc sounds like an open source implementation of some of these ideas: [https://github.com/bustlelabs/mobiledoc- kit](https://github.com/bustlelabs/mobiledoc-kit)

<comment><USER9> That looks nice, but how can I use it?

Is there a .js file I can drop somewhere, or can I use npm+browserify to include it as a module?

<comment><USER10> Matt here, one of the folks working on Mobiledoc and the related editor. This blog post definitely served as early inspiration for our work. I dare to say we do a number of things better than medium now.

Mobiledc-kit is on npm as amd and es6. I believe also as CommonJS for browserify, but open an issue if it isn't.

If you use Ember, this add-on provides a more complete UI:

[https://github.com/bustlelabs/ember-mobiledoc- editor](https://github.com/bustlelabs/ember-mobiledoc-editor)</comment></comment></comment>


Disenfranchised: Why Are Americans Still Buying Into the Franchise Dream? - <AUTHOR> http://www.psmag.com/navigation/business-economics/disenfranchised-fast-food-workers-quiznos-73967/

<comment><USER2> This really hits home, having grown up working at a franchise. We were acquaintances with another Mcdonald's franchisee who got equally screwed by corporate when they convinced him to spend a quarter of a million dollars renovating his store, which happened to be located in a terrible neighborhood. They also asked him to make it open 24 hours a day, 7 days a week. As a franchisee, he was not able to tell Mcdonald's corporate no, and sure enough a year later he was broke, having spent all that money and seen no return. He hung himself shortly thereafter.

</comment><comment><USER3> Interesting article. I'm kinda fascinated by the hidden life of small storefront businesses.

There was a little cafe that I used to patronize on the weekend because it about the only place within walking distance that I could get a decent cup of coffee.

When I first started going there, I would find myself worrying over the fate of the place, as it never seemed to be busy enough and I really wanted it to succeed. Then, after about a year, when it seemed it had just gotten over the hump and was regularly busy and had amassed some positive reviews on Yelp, it closed up all of the sudden.

I ran into one of the workers there at another nearby restaurant a few weeks later and asked him what happened. He said the sheriff had come by a couple times for non-payment of rent or something. Finally, one afternoon, deputies came in, shut the place down, and put up an eviction notice. While they were still open for business serving customers.

Apparently the owners, a chef who seemed to always be working there and his partner who I'd often see in there with his son, just disappeared into the night, without paying any of the staff for the last three weeks they worked there.

</comment><comment><USER4> This puts my old boss in a new light. It gives a reason as to why he was running two brands of franchises (Hardee's and Quiznos, how ironic), along with owning who knows how many rental houses. It also explains why everything was broken, and if it wasn't, shitty.</comment>


MongoDB Performance & Durability - <AUTHOR> http://www.mikealrogers.com/2010/07/mongodb-performance-durability/

<comment><USER2> I've tried to post this as a comment on the blog, but it's not showing up (moderated?):

\</comment><comment>-----

Full disclosure: I work for 10gen.

You strategically posted this when my air conditioning was broken, so here are a few thoughts before I go find somewhere cooler. Since CouchDB is "not a competitor" to MongoDB, it's nice of you to put all this time into a public service.

> MongoDB, by default, doesn't actually have a response for writes.

Whoopsy, got your emphasis wrong there. We did this to make MongoDB look good in stupid benchmarks ([http://www.snailinaturtleneck.com/blog/2009/06/29/couchdb- vs...](http://www.snailinaturtleneck.com/blog/2009/06/29/couchdb-vs-mongodb- benchmark/)).

Seriously, though, this "unchecked" type of write is just supposed to be for stuff like analytics or sensor data, when you're getting a zillion a second and don't really care some get lost if the server crashes. You can do an insert that not only waits for a database response, but waits for N slaves (user configurable) to have replicated that insert. Note that this is very similar to Cassandra's "write to multiple nodes" promise. You can also fsync after every write.

> MongoDB writes to a mem-mapped file and lets the kernel fsync it whenever > > the kernel feels like it.

fsyncs are configurable. You can fsync once a second, never, or after every single insert, remove, and update if you wish.

> When you look at MongoDB more critically I don't see how you could actually > > justify using it for anything resembling the traditional role of a > database.

This is because you assume you'll run it on single server. MongoDB's documentation clearly, repeatedly, and earnestly tells people to run MongoDB on multiple servers.

Also, as another commenter mentioned, full single-server durability is scheduled for the fall.

> Stories like this (<http://www.korokithakis.net/node/119>) are dubious not > > because they expose a few bugs in MongoDB but because they show inherent > > architectural problems you cannot overcome long term without something > > append-only.

Stories "like this" show that MongoDB doesn't work for everyone, particularly people who give no specifics about their architecture, setup, what happened, or anything else. Isn't it irritating how people will write, "MongoDB lost my data" or "CouchDB is really slow" and provide no specifics?

That's not to say that things never go wrong, MongoDB is definitely not perfect and has lots of room for improvement. I hope that users with questions and problems will contact us on the list, our wiki, the bug tracker, or IRC (or, heck, write a snarky blog post). Anything to contact the community and let us try to help. I wish every person who tried MongoDB had a great experience with it.

Lots of users, hopefully most, love MongoDB and are using it happily and successfully in production.

<comment><USER3> "This is because you assume you'll run it on single server. MongoDB's documentation clearly, repeatedly, and earnestly tells people to run MongoDB on multiple servers."

Err, what?

I'm using MongoDB in production and I've looked at your documentation a bunch. After spending days with your docs open in a browser tab I can't say that it was especially clear on this point.

Perhaps I'm particularly ignorant, but I'd wager that not many other developers know that multiple MongoDB servers are currently required to achieve reasonably acceptable durability.

<comment><USER2> We really, really want people to know they should run on multiple servers. Do you have any suggestions on making it clearer? Where did you look for information about running it in production (so I can add stuff about multiple servers to that page)?

<comment><USER3> Thanks for being open to suggestions. Maybe on the documentation homepage? <http://www.mongodb.org/display/DOCS/Home>

<comment><USER2> I'm reluctant to put such technical info on the documentation homepage, but I've updated it to very clearly point people to Production Notes. How does it look now?

</comment></comment></comment></comment></comment><comment><USER4> Ok, so the standard response seems to be "single server durability" isn't supported, but replication makes up for that.

How can this be? If no single server guarantees durability of the writes, how can a cluster of those types of machines suddenly cause those writes to be durable? Maybe it's a pedantic argument, but it seems to me that semantically speaking you are simply relying upon luck that your replicated nodes don't become corrupt or die for some systemtic reason.

The fact that there is not a replayable, append-only transaction log says to me that no matter what you build on top of it, it will never by definition be durable because the whole cannot be greater than the sum of its parts in this case.

<comment><USER5> They should say that replication makes up for it _under the assumption of uncorrelated failures_. As you point out, some people may agree with that assumption and some may not.

<comment><USER6> You're right. I've had a whole datacenter lose power. I am definitely not comfortable with assuming that multiple servers somehow magically makes it safe.

I think the word "durable" implies that the data is written onto a disk. I think of what they are talking about as "redundant". Redundant not- necessarily-durable data.

<comment><USER2> Writing to disk and transaction logs are nice, but they aren't magic bullets. What if a data center catches fire? More mundanely, I've heard ~6% of hard drive fail/year. Only replication can help you there.

I'd argue that durability is a sliding scale. You have to figure out how much risk you're willing to take and you cannot have a perfectly durable system.

<comment><USER7> traditionally durability isn't considered a sliding scale, it's a goal/priority which requires you to implement multiple features and fallbacks to handle everything from invalid writes, crash during write, to the data center catching on fire.

thinking about durability this way may work great for MongoDB but it isn't how durability is framed in the rest of the database world.

<comment><USER8> A) Just because something is 'traditionally' done doesn't mean its mandatory. Databases 'traditionally' spoke SQL but I don't see you dinging anyone for breaking that tradition. You've used the Appeal to Tradition fallacy (look it up on wikipedia) many times, and it add nothing to your argument.

B) Durability is an important goal at a system-wide level, but that doesn't mean it needs to be handled at the database layer. In addition to the already mentioned replication and transaction log methods, it can also be handled at the block or fs layer using snapshots, or by admins using backup tools. It can even be handled by having a different Database of Record and using Mongo as a operational store. Mongo as software is agnostic; we provide the tools, but it is up to the user or admin to make the best decisions for their technical and business interests. If another layer of the stack provides sufficient protection against data loss, it is unnecessary to pay performance costs associated with doing it in the DB layer.

</comment></comment></comment></comment></comment></comment><comment><USER9> Single server durability is coming, v1.8 in the fall. We chose to prioritize some other things before that. <http://jira.mongodb.org/browse/SERVER-980>

We've always clearly said don't build a bond trading system with it. Our philosophy is one-size-fits-all is over; use the right tool for the right problem.

Based on how I like to define the term, there is nothing in the NoSQL space that does full "ACID", including complex transactional semantics involving many objects, on many server clusters. That is ok : the perf + scale problem isn't really solvable if you don't give on something.

<comment><AUTHOR> If MongoDB doesn't have single server durability, what kind of durability does it have?

<comment><USER10> Clustered durability. You can request, per-write, "don't return until this data has been persisted to N other servers," with N chosen per-write.

So if you're running master/slave and choose N to be 1, you're durable (at the two server level). Run 5-replica sets and choose N to be 3 or 4, and you're basically guaranteed durability. One of your nodes goes down hard and bad things happen? You have four additional clones of it sitting and waiting to be copied.

This is actually _more_ durable in cases of extreme hardware failure like, say, your RAID controller going out. However, it requires that you spend more on hardware. So do several other things Mongo does, like using a lot of RAM and disk to get faster writes, so that's in keeping with a lot of their other design decisions.

It's not perfect for every project, but it's a great choice for most of the same projects where you'd use Mongo in the first place.

</comment></comment></comment><comment><USER11> There's a blog post where the MongoDB people explain why they haven't prioritised single server durability:

<http://blog.mongodb.org/post/381927266/what-about-durability>

Basically: (a) for real single server durability you need to turn off hardware buffering or have a battery-backed RAID controller to ensure your write really hit disk; (b) this won't help you if your disks fail, and this failure mode is as likely as any other; and (c) for some applications, the delay required to replay a transaction log in unacceptable--you need 100% uptime.

I am thinking though, that the fact that MongoDB writes to files at all is somewhat misleading, and that they may as well say that all your data is loaded into virtual memory. (Since they make no guarantees that the database files will be consistent except in the case of a controlled shutdown. Neither does MySQL, they point out, but I think in practice MySQL database files will be easier to recover from, since their structure is presumably more regular.)

<comment><USER12> We run MongoDB on development machines, and they're frequently shut down unexpectedly. But some our development databases take an hour or two to regenerate from scratch, so we prefer to run recovery.

In our experience, MongoDB single-node recovery is very robust. It makes no guarantees of transactional integrity _between_ objects, but in our experience the individual objects have always been recovered intact. According to the MongoDB documentation, recovery will occasionally fail to rebuild objects that span disk pages which were flushed in an inconvenient order, but this will not prevent it from recovering other objects.

So even though MongoDB doesn't have single node durability, and you _really_ ought to run it in replicated mode, it actually manages to have a robust recovery tool.

<comment><USER6> Just a thought here… there might be a difference between a development box that's mostly idle shutting down unexpectedly and a production server that's under heavy load, maybe starting to fall behind on some writes, freezing and crashing.

Just saying that you might want to test it in a ways that simulates an overwhelming workload, before you trust it.

</comment></comment></comment><comment><USER13> Here we go again. Getting a bit tiresome hearing about this "durability issue".

I really don't understand the problem. No, MongoDB isn't durable the same way MyISAM/InnoDB is with MySQL.

But I think that is clear as day, certainly no news to me when choosing MongoDB.

Been running it in production for 3 months, working fine. If it for some reason would be data loss or corruption, I wouldn't come crying to the devs. I know what risks I took when making the decision.

If the backups aren't there I can only blame myself when such event happen.

</comment><comment><USER14> Actually, I feel that these are some of the reasons that I find MongoDB to be an attractive solution for certain purposes. You can give up some facets of durability and make up for it in ease and performance. MongoDB actually fits quite well into various web apps that have a need for a secondary, non- authoritative datastore that needs to be highly available but not as reliable. Any kind of real-time stream feature would probably benefit from this. Just keep an authoritative copy of your data in your relational datastore of your choice, and asynchronously replicate data as needed to MongoDB. Since it's a non-authoritative datastore, you can denormalize it as much as you need. Works pretty well, IMHO.

</comment><comment><USER15> Posted about this months ago: [http://nosql.mypopescu.com/post/392868405/mongodb- durability...](http://nosql.mypopescu.com/post/392868405/mongodb-durability-a- tradeoff-to-be-aware-of)

I do agree durability is important, but as long as you are aware of this behavior and you consider it in your design, you may still find scenarios where the gained speed is a good trade off.

Another aspect that tends to be forgot when speaking about MongoDB is its fire-and-forget API. Combined with the behavior of automatic collection creation, innexistent data validation this may lead to "interesting" results.

<comment><USER16> I'm a big fan of MongoDB, and I think its _replicated_ durability characteristics are good enough for many classes of applications. If you could lose a minute of data and have it just be "bad" instead of "customer enraging and business threatening", then it's a very nice database system.

However--I do think the decision to make writes "fire and forget" is just a mistake. If you use abstractions like a connection pool under heavy concurrency, you can get unpredictable behavior in terms of when the data is "actually there."

For example, all in one thread:

with connection pool: do_write operation A

do other things...

with connection pool: read something, assuming A has been applied

Specifically, the fact that you get an arbitrary connection out of the pool means you cannot be sure that the database has completely processed operation A before executing your new query.

MongoDB has a "safe=" flag in their Python bindings that implements the project's official ([http://www.mongodb.org/display/DOCS/Last+Error+Commands#Last...](http://www.mongodb.org/display/DOCS/Last+Error+Commands#LastErrorCommands- UseCases)) recommendation for "it is written" consistency. It's a bit of a hack, but it calls "getLastError()" on the connection that does the write before returning from the update()/save()/insert()/delete() call. I think it's astonishing this behavior isn't the default.

In fact, I recently updated diesel's bindings to be safe=True, so getLastError() is always executed on write operations to make sure they succeeded before the call returns:

[http://github.com/jamwt/diesel/commit/95cd71d82ffc5c308060b6...](http://github.com/jamwt/diesel/commit/95cd71d82ffc5c308060b651b6d1056dd1908b45)

<comment><AUTHOR> It's not really about losing a minute of data though--the whole thing could become corrupted, and repairing it will be extremely difficult.

<comment><USER2> ...which is why you have a slave. Master corrupt? Promote the slave to master, get it its own slave.

Repairing a corrupted database, even a relational database, often takes too long for a production app.

<comment><USER17> So you run naked during the time of the master rebuild? — The only sensible solution is to run two slaves at least, IMHO. — I haven't looked, but do you promote that?

<comment><USER8> Actually, that will be a recommended config for replica sets. Most of our slides already show 3 replicas per set.

Also, most people have backups so its not really "running naked". See <http://www.mongodb.org/display/DOCS/Backups> for a few ways to backup mongodb. With LVM/EBS/ZFS or any other snapshotable filesystem, backups can be done almost instantly. With EBS you can even get an insta-slave from the snapshot.

<comment><USER7> wait, seriously?

the suggested default step 1 for MongoDB is to acquire 3 servers?

i mean, no other database suggests such a huge default configuration. even knowing that their datacenter can get hit by lightening and all a lot of large production sites don't even run with this kind of redundancy.

this seems like a pretty taxing workaround for not keeping an append-only transaction log.

<comment><USER8> No, it is _a_ suggested configuration, not _the_ suggested one. And recommending three nodes is not that uncommon for distributed systems, because you cant have a quorum with only two nodes. Some users are more concerned with handling 10s or 100s of servers than having single-server durability.

That said, for most users two servers are fine. Other users don't need any replicas at all since they do a nightly dump from a stored source into mongodb, or they just take regular backups. There are many ways to achieve system-wide durability, not all of them require the database to be durable.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Since Mikeal decided to take down the comments I've archived what I had in an open tab and put it up on s3: <http://bit.ly/diuWH8>. If anyone has a newer snapshot please let me know and I'll update.

</comment><comment><USER18> Scary.

<comment><USER10> Eh. Yes and no. The Mongo guys are very, very upfront about this. Check their web site. There are good workarounds, they just require spending a bit more on hardware.

<comment><USER7> that's kind of like saying "we told you our parachutes won't open sometimes. well, not in our conference talks or in our marketing but it's on our wiki and we blogged about it".

if you want to see a message that is clearly delivered about (lack of) durability look at memcached. nobody misunderstands memcached's durability/consistency guarantees.

-Mikeal (after a few drinks)

<comment><USER2> Actually, it's more like saying, "we HIGHLY recommend having a backup parachute" (as, I'd imagine, most skydiving instructors would).

Also, I think I've always mention it in my talks.

I'm not sure how VoltDB escaped your wrath, it's an in-memory db that claims to be durable.</comment></comment></comment></comment>


Expanding Facebook's Home in Menlo Park - <AUTHOR> https://newsroom.fb.com/news/2018/09/expanding-our-home-in-menlo-park/ <comment><USER2> This new building is beautiful and is a great addition to the otherwise plain architecture of warehouse after warehouse around that part of Menlo Park.</comment>


Famo.us - The Framework For Fast And Beautiful HTML5 Apps, - <AUTHOR> http://famo.us/

<comment><USER2> Is the email form broken? I get "Account already exists" for any email I enter.</comment>


Let's Encrypt only revoking "certificates that we are confident were replaced" - <AUTHOR> https://community.letsencrypt.org/t/2020-02-29-caa-rechecking-bug/114591/3 <comment><USER2> I had to renew certs on one of my domains. Had to use '\--force-renewal' on Ubuntu.

sudo certbot renew --force-renewal -d domain.com -d www.domain.com

[https://certbot.eff.org/docs/using.html](https://certbot.eff.org/docs/using.html)</comment>


The smallest positive integer that Google has never heard of - <AUTHOR> http://www.walkingrandomly.com/?p=157 <comment><USER2> This is interesting.</comment>


Ask HN: Will Amazon ever replace your local convenience store? - <AUTHOR> Will Amazon ever replace your local convenience store? By convenience store I am referring to:
1. your local grocery store (US urban areas call them bodegas) 2. your local independently owned gas station (Sunoco, BP, etc...) 3. your local pharmacy (CVS, Joe's Pharmacy, etc...)
Places where you can buy gas, candy, smokes, odds and ends items that you don't feel like going to a big box store.
The reason this question came up is because my friend works a job where the company he works for purchases bulk cell phone accessories from China, (cases, chargers, adaptors, cables, etc...) and sells them to convenience stores (to resell to their customers) at a markup. I wrote down in my notes "Amazon will never replace the convenience store". I hate saying the word never... Thoughts?
Edit: A word in title <comment><USER2> For me, probably not. My parents live a few hours from me. When I drive, I have to stop and get gas. Nine times out of ten, I go in and get a soda and something to snack on for the remainder of the trip.

Also - there are times that I'm craving a certain flavor of food or drink. I'll just walk across the street to my CVS and get it.

And finally, I was traveling recently by plane. I didn't have travel sizes of toiletries. Walked across the street and got them. It was a weekend trip. Didn't want to check luggage.

In all 3 cases, they are spur of the moment or "oh shit" moments.

</comment><comment><USER3> I do not believe for for a couple of reasons:

1\. Even with Prime you are looking at a two day delivery and in the world of Amazon, two day is not always two days.

2\. We are a NOW society. We are not willing to wait for something to arrive. There is a reason the stores you reference are called convenience stores. In short, people want what they want when they want it.

3\. Sometimes you NEED something now; a missing ingredient, a drink, a loaf of bread. Sometimes need overrides price.

4\. The busier we get in life the less a number of us plan ahead in order to wait for delivery of something. It is difficult, even for the planners to remember everything.

5\. Life is just that, life. It throws us curve balls and even the best laid plans often go astray. Sometimes you just have to pivot.

6\. We are creatures of habit.

7\. Not all areas are served by Amazon in a timely fashion. A large portion of the population still resides in areas that are rural without the benefit of Prime shipping, etc.

</comment><comment><USER4> 1) I hope not.

2) Not all bodegas are groceries (some are newsstands or delis), and the ones that are groceries tend to supplement rather than replacing a full-size grocery.

3) Even if I liked Amazon, it won't replace the bodega until I can get a sandwich or roll of paper towels delivered at 2am in the amount of time it takes to walk downstairs, around the corner, and back. Or until it will deliver me a stick of gum or energy bar on 30 seconds notice during the 3 block walk between the subway and the building where I'm having a meeting or date.</comment>


Show HN: Fufox.net – Dropbox without limits and 100% free - <AUTHOR> http://www.fufox.net/

<comment><USER2> Fufox provides a 100% free service. We're optimizing our cost and thus making a short profit with ads. Enough profit to ensure a 100% free service without restrictions. We only rely on advertising.

\----

I'd rather just pay for Dropbox, rather than trust your people not to misuse my data or my files.

<comment><AUTHOR> Fufox is not using your personal data for commercial purposes. We don't provide or sell any users related data to any company.

We are improving our services everyday and we hope we will convince you in the future to use our services.

<comment><USER3> While I believe your intentions are good, the track history of free companies that rely on advertising isn't all that great. Essentially, many people will read your statement and mentally append a "yet..."

</comment></comment></comment><comment><USER4> Looks good, but there's no thumbs or visual ways to identify documents. If I'm looking for a specific image in a batch, for instance.

</comment><comment><USER5> Did anyone used this service before it was shut down on 2012?</comment>


Ask HN: Studying large code bases - <AUTHOR> Hi HN,
Suppose you had to understand a large distributed system. The modules which interact together can be written in different programming languages and all expose a REST endpoint along with a documentation of what each endpoint can do.
For the simplicity of discussion lets consider these languages(Java, C++, Scala, Python and PHP). They could use a distributed database like solr, couchbase
Some of these modules can be 12factored and some with pretty bad code practices. There is no existing mechanism for monitoring but logging.
How would go into analyzing this vast system ? (Not just one at a time, elaborate your techniques)
To what degree would you trust the documentation, infrastructure, existing testing tools, environment setup tools in the process of understanding a module ?
What would you make sure you definately do NOT do?
What language specific strategy would you suggest ? (Entrypoints, configs, static analysis etc.)
Would you think of creating a mechanism for cloud debugging ?
How do you keep track of the knowledge you learn from one module and apply that as you go along ?
How do you keep your life together and still swim in so much complexity ?
Share your stack! http://stackshare.io/
How do you apply these techniques to learn, update and maintain this system?
PS: I am asking this question in general and not for an existing system. But if you would like to give an answer with some open-source project as example, that would be great. <comment><USER2> 1\. Start at the simplest subsystem, and work from there.

This is especially true when working with third-party, legacy, or undocumented code. In the absence of documentation, your only way forward is to read the source code[0]. Find the main() of the simplest/smallest module in the system, and begin tracing through the code. This could be with a debugger, print statements, or the search functionality in your editor/IDE (Find Usages and Go to Declaration in Intellij are lifesavers).

2\. Don't be afraid to break things apart.

If the simplest module in the system is overwhelmingly complex, start commenting out parts of the code. Go until you have effectively reduced it to "Hello, World", if you have to. From there, you can gradually add features back.

3\. Constantly test your assumptions.

Don't assume comments do what they say they do.

Don't assume that config flag produces the behavior the documentation claims it does.

Do take inventory of you assumptions whenever the behavior of the system contradicts your current understanding of how it works.

You should be able to back up any claims about the system with empirical evidence e.g. when I change A to B, X happens; if I change A to C, Y happens.

[0] [http://blog.codinghorror.com/learn-to-read-the-source- luke/](http://blog.codinghorror.com/learn-to-read-the-source-luke/)

<comment><AUTHOR> Intellij does a very good job for most of my programming and I use it daily.

In the process of learning a distributed system, the process of looking at the code as its documentation is not the ideal way. One could spend enormous amount of time to just understand a simple business usecase.

But then just because it takes time doesn't make it untrue.

I would rather accept a system which self documents itself with every change.

The point of breaking things is all well and good but to truly understand everything, after breaking also one needs to put the together one by one and understand their interactions so that if any one in the pool of modules fails, one knows what exactly would have caused it and how to be more resilient towards failures.

<comment><USER3> What do you use in IntelliJ to self document? I have a hard time reviewing code effectively, so I'm curious about your strategies there.

<comment><AUTHOR> I think there is some confusion here.

What i meant was applications should be self documenting, something like swagger comes to my mind.

</comment></comment></comment></comment><comment><USER4> Shell scripts!

I would write a crapload of shell scripts to start every component locally, in the foreground. Hopefully you can just pass flags to specify ports, rather than having to specify config files. (Though you can easily generate config files from shell scripts)

I use tmux, so I can have all servers up in the foreground and logging to stdout. You can arrange the windows so it's easy to get a global view.

Identify which servers are stateful and which are stateless. For the stateful ones, it's nice to be able to save and restore their state (hopefully just with cp and mv).

Then I would write some more shell scripts to poke at every port. For REST services, just use curl, and possibly some JSON/XML helpers. Stateless servers should be testable exhaustively.

Then pick some code change you want to make. Write the shell snippets to tickle that code path.

Then write some more shell scripts to rebuild every component binary from source. Make your code change, build, restart, and then test to see if it works. Look at the logs for clues.

This is basically the "dynamic" approach to debugging systems, rather than the "static" approach of staring at code. Sometimes staring at code is the right thing to do, but if as you say the sheer volume of code is too much, then figuring out the behavior as a black box -- tickling it with shell scripts -- is often a faster way to understand the system.

They should be scripts because you need to be able to repeat this process many times.

Other strategies are:

\- Understand the architecture from the build system. Don't look at the source code, look at how it's compiled. What libraries go in what binaries is a strong indicator of their function.

\- Understand the architecture from the deployment. In this case I'm suggesting to rewrite the deployment yourself with shell scripts (to a single host, your dev box). But you can also try to just look at whatever the ops/devops team does to bring up the service in a new cluster.

\- Look at any existing system tests / regression tests.

<comment><AUTHOR> I am completely with you with the idea of replicating the whole system locally with help of Vagrant and making sure it is as close to production and then start and stop stuff and observe the change

</comment></comment><comment><USER5> To understand the system start by ignoring the code.

1\. Start with all the components as black boxes.

2\. Draw the system design/connections/interfaces between them.

3\. Follow the data and uncover black boxes by reading the code.

4\. (If possible) Write tests and refactor code so that testing is possible.

</comment><comment><USER6> Try to understand the data model. Dump all the SQL schemas , diagram them if required and study them.

</comment><comment><USER7> That's a whole lot of questions, I'll attempt to answer just the primary one -- how I approach a new large code base.

For me, the absolute first thing to do is _not_ look at the codebase. I prefer to understand the system itself (ie: understand the stack and how everything fits in). IOW, understand what layers exist and how exactly are they stacked. Again _without_ looking at the codebase, rather by interacting with the system.

I do this by trying to understand the main entry points for a specific task and follow the 'request' (for lack of a better term, but it doesn't mean a http request) along the stack. In real terms what this means usually, is that I'd hit the logs and see what happens when I do something.

Next (ie: by which time I know at least the major layers), I would look at the codebase and identify sections/modules that seem like they provide the entry- points discovered above. Next, depending on the language and tools that are available, I start 'playing' around with the code.

I know this sounds a bit vague but all that I can tell you is this is what works for me and I have gotten better at it over time (ie: experience counts).

</comment><comment><USER8> How I do it is play with the system as a user first, and think of small stuff to change. It might be real features or bugfixes, but at this stage, it's often thowaways like "make that button report the current frommet count", or "add a new token to the file format", etc.. small changes that require communicating from disparate parts of the system or require touching deeply buried parts of the codebase are best. Often in a large codebase trivial changes can be quite hard to track down. The act of digging through and finding and making these changes give me an overall map of the codebase.

Fixing bugs is a great way to do this. If I'm new to a project, I will spend a few days just going through the bug backlog if I can. Half the time (at least) the bugs are not even real, no longer applicable or otherwise non-fixable, but just tracking that down is useful (and it feels good to close tickets)

Also, learning quickly what parts of the codebase you can simply ignore and treat as a black box, and where you need to change.

</comment><comment><USER9> I recently changed my job and I am trying to figure out how the product works there so here is my strategy:

1\. Knowing the actual purpose of the product(or system) is must.

2\. Using the product yourself helps a lot. This gives you end-user perspective.

3\. Reading the code in a context is far more effective. A context here could be a test case or a use case. More granular the scenario the better it is.

4\. If you are not able to understand a piece of code, revisit it later and move on. In the meantime note the input and output of "that specific" code. Many times after your move on and read other parts one starts to connect the dots.

5\. Never assume anything!

Example: I do not know much of Linux kernel so lets say I want to know when I do "fopen" in C where (& how) does the kernel make entries in its own data structures.

</comment><comment><USER10> Have a look at David Beazley's video for a real life example: [http://www.pyvideo.org/video/2645/discovering- python](http://www.pyvideo.org/video/2645/discovering-python)

<comment><AUTHOR> thanks :)

</comment></comment><comment><USER11> Even though you are asking general questions I'm going to assume your goal is to work on a large unfamiliar code base.

Go with a call tracing tool, write one yourself if there is no such tool. This will speed up your learning process tremendously compared to any other approach.

And in general, if learning feels hard - you are doing it wrong, try something different.

</comment><comment><USER12> OpenGrok has been very useful when I want to understand a new codebase. The distributed / REST aspect is going to make it harder to use code tools, though.

<comment><USER13> OpenGrok seems like a light version of DMS as I understand. It was presented at Google in 2010 [1]. It's a software analysis tool (control/data flow, copy/paste detection, ast levenstein distance), refactor and translator between several languages. IIRC they do distributed systems.

[1] [https://www.youtube.com/watch?v=C-_dw9iEzhA](https://www.youtube.com/watch?v=C-_dw9iEzhA)

</comment></comment><comment><USER14> I would trust documentation with a grain of salt. Very rarely do I find intensive and accurate documentation for distributed systems. However, documentation may be helpful for things such as stand-alone components and REST endpoints. Those would be taken with possibly 2 grains of salt.

The one thing that you would never want to do is actually read through the code line by line*. HOWEVER, let it be noted that I mean this as an initial point of insertion. As a Computer Scientist, your first step should be in attempting to ask the right questions.

Think of it like a game of 20 questions ( N questions in this case...). To do this, one of the best things I have done is to follow the process. All distributed systems attempt to solve one or several use cases. Define these use cases and then analyze the code basis from there. For example, a use case that involves a REST Endpoint can be updated your profile photo. The use case would define a point of entry (where/how to submit a new photo) and a point of submission (the REST Endpoint). From this, we can search for two components in the system that facilitate this task.

=== A good word of advice in understanding any code base is that, nine times out of 10, it is ALWAYS easier to read code once you understand its purpose. ===

> Language Specific Strategies

As for some good language specific strategies, be knowledgeable of what Paradigm the language falls into. For example, Java code tends to have a single point of entry for most cases. Whereas Javascript (as a functional language) can have several entry points (or even none at all). For functional languages, be mindful of how they are structured. Functional languages are not object-oriented by nature but they can be if implemented properly. As such, try to notice the key differences (i.e. prototyping).

> Cloud Debugging?

I would not consider it. Debugging should be a constant process of development. Not even the best developers can write perfect code from the start but with enough work and constant QA testing/Unit testing during the development process, any code base can become easily manageable for debugging. In addition, learning how to read Stack Traces can save HOURS of debugging.

> Tracking knowledge from Module to Module

Personally, I keep notes. I pretend as if I am writing an API document. Nine times out of ten, most modules take an input and provide an output after some calculation. So long as the calculation is sound, I do not worry about the calculation and only record the call to the module itself and its return. Other cases like classes can be tracked by the same notion.

> OH THE COMPLEXITY

It's a necessary evil. No one ever said being a developer was easy. And no one ever said the best things in life are free and easy. I work hard for what I do and for what I want. I love my job. I don't think I would ever consider changing careers. Sometimes the complexity does become overwhelming and its hard to handle. But if you wish to know my little secret, schedule yourself some mandatory free time. And stick to the schedule. This doesn't mean try breaking away from the computer, but just do things that help you relieve stress. Talk to a friend and have a drink or two. Developing is tough on the mind but it is an occupational hazard in the least.

> Updating/Maintenance

If it's open source, let the users dictate when the updates should happen. I believe in Agile development and trusting the users. But when it comes to updates and maintenance on a corporate system, always try and set some goals for the change. Why are you updating/performing maintenance? Is it to improve the speed/response time? Is it worth the cost of time/labor?

> GOLDEN RULE: Ask Questions. Be Skeptical and always tread carefully. We are > Developers. We are Problem Solvers. Not Problem Makers.

BG: I have 6 years of experience working with Corporate level architectures and distributed systems. And earned my BA in CS minor in Information Systems. In my time, I have worked with multiple functional, object-oriented, and web based languages. I have also worked as a Full-Stack Developer for roughly 3 years now.

<comment><AUTHOR> Thanks Stephn_R

I did not think anyone would take time to answer so many of my questions. I agree with you on lots of points you mentioned above. Regarding the documentation I usually trust it if the module or the system is new, but if its old enough, i assume its outdated, architectural drift exists and only take that as a reference of how the system was planned to be like.

This also gives a lot of use-cases to begin with and understand the control flow. Regarding test cases, integration and regression tests help a lot in finding failures but I feel more confident about them if written by the same developer as the original thought for the code change is more pure with him and the reviewer.

For knowledge tracking, I guess there is no easy way, one learns from experience and time, but it would be great if there were some great tools to capture thoughts and map them to a definite state in the application without making any change in the codebase.

I have been in my academics for 6 years doing my bachelors and masters and less than a year in my professional career. The sheer amount of stuff one needs to know about building scalable and distributed applications is just amazing and nerve-wracking at the same time and I will keep your secret in mind :)

<comment><USER14> Thank you for the kind words! It is daunting to see how much anyone would need to know in order to set up distributed systems. But it is powerful to have. And with great power comes great responsibility :)

</comment></comment></comment><comment><USER15> setup a debugger and step through common scenarios.

<comment><USER16> "debugger" in the broadest sense. I would start by intercepting the network traffic (at appropriate protocol level) and getting a feel for what is going on, and if it matches the docs.

</comment></comment><comment><USER17> Also, read this book: [http://www.amazon.com/Working-Effectively-Legacy- Michael-Fea...](http://www.amazon.com/Working-Effectively-Legacy-Michael- Feathers/dp/0131177052)

It helps a lot and teaches you how to use grep and other tools (a lot more others that I no longer remember) to search and find your way through legacy code.

</comment><comment><USER17> My regular way to go would be to go bug fixing, the more bugs you fix the more you'd be familiar with the source code, this is what most open source projects do, but code quality is better so it takes less time to get familiar with it.

Then if I don't have any bugs to fix, it would be to get very familiar with the application and read the logs on every action you do, take note of where they say they are and study and go on rabbitholes.

Whatever you do, don't try to rewrite it, they almost never work unless you have a way too much time in hand.</comment>


Mysterious $15,000 'GrayKey' Promises to Unlock iPhone X for the Feds - <AUTHOR> https://www.forbes.com/sites/thomasbrewster/2018/03/05/apple-iphone-x-graykey-hack/#3fd864d92950 <comment><USER2> Seems like this won't last long, as Apple could just spend the $30,000 to get it for themselves and then figure out what vulnerability it's exploiting.

</comment><comment><USER3> I'm surprised the price for the unlimited mode is $30,000. I would think they would want to price that at more like $100,000.

<comment><USER4> I was a little surprised at that, too, but more so, doesn't an offline mode make it potentially reverse-engineerable?</comment></comment>


The Hard Part in Becoming a Command Line Wizard - <AUTHOR> https://www.johndcook.com/blog/2019/02/18/command-line-wizard/ <comment><USER2> Time and practice help but by the time I accrued the practice I found I forgot nuances I should have known. Like egrep using a dfa for a|b|c which is five+ times faster than individual matches in a list form.</comment>


Google launches realtime search - tomh- http://mashable.com/2009/12/07/google-real-time-search/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+Mashable+(Mashable)

<comment><AUTHOR> Just fyi (since this is glossed over in the article), Bing has already had real time search for some time.

[http://arstechnica.com/microsoft/news/2009/10/hands-on- bing-...](http://arstechnica.com/microsoft/news/2009/10/hands-on-bing-beats- google-to-real-time-twitter- search.ars?utm_source=rss&utm_medium=rss&utm_campaign=rss)

</comment><comment><USER2> Well, that is predictable, from the time they bought stream from Twitter. They just want to index everything, so it's not any breaking news.

On the other hand it doesn't really feel like Google knows what they're doing. Realtime search is very different than "conventional" one, so for me it doesn't really fit together.

For example, in normal search you'd like to see stuff that has value - doesn't mean new. In realtime search you don't care about the value, you only care about it being "now". Who cares about Obama elections today.

Fitting this two kinds of data into one screen sounds tricky. Actually it's more confusing than helping. I suspect they're trying to put everything- that's-possible on the main results screen. But seriously, that's not what I want to see.

From my point of view it's a shotgun technique - let's reuse our business model with all the data we have. On the other hand I think it's not what people expect.

<comment><USER3> You know about "Latest" mode under Search Options, right? That's perhaps more the experience that you're looking for.

</comment></comment><comment><USER4> Wow, my old boss Bob Wyman just said this is what he has been spending time in Google in last 3 years after PubSub.com v1.0 had gone under.

At the other hand, I am kind of scare of Google's expansion into every field.

</comment><comment><USER5> And I didn't think Google's results page could get any more cluttered...

</comment><comment><USER6> Arg... It seems we can't escape twitter anywhere. More pointless drivel compressed into 140 characters for no apparent reason.</comment>