Show HN: Chevrotain – Fault-Tolerant JavaScript Parsing DSL - <AUTHOR> https://github.com/SAP/chevrotain <comment><USER2> I am familiar with PEG.js, which is basically the same thing, but exists for 6 years now. Does Chevrotain have any other advantages, than being about 2 times faster?

<comment><AUTHOR> Hello.

I am the author behind Chevrotain.

I would say the two major functional advantages (as already mentioned in this thread) are Error Recovery and Performance.

Error Recovery online playable demo can be found here: [http://sap.github.io/chevrotain/playground/?example=tutorial...](http://sap.github.io/chevrotain/playground/?example=tutorial%20fault%20tolerance)

Performance in the jsperf benchmark is affected by the javascript engine used. On latest chrome (V8) and thus node.js which is the most common runtime, Chevrotain is ±3 times faster in the provided jsperf benchmark. [http://jsperf.com/json-parsers-comparison/21](http://jsperf.com/json-parsers- comparison/21)

Shahar.

<comment><USER2> What "Error recovery" means in your software? You usually want the parser to accept the input when it corresponds the grammar and refuse input, when it does not.

I think that user should modify his grammar in order to accept errors (e.g. missing colon in your example). If you do it for him, then you must specify, what you mean by tolerable and intolerable errors. I think your specification may get very large and confusing.

EDIT: I just found out what you mean by "error recovery". However I still think, that user should specify accepted errors inside a grammar, so he has bigger control over it. Your "error recovery" can never be prepared to all kinds of rerrors, that user may want to recover from.

BTW. PEG.js can generate a parser "object", which is directly usable in the same JS "process". I have never seen any parser code while working with PEG.js.

BTW2. generating the parser code can also be very useful, when you don't want to distribute your grammar alongside with your app.

<comment><AUTHOR> The use case of only handling valid input is a very common one, Particularly during compiler construction.

But what about the use case of building an Editor (IDE) ? In this context it would highly beneficial to be able to handle invalid inputs as the user would still expect outline/navigation/formatting/.../ to work even when there are syntax errors.

Error Recovery algorithms are heuristics, they can never solve all the possible kinds of errors. Automatic error recovery is also not mutually exclusive with expanding the grammar to support some "tolerable" errors, Both can be used to improve the "robustness" of the grammar when fault tolerance is needed.

Also note that expanding the grammar will work best for simple common errors (missing semicolon), but what about when you need to re-sync an unknown number of tokens and unwind the parser call stack?

Also note these "heuristics" are not "mine", they are based on heuristics used in Antlr 3. Which is itself based on Academic studies in this topic: Specifically:

Josef Grosch. Efficient and comfortable error recovery in recursive descent parsers. Structured Programming, 11(3):129–140, 1990.

Rodney W. Topor. A note on error recovery in recursive descent parsers. SIGPLAN Not., 17(2):37–40, 1982.

Niklaus Wirth. Algorithms + Data Structures = Programs. Prentice Hall PTR, Upper Saddle River, NJ, USA, 1978.

</comment></comment></comment></comment><comment><USER3> This looks very polished and potentially useful.

Could you point us to examples of different grammar files.

How hard would it be to make a LaTeX parser based on Chevrotain?

<comment><AUTHOR> Thanks for the compliment.

I Still need to produce more examples (contributions are welcome :) ) There is one bigger (but incomplete example) of ECMAScript 5.1. [https://github.com/SAP/chevrotain/blob/master/examples/types...](https://github.com/SAP/chevrotain/blob/master/examples/typescript_ecma5/src/ecmascript5_parser.ts) It is written in Typescript.

About LaTex: I'm not familiar with LaTex, However if I understand correctly it is based on Tex which is not a context free language.

Meaning it can't be parsed with standard parsing tools.

See details here: [http://tex.stackexchange.com/questions/4201/is-there-a- bnf-g...](http://tex.stackexchange.com/questions/4201/is-there-a-bnf-grammar- of-the-tex-language)</comment></comment>


Google's Waymo invests in LIDAR technology, cuts costs by 90 percent - <AUTHOR> http://arstechnica.com/cars/2017/01/googles-waymo-invests-in-lidar-technology-cuts-costs-by-90-percent/ <comment><USER2> Really great article by 'The Economist' about next-gen lidar and the how later stages of driverless cars will utilize the technology and look aesthetically different from the current prototypes with the roof rigs etc.

[http://www.economist.com/news/science-and- technology/2171210...](http://www.economist.com/news/science-and- technology/21712103-new-chips-will-cut-cost-laser-scanning-breakthrough- miniaturising)</comment>


In praise of data-driven anecdotes  - <AUTHOR> http://www.bigdatarepublic.com/author.asp?section_id=2817&doc_id=257619&

<comment><USER2> Humans are pretty bad thinking scientifically, particularly in the realm of knowing what a certain probability means (witness the lotto). So providing some relatable story that illustrates the data is a great idea. I generally try and open any presentation I give with just such an anecdote.</comment>


Goodbye Print, Hello World. - <AUTHOR> http://www.thegreenpages.com.au/news/goodbye-print-hello-world/

<comment><USER2> Thanks for sharing your story. I particularly enjoyed this nugget:

 _I took the plunge and decided to spend 6 months knuckled down, learning how to code. It was initially like going back to high school and starting at the very beginning. I've slowly started 'getting the hang of it'. People often complain as industries collapse and blame the new industry that has taken dominance. When the world changes you need to step-up. The notion that I could become this 'management' entity that sat around waiting for 'the brains' to do all the real technical work just incensed me, I found it even shameful._

Best of luck on your new journey. When your attitude is "live for the journey, not the destination," then there is no way you can fail.

<comment><AUTHOR> Thanks for your kind words :)</comment></comment>


Show HN: My first weekend project, Wikihowtodo, a to-do list maker. - <AUTHOR>

Here is the link: http://www.wikihowtodo.com
I know a lot of geeks share the same dream -- build the next kick-ass todo-list/project management system.
So do I.
However, as I was quite positive that my web development skill is worse than 99% of developers' in this community, I decided to build something simple, useless but unique.
So I built this.
Basically it's a Wikihow scraper, nothing more. It gives you a place to store interesting Wikihow articles and yes, they are converted into todo lists.
I know this site is not that good, but I still need your guys' feedback.
For example, as I am a non English native speaker, you can simply put "Your English Suck!" in this post, it's already way better than silence.<p>Thanks. <comment><USER2> I just started www.ToDoWiki.com a few days ago... So we are probably competitors. That aside, I do have some suggestions, as some things didn't work as I would expect.

Front Page: I expected to be able to click on your tag cloud, or at least see some of your content without signing up.

Signup: The preference checkboxes don't align with the labels in my browser.

Add a list from wikihow: I was surprised to see a text box for entering a url rather than a list to choose from. Clicking in the text field clears the field entirely. I was expecting to be able to edit the url already there.

The list created appears to be in reversed order... ie the first steps are at the bottom.

"this list is not helpful" should be "remove list" or "delete" or something more descriptive of the task that will be done when the link is clicked, and a popup confirmation seems over protective for this, as clicking "I finished this list" does almost the same thing(remove list from active lists)

"Home" and "Profile" don't really seem to describe what I would find on those pages. "Current Lists" and "History" would be more descriptive.

I do like the random stuff box, the stuff that shows up there is quite entertaining. Also the site design is very clean looking.

Good luck!

<comment><USER2> Just one more thing... not sure if this is intentional or not, but it seems like all the user summary pages are available to be viewed by changing the user number on the profile page.

<comment><USER2> And on more... You seem to have over 1000 users in just a few days.... that's pretty impressive.

<comment><AUTHOR> Hi pontifier, thank you for your precious feedback! I don't think we are competitors, since this is just a project I made in order to learn Rails, and I see no way of monetizing it. :) I will definitely do some changes to my site.

</comment></comment></comment></comment><comment><USER3> I like the idea, however some of the things I want to do aren't on wikihow. So I would like a way to add them without assigning them to an existing wikihow list. Can you add a feature to create a custom list?

<comment><AUTHOR> Hi Tarski, thank you for your feedkback! I will try to add that feature.</comment></comment>


The principle of charity: Criticize the best interpretation of an argument - <AUTHOR> https://effectiviology.com/principle-of-charity/ <comment><USER2> I wish more people online were like this. I've basically given up on Reddit because the discussions in many of the major subs devolve very rapidly to a "you are an X, therefore your argument is junk because you are stupid/evil, here is why". Pretty much all sides do it (and all sides say they don't).

For those who've not read the article and are thinking "but what about <insert political scumbag here>", the article starts by saying you should be charitable "as long as it's reasonable" to do so. It is reasonable to assume that a political operative of almost any persuasion will attempt to bend things and miss-represent, so you should be on the look out for that and treat it accordingly.

I like the idea of the "steel man" argument, as a more effective alternative to the "straw man", you end up with a better argument that way, and are far more likely to "win" the argument than if you present something that the other person sees as BS. Even if your opponent is talking BS, the counter-argument you come up with will be more effective in countering it, a weak argument predicated on the weakest interpretation gives them wriggle-room.

I feel like the whole idea is the debate equivalent of the idea "never attribute to malice that which can be explained by incompetance". Sometimes it is malice, but usually it's just a mistake. Assuming the worst in people as the default is very isolating, and understanding that made a big difference to my state of mind as I got older.

<comment><USER3> Most of my comments on reddit are replies to borderline insensitive arguments because I believe that it is very easy sound more aggressive than intended.

Generally I found that if you explain to someone how their comment might have been out of place, or maybe they just did not consider a nicer interpretation you get a nice response back.

> "you are an X, therefore your argument is junk because you are stupid/evil, > here is why"

The problem with this type of comments is that generally people are not very good at complaining about them, or at suggesting better way to frame criticism. This is especially relevant in internet forums where too many personalities interact to be able to generalize and it is hard to gauge how much criticism is warranted.

<comment><USER2> I really applaud your efforts, I'm afraid I just ran out of energy trying to be positive on reddit. The world needs more people like you.

I do feel like it's going to be realy important to teach my kids as they grow up, how to have good conversations online,and how these sort of mediums often twist the perseption of what they say without them realising.

<comment><USER4> I think it's easier to be a jerk online so it's more prevalent here but, in my opinion, the ways in which people weasel out of their conversational responsibilities are no different than most in-person encounters of the same nature. If I care enough about the person or the cause, it might make sense to stick around and hold their hand. It does get tiresome.

</comment></comment></comment></comment><comment><USER5> The parent article reminded me of a quote from Gordon Fee, a professor of Theology, who had seen many disagreements during his career. Fee put it like this [1]:

A student is not bound to reproduce slavishly the interpretations of others, but you are bound to assess critically what you read.

Before you can say, "I disagree," you must be able to say, "I understand." It is axiomatic that before you level criticism you should be able to state an author's position in terms that he or she would find acceptable. After that, you may proceed in any of six directions:

a. Show where the author is misinformed.

b. Show where the author is uninformed.

c. Show where the author is inconsistent.

d. Show where the author's treatment is incomplete.

e. Show where the author misinterprets through faulty assumptions or procedures.

f. Show where the author makes valuable contributions to the discussion at hand.

[1] Gordon Fee, Exegesis, 3rd edition 2002 p.33

<comment><USER6> > Before you can say, "I disagree," you must be able to say, "I understand." > It is axiomatic that before you level criticism you should be able to state > an author's position in terms that he or she would find acceptable. After > that, you may proceed in any of six directions:

This assumes that the assumption of good faith is well founded. Life is too short to critically refute every single crackpot theory out there. For better or worse, if someone sufficiently damages their ethos, I will choose to not spend my time critically evaluating everything they say.

[edit]

One place where _my_ argument does not apply is when large numbers of people hold a particular opinion. If e.g. 80% of Republicans or 80% of Democrats hold a view, we are talking about 1/3 of the population of the US. Understanding _why_ they hold that view, no matter how non-sensical it may seem is vital to understanding the world we live in.

It is insufficient to just say "well then _insert large group here_ are all idiots" because that is clearly not true.I have two family members who each got perfect SAT scores and one is about as hippy-left as you can get and the other is a card-carrying republican and Trump supporter. They are (in my opinion) both wrong about a lot of things, but dismissing them as idiots is not possible.

<comment><USER7> > Life is too short to critically refute every single crackpot theory out > there.

In this case, rather than claiming you disagree (which should imply understanding), you can just say you don't know enough about the issue to comment on it.

The spirit of the above argument is that, if you're going to vehemently disagree or argue with someone, you should understand— not that you need to understand every issue, nor agree or disagree with every issue.

<comment><USER8> > In this case, rather than claiming you disagree (which should imply > understanding), you can just say you don't know enough about the issue to > comment on it.

aidenn0 is making a subtlety different point: this form of rational argument depends on good-faith. If you think that has been violated, you would not say "I don't know enough about the issue to comment on it," but rather "I don't think this person is arguing in good-faith."

I agree with the principle of charity, and your claim that you should understand before disagreeing. But it is also true that you will encounter people who are not arguing in good-faith, in which case it is sometimes a mistake to even engage.

<comment><USER7> Totally agree– I was responding to "crackpot theory" which sounds more like wild conspiracy theories that people truly believe, rather than arguing in bad faith, but after re-reading, I think that is the point aidenn0 was trying to make.

<comment><USER6> Sorry for the late reply:

On the internet (which is where the quality of rhetoric could most use the principle of charity these days), it is hard or even impossible to tell the difference between a troll or a crackpot.

</comment></comment></comment></comment></comment></comment><comment><USER9> We added that to the Hacker News site guidelines a few years ago: _Please respond to the strongest plausible interpretation of what someone says, not a weaker one that 's easier to criticize. Assume good faith._

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

Before that, I used to write about the principle of charity quite a bit: [https://hn.algolia.com/?sort=byDate&dateRange=all&type=comme...](https://hn.algolia.com/?sort=byDate&dateRange=all&type=comment&storyText=false&prefix=false&page=0&query=by:dang%20principle%20charity). But eventually stopped using that name so much because it can be a bit confusing to people who haven't heard it before. It's shorter to just quote the guideline.

</comment><comment><USER10> There's an even more insidious form of argument that's even present here on HN:

1: Take someone's position that one doesn't like

2: Extend it to a reasonable analogue (aka apply 1st formulation of Kant's Categorical Imperative)

3: Show how absurd it is and try to get the original person to defend it.

4: Never provide constructive criticism nor an alternative viewpoint.

It's a toxic way to entrap others and degrade the quality of a conversation. So much so that I had to write a satirical post about it[0]

[0] [https://cjslep.com/c/blog/winning-internet- arguments](https://cjslep.com/c/blog/winning-internet-arguments)

<comment><USER11> I'm surprised that nobody noticed that you demonstrate the technique in your own article!

"1\. Find an argument that is disagreeable."

Somebody does not agree that people should expect others to remember their preferred pronouns.

"2\. Derive an underlying principle behind it. This must appear civil and reasonable at all costs as it gives you credibility. At all costs, do not engage with the actual argument."

This is the article itself, which is framing the discussion as an exposure on how people win a discussion by using a certain dark strategy (this is the really clever meta move!)

"3\. Extend the principle to a plausible real world absurdity to demonstrate its impracticality."

A 7-point bullet-point list is provided, culminating on the suggestion that people who are pronoun-conservative possibly also want to commit genocide against gay people and Jews.

"4\. Use this absurdity to: tear down the argument; or appeal to a slippery slope; or directly ask the original author to defend."

The subtle escalation along the bullet-point list is very clever, it slowly "boils the frog", distracting the reader from the slippery slope argument contained therein.

"5\. At all costs, do not propose an alternate solution which would reveal the true intentions for doing this. That cannot be revealed."

Yup.

To illustrate what a more nuanced compromise might look like, I disclose my own position on this matter:

If somebody tells me that me addressing them with a given pronoun is important to them, I will make my best effort. At the same time, my brain has been primed by decades of following the convention of choosing pronouns based on perceived gender, so I also expect to be excused if I forget, and for the person to consider that I might be tired or have bad memory, instead of assuming malice on my part.

"6\. If anyone else replies to counter or patch holes, repeat the steps at the top."

I guess I'm the one playing that role here. Your move. :)

<comment><USER10> Haha, you're the first to try to apply it recursively! That's kind of why I employed satire, to make people think.

My move is simple. Do nothing. My satire fails its own test when applied to itself as I make clear what I am looking for and what is unacceptable, emphasized with satire.

I clearly value an argument when folks make a good faith effort to argue for an alternative position, make constructive criticism, elaborate on the source of their concerns, or reveal their intentions. No hidden intentions from me.

As for the example: I thought the satire had made it very clear that the alternate solution is to have the would-be-saboteur reveal their alternate position, make constructive criticism, elaborate on the source of their concerns (ex: like you've done above), or reveal their intentions. So my satire also fails my own test that way. Again, no hidden intentions, clear alternatives.

Since you made your position clear, we can now have a constructive argument about a myriad of things: the role of perceived gender in society, cultural norms, morality of honest mistakes, etc. And I don't have to be guessing a position on your behalf while also defending a position I never took. If you let me pick for you, and you pick for me, that's not a discussion.

It's basically a giant post about intellectual honesty and good faith discussions.

<comment><USER11> You say "no move", but you made a good one. I concede the point. Thanks for being a good sport.

<comment><USER10> Thanks for making me think more on the topic -- I especially loved the recursion which forced me to reflect on a whole new and weird level.

</comment></comment></comment></comment></comment><comment><USER12> This principle was used in medieval disputation. The Summa Theologiae [1] of Thomas Aquinas is broken down into "articles" that examine every aspect of a particular broader "question". Each article begins with a series of "objections" that attempt to state the best possible arguments against the position that Aquinas will take. The next section has a relevant quote from authority, and then Aquinas explains his position. Finally, he provides an answer to every objection. Although reading something written this way is difficult for modern readers, I think it provides a healthy antidote to the craziness we have today.

1: [http://summa-theologiae.org/](http://summa-theologiae.org/)

<comment><USER13> This is a fantastic resource on in general - note that Thomas often wrote _better_ objections than those who held the positions he would argue against. That is, he would take the arguments he disagreed with and make them more cogent, more reasonable, and provide more applicable facts and citations than were in popular circulation at the time. Then he would counter these _best_ arguments. The point was to find the truth, not to win the argument.

That said, the _Summa_ assumes that you are reasonably familiar with the works of Aristotle and Plato - so some arguments (or counter-arguments) may sound arbitrary to those who are not yet familiar with those works.

Final note, another good source to read the Summa is [http://newadvent.org/summa/](http://newadvent.org/summa/)

</comment></comment><comment><USER14> This seems like a very poor account of what it is to be charitable in argument.

It is essential to coherent conversation that you do your best to understand your interlocutor's position. If their argument betrays some particular idiosyncrasy or mistake, then you should focus on and examine that. If you instead ignore those features of their position and impose a view upon them which they don't actually possess - 'the best possible interpretation of their argument' \- then you will not actually be engaging with their reasoning, and thus you'll be less likely to understand the source of your disagreement, analyse the merits of those differences, and convince one another.

You should not be looking for a 'good' or 'bad' interpretation of their argument, you should be searching for an accurate one.

I think better principles of charity would be:

1\. Assume good faith 2\. Be open minded to alternative views 3\. Don't treat arguments as a battle of wits but as an attempt to move towards mutual understanding 4\. Assume the person you're arguing with is at least as intelligent as you 5\. Engage with their reasoning

<comment><USER15> The point of the article, and the concept it's trying to promote, is to understand that even though the person giving the argument might be flawed or under-educated on the position, that it doesn't invalidate the position.

The way to get the most value out of flawed people is to find the best version of their argument and then argue with _that_. The person isn't all that relevant.

<comment><USER14> That doesn't seem to be the declared aim of the article. Its first sentence reads:

'Simply put, the principle of charity is the idea that when criticizing someone's argument, you should criticize the best possible interpretation of that argument.'

Later:

'Essentially, the principle of charity embodies the idea that when you interpret what other people say, you should select the best possible interpretation for their statements.'

What is at question in both these statements is the position of an interlocutor. It is a guide to conversation.

You say:

'The way to get the most value out of flawed people is to find the best version of their argument and then argue with that.'

That seems like a highly narcissistic way of conducting a conversation. You would in effect be having an argument with yourself.

As I said above, I think imposing a view on an interlocutor that they do not actually hold is a recipe for confusion, will almost certainly make the conversation unproductive, and might prevent you from understanding their position in the first place.

<comment><USER15> I'm not sure how you go from "find the best version of their argument" and see "argue for them"...

<comment><USER14> I don't see any other way of interpreting your claim that 'the way to get the most value out of flawed people is to find the best version of their argument and then argue with that.'

You give your argument, they give theirs. Then you amend their argument for them, and argue against that, ignoring your interlocutor.

If you are not interested in accurately understanding the person you're talking to, and instead impose what you take to be the strongest interpretation of their argument on them, then you are for all intents and purposes arguing not against them, but yourself.

<comment><USER16> > Then you amend their argument for them, and argue against that, ignoring > your interlocutor.

The problem is that language is ambiguous and easily misunderstood. You interlocutor also has context which you don't know about.

Being charitable means recognizing these facts and so reading their words to mean the strongest possible interpretation. If they intended some weaker argument, it doesn't matter, because dismantling the stronger version already handles the weaker interpretation.

<comment><USER14> I suppose the problem in all this is that the dictum that you should 'criticise the best possible version of your interlocutor's argument' does not specify how to identify the argument in question in the first place.

Take the following example. Suppose you claim that the meat industry is bad, advance three premises, and infer from them the conclusion that it is indeed bad. Now, if I use the dictum 'criticise the strongest version of your interlocutor's' argument, that could mean many things:

      1. I might think that all the premises were unconvincing and argue against entirely different premises in favour of the same claim.
      2. I might offer new premises in addition or substitution for the premises provided, or a different conclusion.
      3. I might interpret the specific details of the premises or conclusion differently.

One could plausibly say that all of these strategies offer a different version of the 'same' argument, but the first would have almost nothing to do with it, and the second would be majorly different. Also, note that if I switch around the premises, and argue against that amended version of their argument, it does not at all follow that 'dismantling the stronger version already handles the weaker interpretation'. Defeating a strong argument does not falsify an entirely independent argument, even if it is weaker.

I personally would say that this conversation is based on an unhelpful conflation. We should both strive to understand one another as accurately as possible, _and_ to move the conversation in as constructive a direction as possible. They need not be in tension. The problem arises if I take the latter - the desire to make the conversation constructive - as an interpretive principle.

<comment><USER16> I would say that none of your cases covers the intent behind the dictum. You've already moved past the "ambiguous language" and right into assuming that the argument was clearly conveyed and understood, and so you must now endeavour to evaluate the plausibility of the premises, the inferences, etc.

The dictum applies prior to this step, where the premises and the argument may be phrased in a somewhat ambiguous way. When interpreting the language used to describe the premises, take the most challenging interpretation rather than the weakest/most easily attacked interpretation. When evaluation the inferences, once again take the most challenging interpretation.

For instance, a phrase may admit two interpretations, a valid or invalid inference. You should always assume your interlocutor intended the valid inference.

<comment><USER14> If you find your interlocutor's position ambiguous in some major way, then you should, firstly, tell them, and secondly, ask them to explain. Otherwise confusion may ensue as to what exactly is being argued for and against. If the ambiguity is incidental, then the principle of charity is not really doing much. I take it that your example - about a phrase admitting a valid and invalid inference - is of this kind. Though I do agree that we shouldn't jump upon those kinds of slippages.

If you read carefully and allow the conversation to unfold, while prompting your interlocutor to explain what remains unclear to you, then generally you can get a fairly accurate impression of their views. More often than not, the problem is not ambiguity, but an unwillingness to listen, and engage thoughtfully with others, through a genuine _dialogue_.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> Doesn't this fail when dealing with genuine bad actors?

E.g. we know that social media are infected by a variety of trolls and "influencers", and it seems pointless to assume the best possible interpretation for their output - except, possibly, as a deliberate rhetorical position, which can sometimes be more persuasive than more passionate rebuttals.

<comment><USER18> It harkens back to an era when academia was a somewhat homogeneous cultural community, and when people were playing "the long game" with their reputations.

Being a bad actor may chase someone out of an argument giving you an immediate "win," but the word goes around about you, and suddenly your professional reputation is in tatters.

But in an environment where people are basically anonymous, where you may be engaging with a paid operative, or a throwaway sock puppet account, or an account that is trying to amass followers for grift (like being an anti-vaxxer online in order to sell books and newsletters)...

None of the traditional manners around debate apply.

<comment><USER15> Just to be clear, you are almost never engaging with a paid operative. Push that out of your mind, it's paranoia.

<comment><USER18> "Almost never," except when you are. For example, Milo. All over social media for a good long while, along with staffers, until the money behind him dried up.

<comment><USER19> Indeed. Perhaps people aren't arguing with paid operatives directly, but there are a _lot_ of people repeating positions that were injected into the dialogue by paid operatives.

<comment><USER20> This is definitely the case. Most of the repeaters are incapable of following through or supporting the argument (in most cases, not even the original promulgator could follow through in a rational discussion), and they have exactly one response: change the subject with another non-sequitur. It is a mistake to follow them into the change of subject, and the charity principle doesn't ask you to do so, as they have by then revealed their true intentions.

</comment></comment></comment></comment></comment></comment><comment><USER21> > 1\. You should attempt to re-express your target's position so clearly, > vividly, and fairly that your target says, "Thanks, I wish I'd thought of > putting it that way."

This is by far the best rule I have ever attempted. The best way to debate is when both sides reword the other side argument, with corrections until both are satisfied.

It will also reveal the most insightful and depressing hidden realities about human cognition. Significant percentage of people are seemingly incapable of entertaining alternative viewpoints. Everyone suffers from this condition when we are heavily invested int some idea or belief, but most people can suppress the tendency temporarily and see the logic of some other way of thinking.

I wonder if there are psychological tests that can be used to score this ability.

<comment><USER22> My experience of this on HN has led me to basically conclude it's not very possible to be constructive in internet comments. I may clearly re-state a point of view I disagree with, and the response will always be that I have either misunderstood it, no matter what, or that my replies (which are tailored exactly to the item I'm responding to) don't refute the original point and I'm "not providing evidence."

In other words, the most common type of reply I get is something to the effect of, "Despite re-stating my argument with clear articulation, you did not understand it (and I won't say why) and further, your counterpoints don't constitute "evidence" or induce any information transfer (which I will take to imply _your_ deficiency and not _mine_ ), and before looking further into any of this, the burden of collecting, organizing and disseminating evidence is all on you."

This attitude seems often to get rewarded with upvotes as well. It's very distressing to me personally.

<comment><USER23> One problem with internet debates is the debators only ever know about the people they're debating. Rarely will you convince your "opponent," but you'll probably have an impact on people who read but don't comment. You're debating for the audience.

This is also why people should challenge others in public when needed. Your boss might not change his ways, but your colleagues could.

<comment><USER22> I agree with you very much, but you do learn something about your audience by observing what is up-voted, down-voted or flagged, and what responses moderators provide.

In general I find those things to be very personally discouraging on Hacker News. It's a community I'd like to belong to, but feel that when I abide very carefully by the community standard of discourse, I still receive punitive downvotes for disagreeing with crowdthink or receive canned moderator responses that don't explain the specific mechanics by which a comment is considered failing to meet guidelines, with no serious appeals process when you believe you're being treated unfairly.

</comment></comment></comment></comment><comment><USER24> It's good advice. Ten years ago, I had some opportunity to improve some soft skills by taking some courses. I took some courses related to selling your ideas and coaching.

Turns out that this is something lots of engineers could benefit from as this is simply not part of their bag of tools when they leave university and something that can frustrate them enormously when they need to engage with others whether it is colleagues, customers, or superiors.

I've been in more than a few meetings where people were yelling at each other, or worse, where I ended up doing a fair bit of yelling myself. These days, I tend to be a bit more conscious about it than I used to be. Usually it indicates something is wrong that needs fixing and quite often it is beyond whatever is being discussed. Fixing that is often the more important thing.

A few tricks I apply: 1) If you think something is good, make a point of communicating that. It buys you good will and people are more likely to listen to you when you say otherwise. Also it keeps people motivated. 2) Talk in terms of improvements/fixes/changes instead of simply stating, "this sucks". It's much harder to argue against that by others because why wouldn't you want to improve things. 3) Pick your fights carefully. Having opinions is cheap but owning the consequences is not. I often give people room to do things their way even when I don't fully agree it's the right way. Basically I need them to do it for me without my involvement. And there's always the chance you are wrong after all. In any case, the whole point of a team is being able to trust others to get shit done without you. If you need to micromanage everything, something is wrong. That something might be you.

</comment><comment><USER25> I think ultimately this boils down to the "diry hands" problem ([https://en.wikipedia.org/wiki/Dirty_hands](https://en.wikipedia.org/wiki/Dirty_hands)). As long as the general public isn't equipped to identify an intentionally uncharitable interpretation (and punish bad actors for it), you will find yourself on the losing end of the argument. I do think you should generally interpret opposing arguments charitably, but you should also be able to quickly switch gears if necessary. Otherwise you will be outplayed by your opponents.

<comment><USER26> Depends on what game you're playing. Are you trying to win the _argument_? Or are you trying to win your _listeners_? You can go against bad actors, with charity, and still point out where they refuse to commit to a position, where they change positions, and where they otherwise argue in bad faith. I wouldn't do so the first time it happens in a conversation, but if it keeps happening, sure, use the record of the conversation to point out what they're doing.

Note well, however, that if I'm reading this, and I see that you have judged the other side as arguing in bad faith, and you try to document that, and I don't agree, then I think _you_ have a hair trigger at least, and perhaps that _you_ are arguing in bad faith. That is, you have to extend _more_ charity than a normal reader, rather than less.

<comment><USER25> Good point. I think the game you should play when entering an argument is finding the truth. I think what I was trying to say was that if someone changes the game by arguing in bad faith (and for the sake of the point, undoubtedly so), you should note that and point it out or play along.

</comment></comment></comment><comment><USER27> I always try to strongman other peoples arguments. Im not perfect but i do my best. Another important thing i have learned is to try and understand what someone is saying rather than making it only their job. This is especially true when people swear and uses faul language.

But most importantly i try to never point thd moral finger at someones position that way a much more fruitful discussion can be had.

</comment><comment><USER28> I occasionally teach a course in informal logic, basically the construction & deconstruction of arguments and rhetorical devices. The principle of charity is the single most fundamental rule of reading/interpreting an argument in order to have productive discussions on a topic and not get bogged down in misunderstandings, accidental straw men rebuttals, etc. Everything else, from identifying the primary claim and dissecting the supporting evidence to actually rebutting the argument, flaws, fallacies etc., that all comes after.

</comment><comment><USER29> Being able to make the other person's case and articulate it in a way that is true to them is a key step in negotiations books, as well as some conversations books. It's not really hard to understand why. A lot of time is lost in arguments/debates because one person thinks the other person isn't understanding (even when the other person does) - so it's important to signal that you understand.

There is a kind of corollary to this: Often times person A comes to me complaining about person B being stubborn about something. So I often ask: "So why do you think B is insisting on it?" They usually cannot come up with a good answer. At that point, I either hint or explicitly tell A that B has a position that A doesn't understand, and it's not surprising B will not change his position since A isn't trying to address B's needs.

<comment><USER30> I first saw this principle as a negotiation tactic in "Never Split the Difference", he talks about how FBI hostage negotiators talk to understand the motivations of hostage-takers and terrorists without necessarily giving in or agreeing with any of those motivations.

It turns out even hardened criminals want to be heard/understood, and by using (author calls) "tactical empathy", you can start your negotiation off on the right footing.

</comment></comment><comment><USER31> I love this principle too - I think the only time it truly falls down (other than pure trolls) is when the person is so in love with their own voice (or, don't want to be pinned down), that no matter how much you try to repeat their point back to them, they say No, and repeat it back slightly differently. The distinctions are endless.

</comment><comment><USER32> One of the issues with pieces like this is that it implicitly agrees that the only way to engage people on the internet is by _arguing._ This promotes a them-vs-us mentality and the desire to "win" the argument.

I am usually trying to engage people in discussion, not "win" an argument. I try to add value to the discussion, not "win."

I especially dislike the general assumption that winning the argument means making the other person lose. Some people are seriously not happy with just being heard. No, they want someone else to go down in social rank or look like a fool. Without that element, they obviously aren't happy.

<comment><USER26> I agree that such people exist. Avoid them if possible. (I'm pretty sure I don't need to tell you that!) If not, then (in my best moments) I try to disengage quickly, making it clear that I think that they are wrong, but I'm not going to continue to argue with someone who just wants to argue.

This has the virtue of not giving them the victory that they wanted. Even if they take the last word, it's usually pretty clear to an unbiased reader what was going on. I'm (at least sometimes) content to leave it there, and to let the reader judge.

</comment></comment><comment><USER33> [https://en.wikipedia.org/wiki/Straw_man#Steelmanning](https://en.wikipedia.org/wiki/Straw_man#Steelmanning)

</comment><comment><USER34> Another aspect of this is that people are often better at thinking and reasoning than they are a communicating and reading. When you play a game of "telephone" and hear something that sounds bad, you shouldn't assume "wow this person is stupid and evil for thinking this." Instead, the principle of charity suggests that maybe they aren't stupid or evil and you're interpreting it in a way they didn't intend.

</comment><comment><USER35> I've thought there are three ways to view the Principle of Charity, depending on what you think its aim is. The exegetical aim is to accurately determine the author's belief or intention. The pragmatic aim is to conduct the most fruitful discussion of the matter in question. The ethical aim is to be duly respectful of the author. Moreover, it strikes me that these three aims overlap in practice for the most part, but not entirely.

</comment><comment><USER36> I don't argue that it can be useful for online debates, but damn, how boring would be Frank Herbert's Dune dialogues if we follow this principle?

Specially with pearls like this: [https://scifi.stackexchange.com/questions/91393/dune- explain...](https://scifi.stackexchange.com/questions/91393/dune-explain-the- subtext-here?rq=1)

</comment><comment><USER37> > 1\. You should attempt to re-express your target's position so clearly, > vividly, and fairly that your target says, "Thanks, I wish I'd thought of > putting it that way."

I like this and I'd even extend this to having an opinion on something. It really helps your opinions!

>> "I never allow myself to have an opinion on anything that I don't know the other side's argument better than they do." — Charlie Munger

</comment><comment><USER38> My opinion is the best in my opinion, so the best interpretation of the opponent's argument will match my opinion. Is this how it works?

</comment><comment><USER39> There's a famous Channel 4 interview between Cathy Newman and Jordan Peterson that illustrates not just the flaws of being uncharitable but also how it can backfire spectacularly. Regardless of how one feels about Peterson, the nearly 15 million views are evidence that excessive straw-manning ends up helping the person and argument you're against.

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

</comment><comment> vincent-toups I clicked this hoping it would be about constructivism. Oh well.

<comment><USER9> Yes, I saw that ambiguity too, and replaced the subtitle with a more specific phrase from the article.</comment></comment>


Show HN: K6.io – modern load testing tool for developers - <AUTHOR> https://k6.io/ <comment><AUTHOR> Hey all,

Pawel here - one of the engineers behind k6. For the past 9 months we have been working very hard on this load testing platform and today it's finally out! Hope you give it a try!

I'm happy to answer any questions you may have :-)

</comment><comment><USER2> I really like the new design!</comment>


Introducing Mapbox GL - <AUTHOR> https://www.mapbox.com/blog/mapbox-gl/

<comment><USER2> >Maps render at a super high framerate

You might want to use a nice HTML5 video instead of a .gif, then. It didn't make for a good first impression.

<comment><USER3> Or an actual map, scripted to move.

<comment><USER4> Sure. Oh but wait, there is an actual map there!

</comment></comment></comment><comment><USER5> Well, damn. I just spent five months writing a GLES iOS renderer for mapnik- vector-tiles as a master thesis project.

I said, "as far as we know, nothing like this has ever been done before". Good thing the presentation was last week I guess...

<comment><USER6> Will you open source it?

<comment><USER5> Unfortunately, not at this moment. It might be used in a commercial product.

<comment><USER7> You can still use open source commercially. Make it GPLv3 or something, if you wanna tie the hands of anyone who uses it

</comment></comment></comment></comment><comment><USER8> Hard coded compiler version?

        Could not find compiler set in environment variable CC:

        gcc-4.8.

I'm running gcc-4.9. I got it working by doing:

        ln -s /usr/bin/gcc ~/bin/gcc-4.8
        ln -s /usr/bin/g++ ~/bin/g++-4.8

I'm not saying this is good practice, but it works.

Also need to make sure python means python2.

<comment><USER9> Thanks for noting these issues. I've made a note about Python 2.x in the readme ([https://github.com/mapbox/mapbox-gl- native/commit/ae7e3de61c...](https://github.com/mapbox/mapbox-gl- native/commit/ae7e3de61c209d32ec52372a21726941e7fe652a)). As far as the compiler, g++-4.9 is fine to use. If you hit an error with it could you share the details in an issue? [https://github.com/mapbox/mapbox-gl- native/issues](https://github.com/mapbox/mapbox-gl-native/issues)

<comment><USER10> I had to change: #!/usr/bin/env python to: #!/usr/bin/env python2

in the python scripts to get it working under archlinux. If this works on the other platforms, that might be a good change.

</comment></comment></comment><comment><USER11> I've wanted to write a GLES 2 map renderer for ages -- ever since I saw that the Apple Maps app on iOS uses MSAA for antialiasing (yuck!).

It's funny to see all the usual 2D suspects in the source (clipper, GLU tessellator). They used a distance-based edge shader for antialiasing, so it should look much better than MSAA.

I'm not sure why there's a bias factor of 2 in the "raster" fragment shader -- looks like it might have been added by accident. It's interesting that they use both the stencil and depth buffers for clipping -- I hope they do a write up on some of the techniques they developed!

<comment><USER12> > I'm not sure why there's a bias factor of 2 in the "raster" fragment shader > -- looks like it might have been added by accident.

Yes, that was an accident. Thanks for noticing! We definitely have a lot of information to share about the process. Regarding clipping, we're not sure yet whether what we have right now is the best thing; there will certainly be improvements in that area.

</comment></comment><comment><USER10> This is really cool. It seems that instead of using mipmaps to generate a map, they are using a combination of curves and 2D shapes. This is very smart since the data is not only more compact but can also be visualised in a very fluid manner. The bottleneck is now the GPU instead of the data connection. Give me the ability to download a city's map on Android and I'm dropping google maps like a brick.

<comment><USER13> Google Maps also uses GPU-rendered vector geometry for their maps on Android (since 2010) and iPhone:

[http://www.engadget.com/2010/12/16/google-maps-5-0-hits- andr...](http://www.engadget.com/2010/12/16/google-maps-5-0-hits-android- includes-new-3d-map-view-and-offli/)

<comment><AUTHOR> Yes. Mapbox is 1) completely open source and 2) completely flexible design- wise.

</comment></comment></comment><comment><USER14> The vector map demo on the page has a serious issue with street names not showing up until you zoom way in, so far in that you can't see the context of the street anymore.

I assume this is for performance purposes, but it makes the map feel much less usable than Apple Maps in my opinion.

For comparison:

Apple Maps: [http://i.imgur.com/jqPHej2.png](http://i.imgur.com/jqPHej2.png) vs Mapbox Maps: [http://i.imgur.com/rVH775b.png](http://i.imgur.com/rVH775b.png)

<comment><USER15> You do realize that this 100% configurable by stylesheets? The entire point is, that their maps are stylable by the user (i.e. the app developer).

<comment><USER14> Of course. I've used Mapbox before and messed around with customizing the stylesheets. But the reality is that creating your own stylesheets is a level of effort and attention to detail that most projects/startups can't afford to take on, at least not at first.

The default stylesheets should look good and work well out of the box. Then if you have the time and manpower to customize them further great.

<comment><AUTHOR> One of the design goals with GL was to support cascading styles, so you can start with the predefined world map and just provide deltas of the things you want to change. For example: "Hide the buildings, set the text font to X, swap the stacking order of layers A and B, and override the default park color to blue".

</comment></comment></comment></comment><comment><USER16> I played around with the demo map and the scrolling was indeed super quick, along with zoom level changes. If they could do the same thing with WebGL so that we'd have vector maps in the browser (like Google maps) that would be awesome. The competition would be good for everyone.

<comment><USER17> If you're talking about the demo map in the blog post, you just played with the WebGL version :)

<comment><USER18> More details here would be great! Seems like a souped-up version of Leaflet.

Man I love the stuff that MapBox puts out. High quality.

</comment></comment></comment><comment><USER19> Didn't believe the WebGL demo until I rotated (ctrl-drag). Hope it feels as good on a mobile browser.

</comment><comment><USER20> Does anyone know if they are planning perspective (affine) transformation? Specifically, relief maps drawn at the correct (or exaggerated) elevation, with the labels still drawn upright?

<comment><AUTHOR> Yes, eventually.

</comment></comment><comment><USER21> Is anyone else seeing duplicated and mirrored labels in the demo? [http://i.imgur.com/998pDUR.png](http://i.imgur.com/998pDUR.png)

<comment><USER12> This looks indeed odd. Can you please share more information about your computer, OS and browser?

<comment><USER22> I have the same issue, but it looks even worse: [http://i.imgur.com/WJQcZp8.png](http://i.imgur.com/WJQcZp8.png)

My user agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36

I'm running on 15'' macbook pro, OS X 10.8.5 on a 2.2GHZ i7, with 8GB of memory.

</comment></comment></comment><comment><USER23> So this is only for iOS? Is there one for the web?

<comment><USER24> The demo is a version for the web.

</comment></comment><comment><USER25> It was only a matter of time before the mapping feature evolved yet again, glad to get a quick glimpse of this awesome technology.

</comment><comment><USER26> Sooooo... where do I get the WebGL (demo on the page) version? I want that.</comment>


Steam Survey Purports a 0.28% Linux Gaming Marketshare for February - <AUTHOR> https://www.phoronix.com/scan.php?page=news_item&px=Steam-Survey-February-2018 <comment><USER2> I think a more interesting question might be what is share of linux sales for games that have offerings for Linux.</comment>


Show HN: Best Friend – Animation Short Film - <AUTHOR> https://www.youtube.com/watch?v=j01Hg4QJ6NE <comment><USER2> I think this might be miscategorized. "Show HN is for something you've made that other people can play with. HN users can try it out, give you feedback, and ask questions in the thread."

</comment><comment><USER3> No english subtitles?</comment>


How to Move from MySQL to CouchDB: Part 1 - <AUTHOR> http://blog.couchone.com/post/2145537100/how-to-move-from-mysql-to-couchdb-part-1

<comment><USER2> "Our servers are over capacity and certain pages may be temporarily unavailable. We're incredibly sorry for the inconvenience."

I hope it's unrelated to their choice of data store!

Edit: back up and running. However, I'll note that the Team link on couchone.com seems to be directing to an edit page: <http://www.couchone.com/page/team#/edit>

<comment><USER3> The edit part should be fixed, we are investigating an issue with our CDN. Thanks for the heads up.

</comment></comment><comment><USER4> Still down for me, can someone paste the content once you get hold of it?

</comment><comment><USER5> Sorry about the downtime - we host our blog on Tumblr. I know, I know...

</comment><comment><USER6> That's a nicely written post. I look forward to reading the rest.</comment>


The Old GitHub Font - <AUTHOR> https://github.com/rreusser/the-old-github-font <comment><USER2> And i thought my eyes are just broken. For now the new one looks horrible, may it gets better with time.

</comment><comment><USER3> Thanks !</comment>


LastPass warns users to exercise caution while it fixes 'major' vulnerability - <AUTHOR> https://www.theguardian.com/technology/2017/mar/30/lastpass-warns-users-to-exercise-caution-while-it-fixes-major-vulnerability <comment><AUTHOR> LastPass recommending [https://blog.lastpass.com/2017/03/security-update-for- the-la...](https://blog.lastpass.com/2017/03/security-update-for-the-lastpass- extension.html/)

Use the LastPass Vault as a launch pad – Launch sites directly from the LastPass vault. This is the safest way to access your credentials and sites until this vulnerability is resolved.

Two-Factor Authentication on any service that offers it – Whenever possible, turn on two-factor authentication with your accounts; many websites now offer this option for added security.

Beware of Phishing Attacks – Always be vigilant to avoid phishing attempts. Do not click on links from people you don't know, or that seem out of character from your trusted contacts and companies. Take a look at our phishing primer.</comment>


Kanji backspace seen in the wild. - <AUTHOR> http://tjic.com/?p=8480

<comment><USER2> Whoa. I just got this interview question two days ago and I was like "damn that's a creative question." Nevermind I guess.

<comment><USER3> As the author points out, he hasn't encountered that problem in the real world in 15 years. So it's one of those essentially entirely hypothetical interview problems. Maybe some insight can be gained about how the candidate solves the problem. I wonder if it's as straight-forward as it seems though.

Really, you'd be using UTF-8 these days, which was designed with unambiguously back-iterating in mind. Or you'd solve the author's shipping problem the way he did. So in fact, the most practical solution to the problem in the vast majority of cases is: use a better encoding/data structure. Even if you've got a legacy data set in such an obscure encoding, I think it'd be faster and less error prone to convert to a better encoding and work from there.

So if you encountered this problem in the real world, you'd most likely take a step back and see if you could avoid/work around it entirely, avoiding some messy, inefficient algorithmic solution. At an interview you're trying to find out if the candidate is suitable for the kind of real work you'd be hiring them for. Is it really beneficial to get them to solve some problem that you'd really try to avoid entirely in the real world? Sure, the candidate might spot the insanity of the problem, but in an interview, the problem wouldn't present itself the same way it might in the real world. There's no macroscopic context.

I'm not sure I'd have the presence of mind in such an interview situation. Nerves may just push me into autopilot and make me find an algorithm. (note: I've been on both sides of the interview game; more frequently in the interviewer's chair)</comment></comment>


Ask HN: What data structure/db should I use for storing the file tree structure? - <AUTHOR>

I am trying to write an application(I am using python) to have a copy of a remote machines directory structure in my local machine (not the actual content of the files in the remote machine).
Once I store it in my local machine, I want to be be able to perform the following operations on my local copy of the tree structure
"ls"
"ls /etc"
"ls /etc/bin/yahoo"
and see the listing. Also if I change/add a dir/file name in the remote machine, I want to have the ability to easily update it in my local data structure. <comment><USER2> You don't specify any performance requirements, so take a look at this:

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

You will be able to update, but it will not be efficient.

Also - questions of this type are more appropriate for StackOverflow than HackerNews.</comment>


Development of a WiFi Router for Whistleblowers Was Just Suspiciously Cancelled - <AUTHOR> http://techcrunch.com/2015/07/13/development-of-a-200-wifi-router-geared-towards-whistleblowers-was-just-suspiciously-cancelled/?ncid=rss

<comment><USER2> He wasn't "developing". He connected off the shelf components. It wasn't a "WiFi Router". It was a WiFi over HAM bridge. It wasn't for "Whistleblowers". It was to steal WiFi.

And it was insanely stupid. Just turning this thing on could \- land you in jail for the rest of your life \- get beaten up by all ham operators \- make you infertile ... which might be a good thing for the gene pool</comment>


Spaced Repetition - <AUTHOR> https://en.wikipedia.org/wiki/Spaced_repetition <comment> a-robinson With how often I've seen spaced repetition mentioned online recently, I'm starting to assume there's a grand conspiracy that's trying to use spaced repetition to trick me into remembering about spaced repetition.

<comment><USER2> [Warning: attempt at taking joke seriously]

Surely if this were so, it would mean you'd see fewer mentions of spaced repetition over time, rather than more? (assuming your comment implies having seen more than usual recently)

<comment><USER3> > [Warning: attempt at taking joke seriously]

As an aside, I love doing this sort of thing. In conversation, someone makes a joke about X doing something impossible, and then all of us who analyze everything to death start playing the scenario in our head to understand ramifications or limitations in the fictional and often impossible scenario. Drives my wife nuts, but I enjoy it so much :)

<comment><USER4> Sounds like Yes-And ([https://en.wikipedia.org/wiki/Yes,_and...](https://en.wikipedia.org/wiki/Yes,_and...)), accepting the premise and expanding on the joke.

Tell your wife you're using a proven comedic technique.

<comment><USER5> > Tell your wife you're using a proven comedic technique.

"You see, I'm actually being funny right now. It's comedy, trust me."

</comment></comment></comment></comment></comment><comment><USER6> I truly believe that spaced repetition is near-magic and it is a tragedy that it's not integrated into our society and educational system at a fundamental level. It makes me shudder to think of all the years spent learning things only to forget them weeks or months later.

In any case, I've recently embarked on a long-term educational plan utilizing spaced repetition. My goal is to learn dozens of languages, historical events, philosophical theories, lines of poetry, and various other information.

I'm curious if anyone else has used spaced repetition over a long period of time with a deliberately ambitious plan. Most people seem to just use it for dabbling in language-learning or medical school, and not as a way to embed massive amounts of knowledge in the brain.

<comment><USER7> There isn't much value in memorizing vast amounts of facts like that anymore (you already mentioned two key areas where that's still needed: language and medicine). Nowadays it's better to remember where to find facts and learn quickly than to simply remember facts upfront.

It's fine for you to have a personal goal of using spaced repetition to learn dozens of languages, historical events, etc, but it's really not a tragedy that it's not integrated into our society. It's good that we've moved on.

<comment><USER6> Sorry but I disagree completely. The ability to quickly find information online doesn't negate the fact that intellectual progress and creativity often come from making connections between disparate fields. The only way to make these deeper connections is to truly know and digest the information, not simply to google it.

It is probably a consequence of the computer age that we think of information as a singular piece of data that is either known/nor known, and not as something that needs to be learned, dwelt upon, and digested over time.

<comment><USER7> Connecting information is orthogonal to remembering it. Same with digesting information: you don't need to use something like spaced-repetition to commit knowledge to long term memory in order to digest it, you just need to spend some time understanding the info. In fact, I'd argue that spaced-repetition runs somewhat counter to deeply understanding information. It's easy to repetitively memorize and recall info without actually understanding it.

<comment><USER8> No one's suggesting you memorize information you don't understand....

</comment></comment></comment></comment></comment><comment><USER9> I've used Anki pretty consistently throughout my university studies for just about every course. I plan to continue using it to keep a high level overview of some of the important maths concepts I want to stay fresh on.

I've been enjoying Mochi[0] as an alternative recently. It has a much nicer UI and the core features I use are all there. I find it much faster to create my cards in Markdown and with a keyboard driven workflow than what I had with Anki.

0\. [https://mochi.cards/](https://mochi.cards/)

<comment><USER10> Is the repetition algorithm superior or inferior than Anki in your experience?

<comment><USER11> Anki uses a Super Memo algorithm and Mochi appears to be using a simpler one that doesn't take card difficulty into account.

I can see how using markdown to create cards would be a big draw, though.

</comment></comment></comment><comment><USER12> Check out gwern's fantastic article about this: [https://www.gwern.net/Spaced- repetition](https://www.gwern.net/Spaced-repetition)

</comment><comment><USER13> Recommend using Anki for this: [https://apps.ankiweb.net/](https://apps.ankiweb.net/)

I try to add new words/concepts/things etc. I learn into Anki.

IMO, it greatly helps me with memorising various and more obscure terms, that I used to always forget.

<comment><USER14> Could be difficult to put in lot of latex or even diagrams. We need something which can auto-generate the notes for us.

<comment><USER3> I'm actually working on a knowledge base / memory retention application. I'm not yet sure what I'll do for the "best UX", as I want to avoid UI work _(not my area)_ , so I expect I'll export to something like Mochi[1] or Anki.

Can you describe your format and processing a bit more? I'd like to have some understanding for potential future use cases. Eg, what are the sources (format/etc), and how would you envision them generating the Anki cards from them? Does your source currently have enough data to generate cards from? Or would someone need to go through and separate larger documents into Anki cards?

Appreciate any detail you can give :)

[1]: [https://mochi.cards](https://mochi.cards)

<comment><USER15> Not familiar with Mochi, but it looks uncannily like [https://www.notion.so/product](https://www.notion.so/product)

</comment></comment></comment></comment><comment><USER16> A very fun and interactive introduction to spaced repetition by the amazing Nicky Case: [https://ncase.me/remember/](https://ncase.me/remember/)

<comment><USER17> Very cool site! I always wondered how you were supposed to schedule Leitner boxes manually.

Somewhat related, [https://kanji.koohii.com/](https://kanji.koohii.com/) uses online Leitner boxes to learn how to write all the 2000+ official commonly- used Kanji in Japanese. But I believe the timing of when the cards come due is based on when they go into a box + a certain amount of time, instead of reviewing an entire box in one day (which it can do easily since it's software). It's nice to see the stacks in each (virtual) box progress over time.

</comment></comment><comment><USER18> I wish anki supports better import-from-text-files, i.e. I can write the cards in a text editor(e.g. vim), then import it to anki easily with syntax highlighting etc just works, I failed to find one does that, use anki's own interface to input a large amount of info is difficult for me. it will be nice if anki has a pre-defined format/template so we can edit(add/delete/change) the cards using better editors.

<comment><USER19> I'm not sure if this is exactly what you're looking for, but I've been working on a spaced repetition app[0] recently that supports markdown for cards, as well as the ability to convert markdown notes into cards.

[0] [https://mochi.cards](https://mochi.cards)

</comment></comment><comment><USER20> I have noticed in myself, that it helps a lot with things which are conducive to route learning - that is, it is either something which has no innate meaning, like a random sequence, or something I understand, such as a table of values.

But it helps very little (not surprisingly) when I need to learn a concept and a model. I thought maybe I can learn the model faster, if I have all the terms and their definitions down - but in fact I found it painful and probably distracting.

<comment> yjftsjthsd-h I find it less useful for learning complex things, but more useful for retaining them. So I learn something, but then I make cards for key points so that I'll be able to remember the whole thing later. Otherwise I find that after a while I don't always recall the whole concept.

<comment><USER3> Yea, in my _(limited)_ experience Spaced Repetition can bring larger items into memory even if the card itself is not asking a big complex question. I _think_ if you can phrase a question in such a way that to answer it you need to draw a larger model in your head you'll gain similar benefits to more traditional micro-spaced-repetition.

Eg, you could add cards to individually remember family members, or you could add a card to remember all of the family members of X household. The latter is more vague but I think still effectively pulls the dependencies _(individual family members)_ into your mind.

This is speculation, so take it with a grain of salt.

</comment></comment></comment><comment><USER21> I built an app earlier last year to help with spaced repetition on web content: [https://retaino.com](https://retaino.com)

It's been interesting to see a lot of interested over the past year around the concept, though it may just be the Badder-Meinhof effect at play (which I'm now able to recall the name of thanks to Retaino!)

<comment><USER22> This is exactly what i've been looking for for a while now. signing up! have been using readwise for books, but this will be great for things beyond books! thanks!

<comment><USER23> Would love to hear your feedback on [https://booxia.wensia.com](https://booxia.wensia.com) , which handles both books and web content.

</comment></comment></comment><comment><USER24> I've found that one of the best ways to learn is to combine spaced repetition with shorter, yet higher-frequency study sessions (think two daily 30-minute blocks, rather than one 1-hour block). This allows you to also take advantage of the primacy & recency effects.

<comment><USER25> Wow, that's a lot of flashcard time.

According to Anki, I'm averaging 10 minutes a day on my language vocabulary deck. It does happen in a series of short, 1-2 minute bursts when I'm sitting on the toilet or whatever.

To that end, another useful thing I've discovered: Reviewing flashcards (and, spaced repetition) is _not_ a good way to learn. It's a good way to reinforce your memory of things you've already learned. The real learning happens when you make the flashcards. The time spent focused on each concept so that you can decide how to break it into a series of smaller factoids that are right- sized for a flashcard, and coming up with whatever mnemonic devices you'll be using to help you remember this concept, is where the learning happens, because that whole process involves a fair amount of turning it over in your head.

Meaning you really shouldn't ever use a pre-made deck. It may not seem like it at first, but it really is normally more efficient to make your own from scratch.

<comment><USER5> > Meaning you really shouldn't ever use a pre-made deck.

Agreed. The process of making your own deck is too important.

Not to mention, I've never found a deck that was more than 25% applicable to me. Even "advanced" Spanish decks had a bunch of chaff and beginner-content to wade through. And you start realizing you should've just invested the time making your own starting one year ago.

</comment></comment></comment><comment><USER26> I built splearn.io to learn faster myself through spaced repetition learning. Anyone can log in and use it 100% free though. It has offline sync and text to speech for spelling. It only uses active recall (actually tests you) for maximum efficiency.

<comment><USER27> It might be helpful to put in some sample questions so people can try it out without having to enter their own data.

<comment><USER26> Thanks tashi. Great point!

</comment></comment></comment><comment><USER28> From a couple months ago: [https://news.ycombinator.com/item?id=19827910](https://news.ycombinator.com/item?id=19827910).

Other threads: [https://hn.algolia.com/?query=Spaced%20Repetition%20comments...](https://hn.algolia.com/?query=Spaced%20Repetition%20comments%3E10&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0)

</comment><comment><USER29> I'm not in school and aren't actively trying to learn one particular thing. But I've always wanted a flashcard phone app where I can browse topics, install the flashcards, and learn at my leisure. Is there a good product like that? All the apps I've seen seem to trend towards making your own cards.

<comment> yjftsjthsd-h While ex. Anki supports community decks (I assume others support such features, of course), part of the resistance is that making your own cards significantly contributes to learning; using premade cards is convenient, but impedes learning them.

</comment></comment><comment><USER30> Spaced repetition is essential to learning Chinese characters because the language doesn't contain an alphabet. Glad to see it getting some love.

I recently created an SRS app specific to learning Chinese vocabulary. You can check it out at:

[https://www.dailychinese.app](https://www.dailychinese.app)

</comment><comment><USER31> How We Learn [1] has a chapter on this.

[1] [https://www.penguinrandomhouse.com/books/221559/how-we- learn...](https://www.penguinrandomhouse.com/books/221559/how-we-learn-by- benedict-carey/9780812984293/)

</comment><comment><USER32> I have been patiently waiting on the Soffos[1] product from Fountech to be released to give it a try. I am assuming that there is a repetition algo in there as well.

[1] [https://www.fountech.ai/work](https://www.fountech.ai/work)

</comment><comment><USER33> Been using Chessable (chessable.com) for chess improvement and it really works wonders. The format is great for chess, especially for learning openings or for tactical situations where there is a clear best move.

</comment><comment><USER34> Seems like spaced repetition works great for language learning and remembering new terms. I wonder how it could help to get better as a programmer. Any tips?

<comment><USER35> It can absolutely help here! I've been using Anki for about 7 years, and most of my cards (~9000) are CS-related.

I've found that focusing on the fundamentals helps for me. E.g. most programming languages have a few fundamental ideas that they're built around-- memorizing those is usually good enough to quickly hop around programming languages and be productive. Algorithms, operating systems, networks, compilers, machine learning, math, etc...I grabbed some textbooks for those and just focused on the first few chapters, which lay out the fundamentals, and being able to recall and think about those in my head has helped me immensely.

Trivia is occasionally useful but it's hard to transfer to real life: e.g. even though I can answer questions about CLI command arguments when studying, I still have a hard time recalling them when sitting at a computer. Memorizing _how to find_ the answers I need is way more useful (and a lot of this is knowing the right terminology and fundamental concepts...which are easier to recall out-of-context).

I also focus on different formulations of the same concept. Backwards and forwards retrieval: recognizing the concept from its description, and being able to describe the concept. I make separate cards for those. I also put "generative" cards for the same concept, which force me to practice _using_ the concepts, and recognizing when to use them. And also recognizing concepts from code or other contexts. Usually just having one card for a concept isn't enough for me, unless it's really simple or is just trivia. For a hard concept, I might create 5-10 cards to help me practice recalling and using the concept in different contexts.

</comment></comment><comment><USER36> I was hoping to see one of dang's lists of times over the past we previously discussed this...

<comment><USER37> That's what the "past" link below the submission title is for.

<comment><USER36> (it was a lame joke)

</comment></comment></comment><comment><USER38> Related: Dual-n-back training: [https://en.wikipedia.org/wiki/N-back](https://en.wikipedia.org/wiki/N-back)

</comment><comment><USER39> I often feel like learning things with Anki puts memories into the wrong part of the brain. It happens way too often that I can perfectly recall something from Anki (on a PC or phone), but have a lot of trouble recalling it 'in action'.

<comment><USER40> It might be becasue you are just training recognition and not production.

I use Anki to study Russian, with great results, following Gabriel Werner's Fluent Forever.

In the book, he teaches how to learn the words and the grammar of a language using Anki. One of the fundamental ideas is to both create recognition and production cards.

The recognition cards are the ones with a word in your target language, of which you have to remember the meaning. This is what most people use SRSs for.

The production cards instead show you an image, or a sentence with blanks, and you have to come up with the correct word by yourself.

Before reading the book, I have never seen anyone using the latter, but it makes sense. You have to train your brain not only to recognize the information, but also to take it out when needed, and those are two separate paths.

[Update: fixed the book's author name]

<comment><USER41> I'm also studying Russian. Are you using the Fluent Forever app along with the book? How are you storing your anki cards (anki app or something else).

<comment><USER42> What I'd really like isn't "I am studying Y using X" -I'd like "I am fluent to level Z in Y from using X."

I've used some spaced repetition/Anki stuff to put an initial dent in Portuguese. Compared to learning French the old fashioned way of practice with humans and repetition; it's a huge basket of fail for me. Virtually no useful results. Stopped with Anki, moved to Portugal; zero lessons, but making some attempts with the locals with a shitty phrasebook and dictionary -I actually got decent results. Maybe you can call that "spaced repetition." In which case everything is spaced repetition.

I believe people can remember lots of facts via flashcards, as I've done this myself in the past. I'm not so sure it works on languages.</comment></comment></comment></comment>


Why being a boss is like a hostage crisis - <AUTHOR> http://edition.cnn.com/2012/08/30/opinion/hostage-secure-leader-kohlrieser/

<comment><USER2> * > but I kept in mind that the success rate of hostage negotiators is as high as 95% *

You would want to retire after your 19th successful operation.</comment>


Work Advice: More questions about whether employers' demands are legal - <AUTHOR> http://www.washingtonpost.com/lifestyle/magazine/atwork-advice-more-questions-about-whether-employers-demands-are-legal/2015/02/19/2beabc02-ad60-11e4-9c91-e9d2f9fde644_story.html

<comment><USER2> FLSA is an interestingly-outdated animal. Basically anyone in a white-collar job gets an "executive" exemption. See: anyone working in financial services.

Meanwhile, in areas like retail, workers' lives are notoriously made difficult by unpredictable and arbitrary scheduling. So you're a part-time salesperson at Best Buy? Here's the 21 total hours you'll be working next week, spread out over 7 days because we need to cover little gaps here and there.

For better or worse, worker protection in the US is an illusion.</comment>


Virtual air travel - plane doesn't leave ground - <AUTHOR> http://www.timesonline.co.uk/tol/news/world/asia/article2558290.ece

<comment><USER2> In every market you've got to have one guy that just wants the money and tries to think of a way that no one has ever thought of before. Funny, the web application market is very similar, you have people setting the standards (youtube, flickr, digg, twitter) and you have people that want the money, yet don't want the originality (Soapbox, Zooomr, Netscape, Jaiku). I don't know if it's right or not, but sometimes trying to make the money gets you more (<http://uk.techcrunch.com/2007/10/09/jaiku-bought-by-google/>).

</comment><comment><USER3> ...and soon the white devils will return with the cargo.</comment>


Ask HN: We just launched PleaseRT.me, a Twitter-app, please send feedback - <AUTHOR> http://pleasert.me

<comment><USER2> (Putting my normal user hat on here. I'm purposely preventing myself from trying to think hard on the purpose of your site.)

"I" don't follow what your site does, even after I see the example. Something to do with retweets, which I thought was just sending someone else's tweet to my friends. But I enter some text and submit, nothing seems to happen. I alt- tab away and come back and a username/password field has appeared, with an empty text box and "60" number. I don't get it.

I give up, feeling dumb, and leave the site, to do whatever it was I was doing before.

</comment><comment><USER3> So it's a text box that creates links that, when clicked, send you over to twitter where you can click submit to turn them into spam?

That suggests two groups of users: Spammers to post links, and, uh... stooges to click links. I can see the motivation for the spammers. What exactly is the motivation for people to come to this site and click links?

It just doesn't make any sense at all.

<comment><AUTHOR> retweeting is something already done by the twitter community. At the moment if you have something that you want to encourage your followers to spread, the most you can do is say "Please Retweet!" (which a lot of people do - <http://search.twitter.com/search?q=please+retweet> ). We are just trying to make an action that people already do, easier.

</comment></comment><comment><USER4> I love the design it's great.

</comment><comment><USER5> What problem are you trying to solve exactly?

<comment><AUTHOR> Retweeting is something the twitter community has invented; there is still no built in functionality for it. As more and more people sign up for twitter, they have to continuously be educated on what retweeting is and how to do it. We are trying to make retweeting easier.

<comment><USER5> Fair enough, why don't you create some variation of twitterpedia.com and put a lot more definitions on there?

<comment><AUTHOR> The way we did it makes it more useful for the whole community, and helps ideas spread through twitter. It lowers the friction to retweet. Also, most users are not likely to go to a twitterpedia site, pleaseRT.me is viral by definition, and gets the idea right in their face.

</comment></comment></comment></comment><comment><USER6> I'd love twitterific integration.

Umm maybe you could create a dashboard widget (or desktop gadget for vista) - then I'd consider heavy use. Until then I think I will only use it when I REALLY want people to RT something.

</comment><comment><USER4> pleaseRT.com is too long. What about rt.me ? It's available and then your URLs would be a lot shorter.

<comment><AUTHOR> I don't think it's possible to register a 2-letter .me

<comment><USER4> Hm. Ok seems you are right but plzrt.me or whatever something that's as concise as possible.

</comment></comment></comment><comment><USER7> who else thought that this was going to be a rate my picture type site?

</comment><comment><USER8> I would pay money for a button which, when I saw someone retweeting, I could press it and that person would experience an electro-convulsive shock.

I think the existence of your app makes the world a worse place. Please take it down.

<comment><USER8> How about, instead of just modding me down, you explain why this app serves a useful purpose?

<comment><USER9> If I had to guess (which I do), I'd say you were down-modded due to the way you expressed your opinion, not that anyone necessarily disagrees with you...</comment></comment></comment>


Steve Jobs, the Unabomber, and America's love/hate relationship with technology - <AUTHOR> http://radar.oreilly.com/2011/11/steve-jobs-ted-kaczynski.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29 <comment><USER2> I though to myself, is Kaczynski really the poster-child of the view-point that technology can harm civilization? Surely there are thinkers in this area that did not blow up people.

In researching, I found that the Kaczynski was quoted by Kurzweil in The Age of Spiritual Machines, and then re-quoted by Bill Joy in this article - <http://www.wired.com/wired/archive/8.04/joy_pr.html> \- interesting..

Are there more authoritative bodies of work in the realm of this point of view? It seems like a very important view for civilization to reconcile - without being flavored by the legacy of a serial killer.

<comment><USER3> Kaczynski was partially inspired by, and corresponded with, Jacques Ellul[1]. Heidegger[2] is another relatively well known critic of technology.[3] There are many other philosophers who've criticized science and technology. If you are interested, you might want to read about the philosophy of science[4], the field of technoscience[5], and science studies[6].

[1] - <https://secure.wikimedia.org/wikipedia/en/wiki/Jacques_Ellul>

[2] - [https://secure.wikimedia.org/wikipedia/en/wiki/Martin_Heideg...](https://secure.wikimedia.org/wikipedia/en/wiki/Martin_Heidegger)

[3] - [https://secure.wikimedia.org/wikipedia/en/wiki/The_Question_...](https://secure.wikimedia.org/wikipedia/en/wiki/The_Question_Concerning_Technology)

[4] - [https://secure.wikimedia.org/wikipedia/en/wiki/Philosophy_of...](https://secure.wikimedia.org/wikipedia/en/wiki/Philosophy_of_science)

[6] - [https://secure.wikimedia.org/wikipedia/en/wiki/Science_studi...](https://secure.wikimedia.org/wikipedia/en/wiki/Science_studies)

</comment></comment><comment><USER4> I think the the dislike of technology is just the surface of the Unabomber's views. His more interesting view is that our world is incongruent with the environment we evolved to thrive in, which causes mental illnesses and insanity, and the general discontent we all feel. Technology is just 1 of many of those incongruencies. If you read his Manifesto, there's actually a lot of things that make sense, it's just that his ways of trying to instill change was kind of lame and ineffective.

</comment><comment><USER5> A good part of the "hate" in America's love/hate affair with technology dates back to the horrors of World War II and the subsequent threat of imminent nuclear destruction.

Things just haven't been the same since the collapse of the USSR. Anyone born after ~1980 or so is not going to be able to relate with the mindset preceding this.

<comment><USER6> Perhaps not from the same angle, but I think we (1986 here) might be better able to relate than you realize, particularly to Thomas Jefferson's quote about the moral effects of dependence on manufacture. OWS is made of people with nothing to give back to the manufacturers.

But you're right that I've never worried about being nuked.

<comment><USER7> _But you're right that I've never worried about being nuked._

It's really a weird way to live. I grew up with this idea that everything could just be gone just like that: family, hearth, civilization.

Things became odder, personally, when I joined the Marines. Suddenly it looked like being in the military gave one a better chance of surviving World War III than staying on the home front.

Assuming one wasn't at an SAC base, or stationed near a target.

Then one day ... the threat just vanished. Very odd.

 _Thomas Jefferson's quote about the moral effects of dependence on manufacture._

On the other hand we can't all be farmers. And life on a farm back in those days wasn't idyllic just .. necessary.

For all of Jefferson's love affair with the yeoman farmer, he himself wasn't one, wouldn't have been able to think his grand thoughts, read his books if he had to spend 15 hours a day behind a plow.

</comment></comment></comment><comment><USER8> It is shocking that the article left out Kaczynski's role in the CIA's MKULTRA at Harvard.

</comment><comment><USER9> Kaczynski was arguably in part created by the worst aspects of the academia he attacked. It's worth reposting <https://news.ycombinator.com/item?id=3234014> which was posted on HN some time ago.

<comment><USER10> I believe your link is broken - it just leads to this page.

<comment><USER9> doh! The real link [http://www.theatlantic.com/past/docs/issues/2000/06/chase.ht...](http://www.theatlantic.com/past/docs/issues/2000/06/chase.htm)

</comment></comment></comment><comment><USER11> Sad thing is Kaczynski is still with us, while Jobs is not.</comment>


What Every Successful Person Knows, But Never Says - <AUTHOR> http://jamesclear.com/ira-glass-failure

<comment><USER2> To phrase this the nerdiest way possible: good art is NP-Complete.</comment>


Researchers created a test to determine which masks are the least effective - <AUTHOR> https://edition.cnn.com/2020/08/08/us/duke-university-face-mask-test-trnd/index.html <comment><AUTHOR> > Neck fleeces, also called gaiter masks and often used by runners, were the > least effective. In fact, wearing a fleece mask resulted in a higher number > of respiratory droplets because the material seemed to break down larger > droplets into smaller particles that are more easily carried away with air.

Neck fleece actually spreads more droplets than no mask at all.</comment>


Show HN: Promo Codes for my first iPhone App - <AUTHOR>

Hi.
I have read lot of great articles on HN and it has helped me a lot in my journey as an independent developer.
That's why it feels so good to share few promo codes for my first iPhone app.
Below is a small description of the app:
Calci - A simple and beautiful calculator that shows result instantly.
Features:
✓ A beautiful looking calculator that is fast and friendly to use.
 ✓ Saves your time as results are displayed for each keystroke.
 ✓ Automatically prevents you from entering invalid calculations.
 ✓ Clear and large buttons make it easier and faster to calculate.
 ✓ Swipe complete expression to check for mistakes.
 ✓ Beautiful background themes with Retina Display.
 ✓ Accessibility support for VoiceOver.
 ✓ And you will never need the "=" button again.
Itunes link: http://itunes.apple.com/app/calci/id532226932?mt=8
Promo Codes:
MYENR9PYMMAK 6FLK4X9E33EX LHPFEYKMMAXM K7A4XR7A4Y4M KWAHKMJ3WWRW 4NFTFXWPRNAP JKJYKWE6H47R FY9WN4FN4FW7 AR77J47L9Y7X K9EPFTFLMMY3
Thanks. Your honest feedback is always appreciated :) <comment><USER2> Looks pretty neat, and maybe a simple utility app that looks neat is just the way to go on the App Store.

One thing that caught my eye though was: why are the launch images not filled with the numbers? On a similar note, though--I don't have an idea how to solve that while still using lauch images--the launch image is white, changing themes, killing the app and restarting it hence results in a visible flickr.

That said, I did sometimes have trouble hitting the keys, due to the inactive space in between.

<comment><AUTHOR> Thanks for your feedback angerman.

I purposely made the launch image like the way it is. As per Apple Human Interface Guidelines it is better to use a launch image that makes the user feel that the app is loading. That way they wont click on the launch image until it loads and shows the number. But, i can understand your point. When you use a different theme then it may not look right. Don't know if there is a way to use different launch image based on some value.

Using at least some spacing between the keys is necessary otherwise it's easy to hit another key by mistake. Also, i think, it's right think to do design- wise as it gives a decent look to the interface.

Hope i made the right choice.

</comment></comment><comment><AUTHOR> Thanks a lot for your response. It's beacuse of all of you that the post made it to the first page of hackernews. This kind of appreciation means so much :)

Please find some more promo codes for the app below:

7JEF3YKF4M6M HTEMPJYPA63M 4T7RF9KJ9FJ4 3TYWKK4A363H J7KA7AYHJ7ER EYLA6NJX4FHJ WTNARFLK7LY4 4WT9M6TA43KN WMTNT6LN63PJ MHWEHXXNLLNK

</comment><comment><USER3> What are the promo codes for?

<comment><AUTHOR> They are for the Calculator app that i have made. Please read the complete post for details.

<comment><USER3> Are they iTunes codes Do we redeem then then review your app!

</comment></comment></comment><comment><USER3> The codes have all been used

</comment><comment><USER4> All codes are gone :(

<comment><AUTHOR> Just added few more codes. hope you get them this time :)</comment></comment>