"Be yourself" is terrible advice - <AUTHOR> https://theoutline.com/post/7142/be-yourself-is-terrible-advice <comment><USER3> The reason the advice "be yourself" exists, and also why older people tend to be the ones expressing it, is that the danger in not being yourself is that you may wake up one day in a career or surrounded by people that do not accept you for who you are. And you end up trapped in a life where you have to pretend to be something you're not. The idea is that the younger you start being honest about yourself to others, the sooner you will wind up away from people that do not like your true self, and closer to people that appreciate you for that true self.

This advice can backfire if your natural state can get you in trouble and cause damage to your life. A perfect example of people not being themselves for their benefit is mental health services for people with minor issues. While a person's natural state may be to be very emotional, current society frowns upon most emotions beyond happiness, so it may be more beneficial for that person to take a drug to make them more in line with other's emotional level.

<comment> xkcd-sucks Also, "be" is not necessarily a state of passivity. It can be an active process of determining what your goals and life-quality factors, and of carving out space in the world for them. That your self can be an ideal, rather than a default.

Of course life is fundamentally about eating other life, except for bacteria that eat rocks. So there could be an adversarial element to it

<comment><USER4> Totally off topic, but plants and fungi don't eat other life. Plants make their own food using waste products from animals. Fungi use dead and decaying matter for food.

Even more off topic, the only reason I feel the need to comment is my kid is prepping for a Singapore Science test and they seem to have a lot of questions about this stuff.

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

<comment><USER4> That's interesting. I think I saw that on the YouTube channel called Ants Canada. So some fungi do kill living things.

Added: That means some of the answers on the sample Singapore Science tests are not really correct.

<comment><USER5> ah also these [https://en.m.wikipedia.org/wiki/Carnivorous_plant](https://en.m.wikipedia.org/wiki/Carnivorous_plant)

in general blanket statement about the nature are going to always find corner cases

</comment></comment></comment></comment></comment></comment><comment><USER6> The danger factor with "be yourself" seems to be similar to the danger factor of "what do you want". These are meant to be interpreted deeply, not shallowly.

Most people are neither themselves nor know what they want, in the sense that both concepts are frequently constructed for them and not actually derived from the knowledge or best interest of the person. The first order of business when implementing either is to make sure they actually belong to you in the first place.

I.e., if your parents have pushed you to be an artist your whole life and you're actually meh on it, and if you go through social motions without seeing much value in them, neither of these is "you". Which is not to say that either of these things is somehow wrong or bad, but you should reexamine them for yourself to either see their value and keep them or identify them as of low value and discard them.

This is all completely orthogonal to the idea that other people should tolerate your behavior merely on the basis of it being authentic. That simply doesn't follow.

<comment><USER7> It's also very important to completely understand the implications of "be yourself". Which is often impossible. All of this is canon fodder for the narcissistic individualism which can easily make you into a curmudgeon that no one wants to be around... which will make you socially isolated and ill.

<comment><USER6> What are those implications from your perspective?

<comment><USER7> To tone down those tendencies in yourself that are likely to cause you to get into bad situations. For instance perhaps you love to argue, often that leads people to dislike you. Find a way to be yourself and do the things that you enjoy doing without getting contempt from other individuals and society... However, there are professions where this is impossible such as porn star for instance. If you choose such a path as I said know the implications and be willing to live with them. Recently Mia Khalifa got very angry for being called a porn star, something she did for 3 months, she claims. There is someone who was trying to discover who they were and trying things and now their entire self is based on something that they regret doing.

<comment><USER8> > perhaps you love to argue

Or go on HN, where everybody loves to argue.

More generally, the world is broad enough that there's usually a tribe for everyone. You may not find them in your local area. That's an impetus to go beyond your local area and seek them out.

<comment><USER9> Arguing without literacy is shouting.

</comment></comment></comment></comment></comment></comment><comment><USER10> Be yourself is a non-statement. I don't know what it means. Does it mean follow my primal urges? Follow my idealistic goals? It doesn't say anything.

<comment><USER11> I think it's supposed to be something like "don't only try to emulate others".

<comment><USER12> As best I can tell it means, "I'm naturally good in social situations, the point where I don't have to think about it. If and when I do, that just makes things worse because then I'm noticeably self-conscious. I'll assume you're just like me and need to do the same, because I don't know what it's like for that to be different."

The most charitable interpretation I can give the advice is, "Yeah, you're not skilled at this, and there isn't much I can do to help. But there are likeable aspects about yourself, and they don't shine through if you're constantly focusing on imitating some external model of how to do it right. The best you can hope for is _not_ to have such unforced errors, so that at least you can keep whatever wins come from the real you."

<comment><USER13> Even your "charitable" interpretation is obviously not charitable. "Yeah, you're not skilled at this" is not what people mean when they say "be yourself", unless by "this" you mean "emulate other people". Instead, what they mean is "You are naturally skilled enough at this thing, so stop doubting yourself and just stick with your natural skill/gut"

<comment><USER12> If it's not charitable, then at least it's usually correct. People giving the advice are generally unaware of what it's like to be naturally skilled at social interaction, and think it's just a matter or relaxing and enjoying yourself.

If they think "you're naturally skilled at this", they're usually mistaken.

My charitable version is what people would say if they could be honest and were aware of the relevant facts on the ground.

<comment><USER13> > If they think "you're naturally skilled at this", they're usually mistaken.

We have completely different anecdata. I've said and heard people say "be yourself" many times. Rarely have I seen it go awry. Typically the people who say "be yourself" are naturally skilled at social interaction, so they can read whether the person is also able to socialize and make the right decision. But I can see how someone who lacks social skills might repeat the saying without even noticing the level of social skills of the person they're saying it to. Much like what this commenter was talking about: [https://news.ycombinator.com/item?id=19702757](https://news.ycombinator.com/item?id=19702757)

<comment><USER14> Your imaging a direct 1:1 scenario where the phrase is said referencing a specific moment. The problem is this advice is also given generically in one to many contexts or in writing form where there is no temporal component.

<comment><USER13> You're right, giving advice to a wide audience increases the chances of it harming people.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER15> "Be yourself" as advice is bad advice if you take it uncharitably. It's good advice for individuals that repress their identities and discard their own happiness - e.g. gay men and women that force themselves to act straight (though not without caveat as death/execution/persecution is very real). If you reinterpret it as "be authentic" or "become yourself", it again takes a better meaning for those without fundamental crises of identity. Self- actualization is at the top of Maslow's hierarchy of needs for good reason. Despite this I don't disagree with the advice to "be less yourself". I don't think article is wrong and this advice still resonates with me - <USER2> detours is part of life. If you need to take a step back to take two steps forward, it's worth it - but god damn it you should still "be yourself" at the end of it all. If you have to lose who you are, it's not worth it.

<comment><USER16> The variation I like is, "Become who you are."

<comment><USER17> That's Nietzsche's "werde, der du bist".

<comment><USER18> > _The human who doesn 't want to belong to the masses need only cease to go > easy on themselves; let them follow their conscience, which cries out to > them "Be yourself! You are none of those things that you now do, think, and > desire." Every young soul hears this call night and day and trembles, for > when it thinks of its true liberation, it has an inkling of the measure of > happiness for which it is destined from eternity. As long as it is shackled > by the chains of opinion and fear, nothing can help it attain this > happiness. And how bleak and senseless this life can become without this > liberation!_

\-- Friedrich Nietzsche

That's not permitted though. This is the framework that is permitted, and within which we can discuss the difference between "be yourself" and "just do what you want" in articles of appropriate word count as suggested by the editor:

> _[Hobbes] foresaw the necessary idolatry of power itself by this new human > type, that he would be flattered at being called a power-thirsty animal, > although actually society would force him to surrender all his natural > forces, his virtues and his vices, and would make him the poor meek little > fellow who has not even the right to rise against tyranny, and who, far from > striving for power, submits to any existing government and does not stir > even when his best friend falls an innocent victim to an incomprehensible > raison d 'etat._

\-- Hannah Arendt, "The Origins of Totalitarianism"

We have this "open world sandbox", moot and harmless, utterly devoid of deep meaning, because it's all printed on stickers without any lasting adhesive, that can and will be removed without any trace or consequence. We may not have noticed this, but our brain did.

Most "thought" expressed in the 21st century stems from rationalizing around that elephant on the couch, that's what I think. When I come across a turtle on its back in a desert, I don't know quite know what to do, I never seem to be able to help and it's really stressing me out, but I know what I will NEVER do, I will never say " _oh, I guess that 's just what the turtle does, that's just how it walks, it's not dying, that's how it lives_".

</comment></comment></comment></comment><comment><USER19> To me, the hn version of "be yourself" is "You'll never beat Mark Zuckerberg by trying to be Mark Zuckerberg. Mark Zuckerberg will always be a better Mark Zuckerberg than you." (I think this is a pg quote, correct me if im wrong) That isnt saying that you dont have room for improvement or that you are your authentic self or whatever, but rather that you compete with people on the results and by trying to copy their methods you will never reach further than them. Do something unique / different. Do something that only you have insight to. To me, thats what being yourself is all about: using your unique strengths to succeed.

<comment><USER20> Why would you want to beat him anyway?

<comment><USER21> I heard that if I can't beat him, I have to join him, and that sounds undesirable.

<comment><USER22> You just get consumed for nutrients and become part of the mark-mind.

</comment></comment></comment></comment><comment><USER23> I've always interpreted "Be yourself" in the sense of the old saying "to be, rather than to seem" [1]. It's not an affirmation of you being perfect, it's just saying that you can't even begin to know yourself and your true merits if you spend your time just trying to appear a certain way for the benefit of others.

Yes, the author of this piece had to learn the hard way that their attitude was toxic, but had this person never actually felt consequences from that behavior - there would be no hope at all for growing into a better person. You must be accountable for yourself, and if you think you must hide yourself to be liked or just follow someone else's example all the time - any time something breaks down, you won't know if it's because what you're pretending to be is wrong or if you're just doing it wrong.

The accountability necessary for personal growth is therefore precluded on accepting that the actions you take are fully your own, and consistent with your own conception of self. It's better to be wrong and learn why than to chase temporary praise through shallow, idealized imitations that serve to suit the expectations of whatever audience you value at the moment. Because when you cast off one imitation for another one, it will make it hard for anybody to know what you actually value - including yourself.

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

</comment><comment><USER24> I've known lots of great, kind people that were shy, or scared to be made fun of, or just lacked confidence. "Be yourself" is great advice. It means, I know you and you are a great person, you just need to be yourself. No one ever told this "loudmouth" to "be yourself". We tell those people they need to be a better self and go to therapy.

<comment><USER25> yes, i wouldn't tell e.g. the author of this piece to "be yourself" personally

</comment></comment><comment><USER26> I don't particularly like the simplification to 4 letters, but the Myers- Briggs test does do one thing right: it assigns positive self-worth to all 16 personality types it defines, and it addresses the challenges in the different types very clearly.

It shows how different people in this world can find paths to success without all of them having to be stamped out clones.

I think what be yourself means most of all is understanding the _implications_ of being yourself. Self-awareness of the downsides to extreme ends of your personality - being too trusting, too cautious, too demanding, too brittle, too accommodating, too demonstrative, too anything that in and of itself is a perfectly normal human trait - goes a long way.

</comment><comment><USER27> The tricky part is that, in order to be yourself, you have to _know yourself_. (The age-old conundrum.)

To the extent that you've been 'socialized into' adopting the behaviors of those around you (often unwittingly), your authentic self may be buried ... even (for some) forgotten.

Most of us, I suspect, are reminded now and then of times in our teens/early 20s when we acted in ways that we now regret. In ways that might have sickened our pre-teen selves. Where were our 'selves' then? Well, as Blake put it, 'You never know what is enough unless you know what is more than enough. '

First know, _then_ be.

</comment><comment><USER28> Whether or not "being yourself" is interesting advice depends on the listener. Some people are in a context where deciding when to "stop" in a few key moments per day is more interesting than deciding when to similarly "go". The person in the article calls themselves a loudmouth, so clearly this person is focusing on a scenario where restraint is a persuasive value, versus a scenario of social anxiety.

</comment><comment><USER29> Be yourself is a phrase which implies stagnation.

I heard a joke once that "past me was an ass hole, and ate that cake so now I've got to run." or something like that. That's the way I try to think about this. If I don't look back at past me with a little bit of that same feeling I get when looking at old code then I haven't grown. And I try to use that to remind current me that future me matters too.

<comment><USER30> I do this. I learned a long time ago that past-me could be quite an asshole even to future-me. Thinking in this context allows me to assess the now and try to be a better past-me while in the present. I consider how future-me will react and adjust my actions accordingly.

<comment><USER31> Unfortunately it turns out that nobody, not even me, likes future-me. So fuck that guy, i'm going to leave that task for tomorrow

<comment><USER32> Some people aren't too happy about past-you either.

</comment></comment></comment></comment><comment><USER33> "But you and I know that the real effect of salt is exactly the opposite. So far from killing the taste of the egg and the tripe and the cabbage, it actually brings it out." \--- [http://merecslewis.blogspot.com/2011/03/can- world-see-christ...](http://merecslewis.blogspot.com/2011/03/can-world-see- christ-in-us.html)

<comment><USER34> Substitute humility for salt and personality for the tripe and cabbage. That was Christ's message after all, right? Beyond any supernatural phenomena, the whole New Testament seems to be a testament to humility. Like, 'I am literally God and even I am not above washing another person's feet, get over yourselves Romans'.

</comment></comment><comment><USER35> Better advice is "Know yourself." That implies the need to develop the ability to step outside of yourself and examine your behavior, desires, assumptions, and reactions. I say "develop the ability" because for many people, this is not an innate ability, but has to be learned. It also required brutal honesty. Some people cannot do it.

<comment><USER36> Yes! Great talk on that subject here: [https://www.youtube.com/watch?v=O2eWOqz_mJ0](https://www.youtube.com/watch?v=O2eWOqz_mJ0)

<comment><USER35> Umm... that is a song by Drake, and is incoherent nonsense. I assume you meant to link to something else?

</comment></comment></comment><comment><USER37> You are already yourself. Be yourself is not an advice needed, but not to avoid it either. Rather, is good to learn from your experience what is better, to learn better. Yourself one year in future is not necessarily same like yourself one year in past, so, improvement is possible to do.

</comment><comment><USER38> Be yourself. Unless you're an asshole, then figure out how to not be an asshole, then be yourself.

<comment><USER39> What if everyone is an arsehole, and the only variation is the degree that they let that show?

</comment></comment><comment><USER40> Conan O'Brien on Johnny Carson:

Rule number one is just be yourself. And that's actually the first thing, when I got the Late Night Show -- I bring them up now because they just did this great documentary about Johnny Carson -- one of the first people I talked to was Johnny Carson and he said, "Just be yourself." He said "It's the only way it can work." He didn't say it would work, because he's being honest; he didn't know me. You might be yourself and it would be terrible. But he said, "Be yourself, it's the only way." There's an honesty to that. I do think that that's a little bit timeless.

</comment><comment><USER41> My version of it: don't be yourself, work towards being the best person you can be.

<comment><USER42> I like this interpretation. I think the entire reason my social awkwardness has diminished in the past decade is that I've learned to ignore worries about how people see me and just focused on trying to make things better whenever the opportunity overlaps my skills. 'Being myself' means fuck-all but 'using my skills to support others' has some meaning.

It's not a competition, and the universe doesn't give a shit who's happy. No one's owed anything. Make things better for those around you, and maybe it'll spill over. No guarantees... but as a hand it's all we hold against death and taxes.

</comment></comment><comment><USER43> The piece is really talking mostly about socializing or interacting with others. In middle school everyone goes through the phase where they are complaining about everyone else "not being themselves." It's at that age that you should learn the lesson that interacting with different groups of people requires tact, empathy and all the other things that make living alongside each other possible. It seems that some people, usually people with a lot of social capital, just take a bit longer to learn that.

</comment><comment><USER44> Be someone that you like and respect. Then be yourself.

The usual platitude skips all the hard prep work required for "be yourself" to actually be good advice.

</comment><comment><USER45> Highly recommend the book 'Wisdom of Insecurity' by Alan Watts. This article touches on the search for an immutable self but it doesn't quite make the leap that there isn't one and that the advice to "be yourself" is never going to bring any psychological satisfaction.

</comment><comment><USER34> No, it's absolutely fantastic advice. But there's a second part of it that needs be attached. Be yourself, and be ready for feedback. Your self might just be awful. I think everyone has this happen to them, where who they are needs some adjustment to fit into the bigger picture. Not to blindly conform, but to really find your niche.

The feedback may not always be pleasant, especially if you've spent a lot of time not being yourself. If the self you've constructed deviates so far from the norm, you're going to struggle normalizing it. Maybe you've created the next big thing, and everyone needs to adjust to you, sure. But maybe you haven't. And even if you have, you're going to need to assist everyone in understanding how you've come to where you are. And that's going to take work.

Again, being yourself is the best thing you can do. It's great advice. Be ready for feedback. And be ready to defend your self against that feedback or to let if guide you. But there's absolutely no other way to live your life than to be yourself. At all. Anything less is a soulless existence; an existence worse than death.

TLDR, be yourself, and be ready for a reality check. It might come, it might wrong, it might be anything. But do not sell your soul to someone else's.

</comment><comment><USER46> It's funny because contrary to the title it sounds like the author wasn't being themself, but rather a persona they thought they should be. Another way of saying it is, "don't be someone you're not."

<comment><USER47> I agree, this read as a long winded article for the author to "stick it to" the person they are projecting blame for the consequences of their own actions and inexperience.

</comment></comment><comment><USER48> It's only bad advice when applied universally. ANY advice given to single individual applied to everyone regardless of context/circumstances is going to turn out terrible.

<comment><USER33> I like, "Love your neighbor as yourself."

</comment></comment><comment><USER49> "Be yourself" is the only thing that matters.

"Being free does not lead to decadence. It brings out potential." \-- Shigesato Itoi

</comment><comment><USER50> Skillful (ie flexible and situation dependent) application of this generally useful principle is key, as I have learned the hard way.

</comment><comment><USER51> "Become the person you want to be" might better capture the sentiment we tend to express with advice like this.

</comment><comment><USER52> I've heard the adage, Be the best version of yourself you can possibly be. Become your Platonic ideal.

</comment><comment><USER53> The lack of self awareness in this article is cringeworthy.

Just read the headline, that's as good as it gets.

<comment><USER32> I read it as mistaking the beginning of self awareness for being well along the journey. I try not to judge. Every time you look back the road ahead is longer than you thought it was at the time.

<comment><USER53> I think it's OK to judge in this case given the articles casual sexism and racism, inevitably alongside Godwin's Law.

</comment></comment></comment><comment><USER54> > Don't try to be like someone else, don't try to act like someone else, be > yourself. Be secure with yourself. Rely and trust upon your own decisions.

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

</comment><comment><USER55> It is great advice. For the person who is giving it.

</comment><comment><USER56> How about "overcome yourself to become a better self"? Or to put it another way "Don't act like who you are, act like the person you'd like to be"

</comment><comment><USER57> What I learned was, "be yourself" is terrible advice if "yourself" is the kind of person who writes for Gawker.

<comment><USER32> I was going to say something acerbic about the sort of life choices that lead to animated gifs for horizontal rules, but it looks like that was decided by Gawker, not the author.

</comment></comment><comment><USER58> '"Be yourself" is terrible advice' is terrible advice... Ok, mediocre advice.

<comment><USER59> Next on Hackernews: "\"Be Yourself\" is terrible advice" considered harmful

</comment></comment><comment><USER60> The real surprise here as that he got to 27 without realising this.

</comment><comment><USER61> Be yourself, but don't ever be complacent and always try to improve yourself as well.

</comment><comment><USER62> Yes, be yourself. Own who you are.

Accept who you are, brutal honesty.

Then begins a self talk. You can't really have it be meaningful prior to brutal self acceptance.

Own your future. Who you are today is not who you have to be, or even will be.

It is all about who you can be and why.

When that why is rooted in your reasons, the change comes easy and it will endure too.

In all of that is the difference between having to manage a layer of abstraction, forethought, dedicated to some sort of compliance or show

, and

thought as action, your very nature being that which makes sense, treats others, itself well.

Own yourself. Others doing it for their reasons will leave you a mess, inhibited. Don't do it.

Edit: how do I know?

Did exactly what I put here in my 20's. Walked away from ugly family issues, religion and a lot of hate and intolreance.

Married someone better than me, in the gets people sense, and she did the same in the technical sense. We made each other better.

Owned it all the day I walked. Resolved to sort every last bit if all that shit and did, one long drive to work at a time, and one simple choice at a time.

Starting is the hardest. Once doing this becomes part of your nature, the rest follows naturally.

Another edit:

Parts of this struck me the wrong way. Comment removed. Too harsh. Their story is solid.

Is is things like this:

>holistic self does not exist; we are made of many selves that are revealed through endless experimentation and self-examination.

I would argue the self grows and matured, can become more complex, or simplify, based on experiences, and choices.

Many selves, to me, is a compartmentalized mind, presenting fragments based on context.

Those compartments can be resolved as the self-lies, failure to reach self acceptance are resolved.

Lies compartmentalized our reason. So can simple error, denial.

There is the reason, and there is what is associated with the lie or elevation of error or belief to fact. Reasoning across these boundaries us difficult and can be a source of anxiety to some, anger, shut down for others.

The sense of who you are does not have to be so fragmented. That same process of self discovery and ideally acceptance can be revisited to decompartmentalize and congeal who we are into a more atomic entity.

I would argue we benefit from doing that.

</comment><comment><USER63> Buddhist interjection: realize that there is no self (and no free will), and wonder in which century will people stop talking nonsense like "be yourself".

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

Edit - Kierkegaard's rambling quoted in the article points to the difficulty of pinpointing the "self", the essence of a human (where's the essence, the self, the soul of a car - a buddhist would ask?):

 _> Man is spirit. But what is spirit? Spirit is the self. But what is the self? The self is a relation which relates itself to its own self, or it is that in the relation [which accounts for it] that the relation relates itself to its own self; the self is not the relation but [consists in the fact] that the relation relates itself to its own self. Man is a synthesis of the infinite and the finite, of the temporal and the eternal, of freedom and necessity, in short it is a synthesis. A synthesis is a relation between two factors. So regarded, man is not yet a self._</comment>


The Modern Tech Stack - chupa-chups https://imgs.xkcd.com/comics/stack_2x.png <comment><AUTHOR> I think it is bad form to link directly to the image file of an xkcd post rather than the post itself, not to mention that you won't have the hover text.

[https://www.xkcd.com/2166/](https://www.xkcd.com/2166/)</comment>


YC Backs Its Next Nonprofit, Coding Education Program CodeNow - <AUTHOR> http://techcrunch.com/2014/02/27/codenow-joins-y-combinator/ <comment><USER2> I love this because it works on getting kids into the wonder and power of coding before they hit the CS meat grinder later on. Falling in love with it and getting some experience before they hit more rigorous learning down the road. It will help a lot of other CS & engineer majors in their first year. I hope that made any sense.

<comment><AUTHOR> Thx! Exactly our goal. Get them excited about learning to code early on so they will stick with it as it becomes more difficult.

</comment></comment><comment><USER3> I'm curious what kind of programming will be taught. Processing? Python? Javascript/jquery? Will the focus be on more 'learning the basics' i.e. what is an array, how to write a forloop or a focus on a specific, usable language?

<comment><AUTHOR> We teach Ruby. Students learn about: \- variables \- notion of different data types (string / integer/ array / hash) \- string interpolation \- iteration / enumeration \- looping \- boolean conditionals \- defining/invoking methods

<comment><USER4> Neat. What lead you to decide on Ruby? I feel like Python used to be the most common beginner language, and maybe it still is, but it really seems like Ruby has gained over the past few years. Which is fine, because it's a great language, but I am curious what gives.

<comment><AUTHOR> When we first started we had an amazing group of volunteers with experience in Ruby. Our focus is project based learning. It's been perfect for this.

</comment></comment></comment></comment><comment><USER5> Really nice to see a new ambitious program. As a you are a non profit, I'm interested to learn about how you imagine working with other existing initiative like (from memory) Coder Dojo, or Girls who code. (We of course need thousands flowers, with everything from family-lead activities like our Coding Goûter, to non-profits, to for-profit workshops or lessons, and even in-school programs. At the same time I feel we also need to build up a positive ecosystem of code education. We are not at the whole ecosystem stage yet.)

<comment><AUTHOR> Thx! The ecosystem is starting to develop. We have conversations with most of the established orgs in the learn to code space. It's important to attack the problem from multiples angles.

</comment></comment><comment><USER6> "A new approach, which the classes have already begun to adopt, is bringing more students in but dividing them into groups of six to eight. Each of those groups will work with their own volunteer trainer, and they'll move at their own pace."

If the goal is to scale small group in-person instruction, why not use Open Systems Instruction? This seems like the perfect use case. The book Public Schools Should Learn To Ski describes the benefits really well, but I'm sure there are other books on this.

<comment><AUTHOR> Not familiar with Open System instruction. Is it similar to Open Learning? Our model draws threads from the flipped classroom approach.

<comment><USER6> No, it's a variant of the Keller Plan, but without the bias toward written instruction.

</comment></comment></comment><comment><USER7> Wow this is fantastic. I think exposure to this kind of stuff is something that not enough kids get. It's not their fault and I'm glad to see somebody taking charge of spreading the word about tech.

I'm working on a hackathon to merge students (not just college) and professionals in NYC and would love to get in touch with you guys.

<comment><AUTHOR> Thx! Would like to learn more about what you're working on. Send us an email info(at)codenow(dot)org

</comment></comment><comment><USER8> Great to hear a non-profit is attacking this. Unfortunately, companies like code academy don't benefit from users actually learning to code. They are focused on user engagement. Ideally, they are one and the same, but in reality so many of these "learn to code" platforms do not teach the concepts very well.

<comment><USER9> Even for-profit companies could make "fix" vs. "ongoing treatment" work in a market where there is a constant supply of new patients (children) and a huge market relative to the size of the company. If one person learns to code reasonably well through something like this (or codecademy), referrals should be cheap customer acquisition.

</comment></comment><comment><USER10> What's the point of teaching people to program? Why is this a non-profit? Why not make this a for-profit entity? Does this have noble goals that aren't addressed by a free and for-profit market? If so, what are those goals? Is this the best way to achieve those goals?

<comment><USER10> _crickets_

<comment><USER11> Your questions made me think that any response would probably be met with comments like "well, what do you mean some people are 'disadvantaged'? Why don't they just study something useful and work hard? What do you mean 'deserve'? What do you mean 'under-represented'? As compared to what, some kind of _ideal_ representation? What is this bleeding heart rubbish? Why don't you _trust_ the market?'

Dunno about everybody else, but it doesn't really seem a conversation worth having to me.

<comment><USER10> If the conversation isn't worth having then why are we even talking about non- profits at all?

What's the point of having YC support a non-profit venture?

<comment><USER11> Sorry, I wasn't clear. I don't think the conversation would be worth having _with you_ because of the giant gap between your starting position and reality.

</comment></comment></comment></comment></comment><comment><USER12> Congrats on being YC's newest nonprofit! The scalability of in-person training is a concern that I have with my education /consultancy business, as well. I look forward to hearing more about how you expand to hundreds of thousands!

</comment><comment><USER13> Sounds like a fun program! Come to Cleveland, we could use something like this.

</comment><comment><USER14> Great idea! Glad to see them getting the help growing.

<comment><AUTHOR> Thx! Excited to have YC's support.

<comment><USER15> Hi Ryan. I want to talk to you about expanding further. My email is in my profile. Thanks.</comment></comment></comment>


Browser Hacking 1: Testing Your Code - <AUTHOR> http://www.0x000000.com/index.php?i=521 <comment><USER2> The website listed, <http://browsershots.org/>, is actually really cool. These kind of automated screen shot sites have popped up now and then, but this is definitely the best "free" one I've seen.</comment>


Annon: Configurable API gateway that acts as a reverse proxy with plugin system - <AUTHOR> https://github.com/Nebo15/annon.api <comment><USER2> I find it interesting that there seem to be things called out as features which conflict:

1\. Recording all requests in a database - feels like only very low value targets could do this. Exposing a database record of requests within the same software stack as your gateway (ie. First line of defense sort of space) feels like its immediately risky. This is why large enterprises tend to rely on their backends to do full white box auditable records keeping but as you move closer to the edge the amount of information stored gets stripped back until you should really only have correlation ID's and time stamps which should be getting shifted off-box in a hurry so they can be ingested internally. 2\. Guaranteed immutability of requests which is specifically called out as useful to financial institutions. While I won't deny this is probably a nice thing to have, its also really only valuable in reducing load on your systems of record by removing duplicate requests or refiring them only as needed. As mentioned above, its the core systems of an enterprise like a bank that will be doing all the record keeping. So it will likely also be this core system that is in charge or recognising and rejecting duplicate transactions, otherwise you're throwing a lot of really important decision making about what requests those core systems should see a long way away from those core systems, meaning you are almost definitionally less able to make a sensible decision about if that request should be sent again or not. But then again, you're also that much closer to the client application so might be able to pick a lot up from context that your systems ot record would be oblivious to.

I'm not really sure I can see perfectly clearly where this particular gateway would sit in the ecosystem...

</comment><comment><USER3> So an alternative to Kong inspired by Kong [1]? I wonder what were the reasons behind building this, can the author(s) weigh in would be interesting to know?

[1] [https://github.com/Kong/kong](https://github.com/Kong/kong)

<comment><USER4> I don't know about this project. But I have been using Kong and eventually have to remove it and run with Nginx directly.

Kong add significan overhead, especially when you use statsd plugin. When under high load, say 10kRPM, Kong has 1-2% error request rate. I endedup removing Kong and use Ingress Nginx directly with some Lua script.

It isn't as efficient and conveniene as Kong but it perfoms better.

<comment><USER3> Thanks for sharing, it's nice to see that some people are actually seeing performance issues with open source tools, it probably helps the maintainers keep an eye on what's needed to be fixed "next" \- well if they read these comments at least!!!

</comment></comment></comment><comment><USER5> Sounds similar to Repose ([http://www.openrepose.org/](http://www.openrepose.org/)).

<comment><USER6> or [https://traefik.io/](https://traefik.io/)

<comment><USER7> or [https://github.com/HotelsDotCom/styx](https://github.com/HotelsDotCom/styx)

</comment></comment></comment><comment><USER8> Example client code would be useful

<comment><USER9> Wouldn't the client code be dependent on which API the gateway is proxying?</comment></comment>


Writing great documentation: you need an editor - <AUTHOR> http://jacobian.org/writing/great-documentation/editors/

<comment><USER2> I recommend the Economist Style Guide. My friends who are print journalists regard it highly. A slim novella of the guide is available for offline reference.

 _"This guide is based on the style book which is given to all journalists at The Economist."_ <http://www.economist.com/research/styleguide/>

</comment><comment><USER3> I was hoping this was going to reveal the secrets of which editor makes docbook not suck.

</comment><comment><USER4> "Change your margins" is one trick for reviewing your own text. The author says it makes it easier to be impersonal.

I wonder if changing your highlighting scheme would help you review your own code?

</comment><comment><USER5> My favorite trick for self editing is an extension on the "change your margins" trick. My print writing/publishing cycle involves typesetting, so even if it's not going to be used for my final target I typeset things in LaTeX and then edit them there. Wide margins and a totally different presentation from my monospaced text editor makes detachment much, much easier.

</comment><comment><USER6> Usually it annoys me that I edit my blog post with narrow (editing HTML) margins, then see it at full width after I hit "post".

As he points out here, even a little trick like that _does_ make it easier to edit. And I _do_ manage to find a lot of my flaws very quickly. So I guess I'm benefiting from this trick.

</comment><comment><USER7> Slightly o/t: Does the font on his site look awful to anyone else? In opera, the site looks like this for me, which is horrible. I have to mash the readability script bookmarklet to read it: <http://imgur.com/ODnjY.png>

<comment><USER8> Slightly off-topic, indeed :)

But yes, I have the same problem. I'm using Opera too, and use shift+g to disable stylesheets when reading that page. (You need to enable single-key shortcuts for this to work)

<comment><USER9> Another Opera user chiming in, same problem. On Windows. Thanks for the shortcut.

</comment></comment></comment><comment><USER10> He makes some good points, but you don't necessarily have to ask before editing open source docs. For example, if they're publishing in a wiki you can pretty much assume its ok to jump right in and start editing.

</comment><comment><USER11> "Writing great documentation: you need an editor"

I use Emacs.

(Sorry, couldn't resist.)</comment>


Tim Cook says he stands behind the 250 Dreamers currently working for Apple - <AUTHOR> https://techcrunch.com/2017/09/03/tim-cook-says-he-stands-behind-the-250-dreamers-currently-working-for-apple <comment><USER2> what does Tim Cook's tweet.... mean?

A solution... "rooted in American values"....?

Does he mean an immigration policy/work permits rooted in American values? If so...what does that look like practically?

<comment><USER3> That is up to further debate.

Tim Cook's tweet means what he says - eliminating DACA is un-American.

<comment><USER4> US Gov saying it is unwilling to foot the bill for these non-citizens.

With these responses, and lack of discussion of "backup plans" for said DREAMers, these highly profitable multi-national corporations are saying the same thing.

Where is our collective outrage?</comment></comment></comment>


Tesla Rejected Uber Partnership on Self-Driving Cars - <AUTHOR> https://www.bloomberg.com/news/articles/2017-05-16/tesla-rebuffed-uber-partnership-on-self-driving-cars-in-2016 <comment><USER2> I wonder if it's possible to have a negative value for the Goodwill line item of the balance sheet.

<comment><USER3> You're joking, but yes.

</comment></comment><comment><USER4> So every day on HN I see articles explaining 1) why Elon Musk and Tesla are great, 2) why Kalanik is evil and Uber is going to fail, and 3) why Trump is evil and stupid.

This article comes very close to all three (only briefly mentioning Trump).

Now, I dislike Trump and Elon is my hero (don't know much about Kalanik), but clearly there's a very serious groupthink problem going on here on HN.

All three of these men are mere mortals and only have 24 hrs/day. They can't commit great crimes or great heroic acts every single day. Yet, these articles hit the top of the feed every day and seeing these articles every day is going to cause your brain to outweigh these articles, seriously distorting your perception of reality.

I suspect this is why some were so surprised by the election result. I actually bet my money on Trump even though I dislike him (he's a slimy jerk, but he's not stupid). And while many here are 100% sure Uber is going to flop, I'd be tempted to put money on Uber. Their business model looks insanely good to me (if self-driving cars or government actions don't wipe them out).

Unfortunately, this reality distortion isn't a problem restricted to HN.

<comment><USER5> Yeah, paulgraham had an article about these constant pr pieces. [http://paulgraham.com/submarine.html](http://paulgraham.com/submarine.html)

<comment><USER6> this is not a submarine piece... which company's pr firm paid for this? tesla? (why?) uber? (serious?) how about the guy who is writing "wild ride" who only got one sentence in the article? (well maybe.. but that's kinda weird if he only asked them for one quick blurb)...

</comment></comment></comment><comment><USER7> "That's when I knew Tesla was competing."

^ Reactions like this will make it even harder to strike partnerships in the future.

</comment><comment><USER8> If they didn't both projects would be "tizenified".

</comment><comment><USER9> Of course they rejected the partnership. Why wouldn't Tesla compete rather than partner? And Uber is valued at $60B while Tesla is valued at $50B. Hmmmmmm....

<comment><USER10> error</comment></comment>


Is it hubris for HN to routinely change published titles of articles? - <AUTHOR> As a regular reader and submitter, I'm always struck by how, on a regular basis, titles published by reputable newspapers, magazines, and — less frequently, but not never — scientific journals are edited and reworded and sometimes completely redone by HN moderators. <comment><USER2> There are a few guidelines about titles:

> Please don't do things to make titles stand out, like using uppercase or > exclamation points, or saying how great an article is.

> If the title includes the name of the site, please take it out, because the > site name will be displayed after the link.

> If you submit a video or pdf, please warn us by appending [video] or [pdf] > to the title.

> If the title begins with a number or number + gratuitous adjective, we'd > appreciate it if you'd crop it. E.g. translate "10 Ways To Do X" to "How To > Do X," and "14 Amazing Ys" to "Ys." Exception: when the number is > meaningful, e.g. "The 5 Platonic Solids."

> Otherwise please use the original title, unless it is misleading or > linkbait; don't editorialize.

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

<comment><AUTHOR> >unless it is misleading or linkbait

Ah, therein lies the rub.

</comment></comment><comment><USER3> Setting aside the guidelines against clickbait titles or editorializing, one has to consider the tendency on HN for readers to only engage with the title, and not read the article at all. Assuming for the sake of argument that most titles aren't egregiously misleading or clickbait to begin with, many might still be triggering and need to be toned down.

Also, HN limits all titles to 80 characters, because I guess everyone is reading this site on a terminal, so any title longer than that has to be edited.

What I don't like (besides the character limit) is when they change the URL and throw the context of the thread off. There ought to be some way to link the history of comments to the history of editorial changes but I can't think of a solution that HN would consider elegant.

<comment><AUTHOR> I like the character limit because it forces me to really think hard about the piece in order to cram, say, a highly technical, oftimes abstruse 200-character scientific journal article title into the 80-character HN space.

<comment><USER3> HN should be able to handle a highly technical article title, though. And if people can't, then someone can explain it in the comments.

It becomes a problem when you lose necessary context in fitting the title in the limit, causing confusion or misinterpretation of the title. I've seen arguments started over it. There's one current example here[0] where "India's Yes Bank" was shortened to Indian Bank" in the title to make up for the original being two characters over the limit. Turns out there's an actual "Indian Bank[1]" and now the title is misleading. All because we can't have a title with 82 characters.

Granted, it doesn't happen often, but every time it does happen, it would have been trivially easy to avoid by either not having a character limit for titles, or having a more reasonable one like 120 characters.

Edit: also apparently just happened here[2].

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

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

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

<comment><AUTHOR> Twitter wouldn't exist if it weren't for the character limit.

<comment><USER3> Twitter's character limit was originally intended for posting on SMS, and remained long after it was even relevant. And they extended the limit recently anyway. And people work around it by linking multiple posts, so it doesn't even really matter.

And... I'm specifically talking about title length, not article length. Tweets don't even have titles.

</comment></comment></comment></comment></comment><comment><USER4> Personal view: While it may not feel ideal, and initially the thought of it happening did feel off, I feel that the title changes are actually very helpful as it often results in clearer titles, which sometimes aren't very to- the-point or are unnecessarily sensationalized.

<comment><AUTHOR> But, but — the original titles were created by either authors and/or editors who surely must be respected for their professionalism.

<comment><USER4> My reply may seem a bit off-topic: Whenever I think of titles of news articles (not research papers though), I often think of how some news organizations have pretty ad-hoc processes of coming up with headlines (titles), for instance this process outlined by Ars Technica [0]:

> Staffers have various methods for coming up with headlines. I prefer to > think of my headlines first after researching but before writing the > piece—not only does this mean I'm attacking the headline with my creative > batteries fully charged, but the act of figuring out the headline helps also > give the piece some shape in my head.

> Other folks have other methods, and we keep a #headlines Slack channel > running for staffers to help workshop ideas. If you're having trouble with a > headline—or you can't quite think of the right approach—everyone available > lends a hand.

> The overall objective is to whittle the choices down to a pair of punchy but > informative headlines that give readers a reason to click without being > clickbait. The two headlines then both run on the front page in an A/B test, > which shows different headlines to different visitors. The software uses > statistical math to pick a headline "winner" based on which headline is > selected more often by the visitors who see it in the first few minutes. A/B > testing headlines gives us some idea of what types of headlines resonate > best with different kinds of pieces; we use what the A/B test tells us along > with a number of other data points to help us write better headlines.

This is not to imply that the headlines which are picked are non-optimal, but that there is a drive to not only experiment with headlines but also to get help from their peers on a dedicated Slack channel for it, as picking a good headline is not easy. While you're correct in stating that there needs to be respect for the authors and ideally thus not to change their headlines on HN, it very much seems that picking a headline in general is inherently tough as it involves condensing an article's overall point into less than 80-100 characters, which could result in non-optimal titles at times, and in some cases possibly lead to poor titles.

[0] [https://arstechnica.com/information-technology/2020/01/no- of...](https://arstechnica.com/information-technology/2020/01/no-office-no- problem-how-ars-technicas-remote-workers-work/)</comment></comment></comment>


Oil price shock means China is at risk of blowing up - <AUTHOR> http://www.telegraph.co.uk/money/main.jhtml?xml=/money/2008/07/07/ccview107.xml

<comment><USER2> One thing I've wondered: why aren't there more factories in Mexico? With low wages, high unemployment, semi-skilled workers, lax environmental laws and easy access to the world's largest market it would seem to be an ideal place to outsource manufacturing to. What does China have that Mexico doesn't?

<comment><USER3> There are lots of factories in Mexico.

 _The industrial sector as a whole has benefited from trade liberalization; in 2000 it accounted for almost 90% of all export earnings._

 _25.7% of total GDP_ (...vs about 40 percent for China.)

I think there might be some differences, though, as the success of Japan, Taiwan, South Korea, and Hong Kong seems to be predictably repeating itself. Something about the Asian character doesn't seem typical,

[http://www.motherjones.com/news/exposure/2005/07/exposure_58...](http://www.motherjones.com/news/exposure/2005/07/exposure_580x468.jpg)

[I haven't done the above since the 3rd grade. Lining up for a bathroom break. Geez.]

<comment><USER2> _[I haven't done the above since the 3rd grade. Lining up for a bathroom break. Geez.]_

You obviously don't go to the same bars I do, then.

</comment></comment></comment><comment><USER4> So my opinion is not one that many people necessarily agree with.

Good. China needs to be knocked back a couple of pegs. We have been looking at nearly 1/6th of the population of the world controlled by an incredibly repressive regime and most of their citizens aren't even aware of how restricted they are.

I also look at this from the perspective of an engineer. How in the history of the world did we ever get to a point where it was cheaper to ship parts from the U.S. to China for assembly and then back to the U.S. than to do all of the manufacture here at home? The shear amount of energy that has been expended has been ridiculous.

All of the cheap cash inflow into China has fueled the massive growth of very inefficient coal plants throughout the country by the thousands. The people in China have energy needs, but because of the disregard and corruption of the government they have been polluting themselves in the headlong rush to catch up to the Western world.

The system of global trade that has emerged over the last 20-30 years is an extremely inefficient system that needs to undergo some serious refactoring. This will result in some major temporary economic disruption across the world, but we'll all be better for it in the end.

<comment><USER5> We won't be better in the end- All crude that can be extracted will still be extracted and burned in an engine. Furthermore, if China's economy goes downhill they'll never cut back on their coal burning.

Also, they aren't polluting themselves because of "government corruption" but because they have no other avenue to economic growth. A democracy in their position would act no different.

I'm not sure it helps anyone or anything if China "gets knocked back a couple of pegs."

This isn't a game of cribbage where the US "wins" because the other guy's peg got knocked back a couple of notches. If they lose, we lose. The reason we have our high standard of living is because we've been mooching off the Chinese population's cheap labor for our consumables all this time.

The only way the world will burn less oil is if there isn't enough left to burn- Not because the "nice guys" win and will chose to stop polluting... there are no "nice guys".

<comment><USER6> China is a little too 1984 for my tastes. It's not as bad as North Korea, a literal 1984 society, but it's pretty awful.

<comment><USER7> Having traveled there a few times it doesn't "feel" that way (or perhaps it is hard to detect the surveillance !).</comment></comment></comment></comment>


30 Years After Tiananmen, a Chinese Military Insider Warns: Never Forget - <AUTHOR> https://www.nytimes.com/2019/05/28/world/asia/china-tiananmen-square-massacre.html <comment><USER2> If you would like a truly disturbing look into the massacre, read through the diplomatic cable sent home by the British ambassador - [https://en.wikisource.org/wiki/UK_cable_on_Tiananmen_Square_...](https://en.wikisource.org/wiki/UK_cable_on_Tiananmen_Square_Massacre) ;

> 5\. FACT. ON ARRIVAL AT TIANANMEN TROOPS FROM SMR HAD SEPARATED STUDENTS AND > RESIDENTS. STUDENTS UNDERSTOOD THEY WERE GIVEN ONE HOUR TO LEAVE SQUARE BUT > AFTER FIVE MINUTES APCS ATTACKED. STUDENTS LINKED ARMS BUT WERE MOWN DOWN > INCLUDING SOLDIERS. _APCS THEN RAN OVER BODIES TIME AND TIME AGAIN TO MAKE > QUOTE PIE UNQUOTE AND REMAINS COLLECTED BY BULLDOZER. REMAINS INCINERATED > AND THEN HOSED DOWN DRAINS._

...APCs then ran over bodies time and time again to make "pie" and remains collected by bulldozer. Remains incinerated and then hosed down drains.

I can never get this image out of my mind. A global future led by the same people involved in continuing such atrocities is terrifying.

<comment><USER3> I always find it amazing how easy it is for governments to find people who will commit atrocities for them. This should be a warning for us thinking "I would never do this". Most of us probably would go along

<comment><USER4> I think the second point of the cable helps explain this:

> 60 PERCENT ILLITERATE AND ARE CALLED PRIMITIVES... THEY WERE KEPT WITHOUT > NEWS FOR TEN DAYS AND TOLD THEY WERE TO TAKE PART IN AN EXERCISE. A TV FILM > WOULD BE MADE OF THE EXERCISE WHICH PLEASED THEM.

<comment><USER3> Don't be arrogant. A lot of "smart" people would go along as well.

<comment><USER4> My point was that they isolated a group of people, who had never been educated, from the outside world then bribed them with something they wanted. That is not arrogant.

You do not live in China so it's probably hard for you to understand how our government controls the flow of information and then uses the ignorance to is advantage.

<comment><USER3> My point was that a lot of people decide to play along with this stuff. This is not limited to uneducated people.

<comment><USER4> Your assumption is that I am using "uneducated" as an insult rather than a fact.

<comment><USER3> That's how it's usually used.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> Extremely moving piece about a very eloquent woman, not ashamed to admit that I had teared up by the end.

It really makes you realize what's at stake in politics, whether it's in China, the US, or anywhere else. This is a country that's gone on to grow into a top 3 (2?) powerhouse in the world, and then to read that final statement...

> "All this is built on sand. There's no solid foundation," she said. "If you > can deny that people were killed, any lie is possible."

It's true. We don't think about it day to day, but she's absolutely right. And we have to be vigilant as citizens about the truth.

</comment><comment><USER6> The truth behind Tiananmen Sq is one that tugs at my heart-strings. I still somehow refuse to believe it's true that soldiers could fire at the people. The tank-man video is the most humane display of the heroism, not just of the tank-man, but also the man inside the tank, who refused to mow his compatriot. I want to make it my life' work to uncover what is true. At least preserve enough evidence, so that future generations can study this and decide for themselves.

</comment><comment><USER7> I sometimes wondered why Chinese government is SO wickedly scared of any mention/signaling of the Tiananmen Square protests/massacre.

Reading the diplomatic cable by the British ambassador, it makes sense to me now.

</comment><comment><USER8> A truly tragic moment in history

</comment><comment><USER9> Never forget May 35th.

</comment><comment><USER10> It's true that hundreds of people died during the crackdown of the riot. However the event is sensationalized and exaggerated to a point that people question the intent of bringing it up again and again.

[https://wikileaks.org/plusd/cables/89BEIJING18828_a.html](https://wikileaks.org/plusd/cables/89BEIJING18828_a.html) ALTHOUGH GUNFIRE COULD BE HEARD, GALLO SAID THAT APART FROM SOME BEATING OF STUDENTS, THERE WAS NO MASS FIRING INTO THE CROWD OF STUDENTS AT THE MONUMENT. WHEN POLOFF MENTIONED SOME REPORTEDLY EYEWITNESS ACCOUNTS OF MASSACRES AT THE MONUMENT WITH AUTOMATIC WEAPONS, GALLO SAID THAT THERE WAS NO SUCH SLAUGHTER.

[https://youtu.be/GRb4VY2dU4c](https://youtu.be/GRb4VY2dU4c) The actual video footage of the famous photo of tank running over man.</comment>


HighwayHash: Fast hashing at over 10 GB/s per core in Golang - <AUTHOR> https://blog.minio.io/highwayhash-fast-hashing-at-over-10-gb-s-per-core-in-golang-fee938b5218a <comment><AUTHOR> HighwayHash is a new and very fast pseudo-random-function (PRF) developed by Jyrki Alakuijala, Bill Cox and Jan Wassenberg from Google research. The algorithm takes a 256-bit key and computes 64-, 128- or 256-bit hash values of given messages.

HighwayHash can be used to prevent hash-flooding attacks or authenticate short-lived messages. Additionally it can be used as a fingerprinting function. Note that HighwayHash is not a general purpose cryptographic hash function (such as Blake2b, SHA-3 or SHA-2) and should not be used if strong collision resistance is required.

At Minio we have developed a native Golang repository for HighwayHash with optimized assembly implementations for both Intel and ARM platforms. We will switch over the bit rot protection that is currently relying on the Blake2b algorithm to HighwayHash.

Google repo: [https://github.com/google/highwayhash](https://github.com/google/highwayhash) code repo: [https://github.com/minio/highwayhash](https://github.com/minio/highwayhash)</comment>


Language learners: Full page translate or miss new words? Here's a third choice - <AUTHOR> https://github.com/acenturyandabit/google-context-translate <comment><USER2> The title for this submission should probably be more like "Google Chrome Inline Translate".

Is there something like this for Firefox and another translation service?</comment>


Play, Scala, and Iteratees vs. Node.js and Socket.io - <AUTHOR> http://brikis98.blogspot.be/2013/11/play-scala-and-iteratees-vs-nodejs.html

<comment><USER2> Play's documentation on iteratees is definitely dense. One of the contributors has posted a far better explanation (compared to the docs, not this post) on his blog:

[http://mandubian.com/2012/08/27/understanding- play2-iteratee...](http://mandubian.com/2012/08/27/understanding- play2-iteratees-for-normal-humans/)

I have an weekend project that uses Play's iteratees and enumerators quite well (IMO). They act as plumbing between client events (interacting with an embedded map), fetching and writing data to Mongo and interacting with the FlightAware API. I used server-sent events instead of WebSockets.

I haven't touched the code in a while (and the API key in the repo doesn't work ;)) but I have a working prototype that tries to stay entirely async: [https://github.com/ryantanner/flightsight/tree/master/app](https://github.com/ryantanner/flightsight/tree/master/app)

I think the OP is correct in that Play's iteratees/enumerators are fantastic but too low-level for most applications. Play (or a third-party) need to provide a high-level abstraction so that developers can ramp up as quickly as with socket.io.

<comment><USER3> Perhaps you can clear up my confusion with the article. It appears to me that Play is basically implementing Rx, except with a pointless new set of terminology. The Node examples could have all been structured almost identically to the Play examples if they used rx. What advantages or extra functionality is enabled by enumerator/enumeratee/iteratee that you can't get with observable?

<comment><USER4> A comment in the article, from one of the Play developers, provides a good explanation about what iteratees provide that is not provided by rx: [http://brikis98.blogspot.com/2013/11/play-scala-and- iteratee...](http://brikis98.blogspot.com/2013/11/play-scala-and-iteratees-vs- nodejs.html?showComment=1385511897410#c3240399653494822522)

<comment><USER5> Quoting Roper: _The complexity of iteratees comes because they handle many different things at once - async io, backpressure, producing results, composition on multiple different axes. Most other APIs that they get compared to only handle one or max two of these, so the complexity of those APIs is not in what they do, but what they don 't do that you have to implement yourself._

</comment></comment></comment></comment><comment><USER6> James Roper wrote a comment describing why Play's iteratees are so complex in comparison: [http://brikis98.blogspot.de/2013/11/play-scala-and- iteratees...](http://brikis98.blogspot.de/2013/11/play-scala-and-iteratees-vs- nodejs.html?showComment=1385511897410#c3240399653494822522)

<comment><USER2> For those who don't know, James Roper is one of the Play contributors.

</comment></comment><comment><USER7> As someone who has used both, I have to give this battle to Node.js and Socket.io. The ease of use because of the common client/server code almost blurs the line between the client and server and makes it almost a pleasure to use. Whereas in Play/Scala, there isn't a libary I can use for both the client and server, thus I either have to write my own client library (or use one) and then write my server code. From a maintainability standpoint, Node, in this particular use case, just demolishes Scala/Play.

<comment><USER8> I think it's a bit over the top to compare Scala to JavaScript and node.js.

If you're comparing the two you have way more flexibility than you should because these are two widely divergent tools with different implications reaching beyond "easier" or "faster." I don't think people ought to even consider scala if they're considering "easy" as being a significant factor.

Scala enjoys type safety and compilation and a vast and deep sophisticated feature set, not the very least of which is inherited from the proven and storied java libraries. Node.js is a mess of shit heaped on the turd that is script-kiddy npm-land covered with int-less and unicode unsafe JavaScript.

<comment><USER9> This is such an odd argument. As a developer that likes to produce usable products, 'easy' is something I'm always looking for. Why not? Just because something is 'easy' doesn't mean it's inadequate. It all depends on what you're building.

Also, your misguided rant against node and npm rather hurts your credibility. Your argument was at least ok up until that point.

<comment><USER8> I'm sorry, it is over the top, I'm just so tired of npm libraries I depend on going dark or changing things without updating the version.

<comment><USER10> FIY, npm does not allow you to push a module version more than once.

<comment><USER8> Pretty sure dependencies can come straight from a git url, bypassing npm. Put something on npm, and in your package.json you can depend on something straight up from github. npm will install and build that and it may break your stuff, it's a gamble. Given how dependencies nest into a massive web, you don't have to use many things before you end up with something that breaks you.

<comment><USER11> I think you're looking for npm shrinkwrap:

[https://npmjs.org/doc/cli/npm-shrinkwrap.html](https://npmjs.org/doc/cli/npm- shrinkwrap.html)

It locks in all dependencies, including dependencies of dependencies, and turtles all the way down.

<comment><USER12> shrinkwrap just locks down a version of a dependency, if the dependency points to a git master branch, that's not locked down. shrinkwrap doesn't install any code. I think his point is valid, although also probably still very rare.

<comment><USER11> npm will translate the git branch to its commit sha when you `npm shrinkwrap` so you're pretty well covered.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Similar to the Node + Socket.io example, here is a Spring 4 + SockJS example (the example is a trading application instead of chat, but the concepts underneath are pretty similar):

[http://assets.spring.io/wp/WebSocketBlogPost.html](http://assets.spring.io/wp/WebSocketBlogPost.html)

and the code: [https://github.com/rstoyanchev/spring-sockjs-protocol- webapp](https://github.com/rstoyanchev/spring-sockjs-protocol-webapp)

</comment><comment><USER14> This has become my common stack along with Angular on the client side. It makes for some slick interactions when you can have the client acting just like an actor passing messages back and forth to the server. It might still be a different language ( JS and Scala ), but since I am using the same flow in both of them I have been able to adapt.

</comment><comment><USER15> This is a great demonstration of how bad Play Iteratees are. One of the most impenetrable and frustrating API's I've ever used. Invariably I'd end up using the Concurrent._ imperative APIs to work around them.

</comment><comment><USER16> I'm assuming that the Iteratee companion object uses implicits to get the client connection. I'd really prefer something more explicit like socket.io's approach.

<comment><USER2> That assumption is incorrect. Implicits are not used here (for that purpose anyways).

The client connection is handled by that "WebSocket.using[String]" handler. This is just a function that takes a function which takes a Request and returns an Iteratee and an Enumerator. In Play, this is known as an Action. Actions take Requests and return Results.

You can see that in the type signature of the WebSocket class: [http://www.playframework.com/documentation/2.2.x/api/scala/i...](http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.api.mvc.WebSocket)

      (f: (RequestHeader) ⇒ (Enumerator[A], Iteratee[A, Unit]) ⇒ Unit)

So the client connection is not bound using implicits, it's bound when that function is actually executed. This function (f) is invoked by the router when a request comes in for that controller action. This is done using HandlerInvoker: [http://www.playframework.com/documentation/2.2.x/api/scala/i...](http://www.playframework.com/documentation/2.2.x/api/scala/index.html#play.core.Router$$HandlerInvoker)

Now, my explanation is not the most eloquent nor is it really necessary to understand all of this, though it certainly helps.</comment></comment>


Python Patterns (2013) - <AUTHOR> https://taoofmac.com/space/blog/2013/08/11/2300 <comment><USER2> Hi, OP here.

Brief clarification: some of those patterns were a consequence of us having to run Python 2.5 and 2.6 on older boxes - it's a survival technique, if you will - and having to vendor some dependencies to make it easier to deploy stuff under some other interesting constraints the article won't get into.

On the whole, these patterns make it easier for other people to not break your code when they want to add, say, another set of REST endpoints (which was my main occupation at the time).

You might also want to read my short piece on SSE: [http://taoofmac.com/space/blog/2014/11/16/1940](http://taoofmac.com/space/blog/2014/11/16/1940)

And yeah, I've been meaning to change the blog layout. Hardly any time for it these days, honestly.

<comment><USER3> Adding overflow: auto to your code blocks (.syntax) would allow us to see the whole snippet. I love decorators too, glad I'm not the only crazy person :)

<comment><USER2> Riiiight. Let me see if I can toss that in without breaking something else in the CSS.

</comment></comment></comment><comment><USER4> Can I just state how awful this two-column layout is to read?

<comment><USER5> I found the "toggle columns" option (top right, under the search box) and it made me happy.

<comment><USER6> While it did away with the horrible 2-column layout, it looks like the article was writen with those columns in mind, so it uses short paragraphs that look good on 2-column, but feel a bit weird on a wall of text.

My (barely existant) OCD is going haywire over this article as I read it...

<comment><USER7> OT: Anyone know why all browser vendors implemented this CSS columns aberration so hurridly..? I have never seen a good use for them, so painful to read. It's always some designer trying to show off their "epic" CSS skillz.

<comment><USER8> Seems like it might be useful for a print style sheet. Haven't seen it used to good effect on a screen though.

</comment></comment></comment></comment></comment><comment><USER9> Interesting as it's quite different from how I generally structure my own projects. A couple questions:

1\. Why store dependencies locally? Seems a bit wasteful and unnecessary with tools like pip/virtualenv. (OP does mention virtualenv, but also "Include ALL the dependencies locally" so I'm not sure what to make of that)

2\. You've chosen to separate your code into MVC-inspired directories instead of by function. Flask/Django have ways (apps, blueprints) of making application subcomponents modular. It seems like a single controllers directory and a single templates directory, etc. could get cluttered pretty quickly. What will you do as projects grow?

<comment><USER10> Not the OP, but w.r.t. [1] vendored dependencies are especially helpful if you happen to deploy the software on premise where you might not have full system access and in some cases, no internet or also strict policies on what can be installed.

<comment><USER11> What you can do is get wheel packages for all your dependencies and install them from a local "wheelhouse":

        pip install -r requirements.txt --no-index --find-links=/path/to/wheelhouse

If for each requirement in `requirements.txt` you have the corresponding wheel file in `/path/to/wheelhouse`, this will not touch the network and complete. I have been using this approach the past 2 years with great success.

You can learn a bit more about wheel in this very good article: [http://lucumr.pocoo.org/2014/1/27/python-on- wheels/](http://lucumr.pocoo.org/2014/1/27/python-on-wheels/)

<comment><USER2> Well, I couldn't use wheels on Python 2.6 (and certainly not use a wheelhouse properly in the environments I had to tackle back then), but yes, this is a good approach.

</comment></comment></comment></comment><comment><USER12> > Well, because JSON is about the only format I can read on all the languages > I use without ambiguity or extra dependencies

Alas, there is a downside: The JSON spec does not allow comments, which are often important for configuration files. (Though given how much that simplifies parsing, it may have been the right decision.)

So you either omit comemnts, or end up trying to shove placeholder key-values into the closest place you can to whatever you want to comment about.

<comment><USER13> For configuration files I just put in comments anyway and strip them before feeding the file to a JSON parser. (Like here: [https://github.com/creshal/yspave/blob/master/yspave/pave.py...](https://github.com/creshal/yspave/blob/master/yspave/pave.py#L33) )

Hackish, but beats having to bother with YAML parsers and their regular RCE vulnerabilities.

</comment></comment><comment><USER14> Bottle, peewee, gevent workers, eh? Interesting choices. SimpleTemplate looks interesting, I hadn't seen it before.

Would be nice to hear some discussion there, instead of the column layout.

<comment><USER15> I'm the author of Peewee and I've been running my blog with Flask, Peewee, gevent and sqlite. It's a very low-impact combination, lightweight and fun to use, although I'm a bit biased.

<comment><USER16> Thank you for your work on Peewee. The code is nicely written and is easily read start to finish.

<comment><USER17> Ok, now I'm going to go study Peewee's code...

<comment><USER15> Ackkkk I'm actually rewriting it currently to try and ameliorate the cruft that's crept in since the 2.0 rewrite. I want to say "But wait! If you read the code in a couple weeks it'll be so much better!"

<comment><USER17> Trust me, I'm sure I can improve my Python skills by reading the current version. I don't get a chance to use Python enough to shed the baggage of other languages to write Pythonic code, if that makes sense.

I haven't used Peewee in a project yet, but I've poked around with it. It's really nice, so thank you.

</comment></comment></comment></comment></comment></comment><comment><USER18> here's a link to the utils mentioned in the article: [https://github.com/rcarmo/python-utils](https://github.com/rcarmo/python- utils)

</comment><comment><USER19> I have to say the using Pika and RabbitMQ directly has been a _lot_ easier than trying to use Celery. Just my experience.

<comment><USER20> Just out of interest, what were the main challenges you faced when using Celery?

Celery is a task queue. Pika could definitely be used to build a task queue (similarly to how Celery is built on top of Kombu), but I can't think of many good reasons why that would pay off. Unless your use case was not a task queue...

<comment><USER19> Flask application context problems, hiding exceptions within tasks, Json Serialisation sometimes does weird things and hard to configure (the default, pickle, seems to be warned against as a security vulnerability), weirdness with Gevent/Socket.io flask stuff, difficulty (impossibility??) to emit socket events from within a worker, finally the canvas stuff seems great on the surface but I found it mind blowingly difficult to debug weirdness with it.

My Pika/RabbitMQ stuff was much easier to build, unit test and debug (i.e. it actually works). There is every chance the I am just a bit retarded when it comes to using celery, but the fact I've built the Pika version maybe these were just real issues? Dunno, it might all work flawlessly for you in which case it's a great tool.

</comment></comment></comment><comment><USER21> Project scaffolding like this feels very 2005.</comment>


Facebook attracts swift blowback from report on anti-conservative bias - <AUTHOR> https://www.washingtonpost.com/news/powerpost/paloma/the-technology-202/2019/08/21/the-technology-202-facebook-attracts-swift-blowback-from-report-on-anti-conservative-bias/5d5c0bb6602ff171a5d730a1/ <comment><USER2> The report finds no bias, but conservatives rip it anyway, and I'll refrain from speculating there. But this quote is telling: Missouri Senator Josh Hawley "challenged the methodology of the third-party audit, which relied heavily on interviews with conservatives about their concerns."

This makes Hawley look fairly partisan, or even tribal. If the report's authors hadn't interviewed enough conservatives, that would have been challengable too.</comment>


A Curated List of Awesome Programming Books - <AUTHOR> https://github.com/majikarp/awesome-programming-books <comment><USER2> Curated lists are nice but what makes this list "awesome"? Some background or bullet points would be nice to convince a reader to pick any of them up.

<comment><USER3> > Curated lists are nice but what makes this list "awesome"?

I suspect a modern fad of using inappropriately effusive adjectives to hype mundane programming stuff.

<comment><USER4> This is a rockstar comment.</comment></comment></comment>


The Real Cost of Software Development - <AUTHOR> http://www.techfounder.net/2013/02/01/the-real-cost-of-software-development/

<comment><USER2> My own take on this subject:

[http://www.smashcompany.com/business/how-much-do-websites- co...](http://www.smashcompany.com/business/how-much-do-websites-cost)

That was written in 2008, but there is nothing that I would change (although, some of the anecdotes are clearly shaped by the strange gold-rush mentality that infected a lot of first-time entrepreneurs, circa 2004-2008). Back then I was part of a team that helped inexperienced entrepreneurs shape their first software product (almost always a website). We were getting too many solicitations from entrepreneurs who had no idea how much things would cost. They would explain their idea to us and we would say "We can build that for $50,000" and they would be like, "What?!? Hey, the guy down the street said he could build it for $500. I'll go with him." So I wrote this essay to help set expectations for clients. Back then, I was living in Charlottesville, Virginia, in the USA, and some of the anecdotes are specific to that time and place.

</comment><comment><USER3> Well, one conclusion we can draw from the article is that 90% of code is not considered good by author's standards (which I not only agree with but take one step further), yet we weren't presented a case in which crap code could be mitigated.

I mean, when your employers insist on employing the bad engineers because they talk big jargon, that shows the Real Cost of Stupid Management more than anything else.

<comment><USER4> >yet we weren't presented a case in which crap code could be mitigated.

Is that possible anyway?

I found the communication aspect an interesting point. But I wonder: what if the non-developers have bad communication skills? And how do you find out?

<comment><USER3> > _Is that possible anyway?_

I believe so, we just have to train those who write decent code and willing to get better, and fire those who write and release their crap commercially.

</comment></comment></comment><comment><USER5> Crap code really depends on the project. I used to write crap code for clients (unintentionally, of course!). They did not think it was crap code, but looking back ten years, I think it was. But the applications did everything they were supposed to, were stable, and they had a short lifespan so no one else was going to need to come in and edit the code. Sometimes "gets the job done" code is the best. :)</comment>


Ask HN: Why is referrer control not working for WSJ? - <AUTHOR> I usually use referrer control to spoof my referring link to news.google.com.
But, it stopped working today for some reason. I block cookies from WSJ so that's not the reason.
It doesn't allow me to read anything but shows me the sign in/ subscribe page. <comment><USER2> WSJ are testing closing the loophole to see if it improves their subscription rates: [http://digiday.com/publishers/wall-street-journal-paywall- go...](http://digiday.com/publishers/wall-street-journal-paywall-google/)

> A Journal spokesperson said the publisher was running a test to see if doing > so would entice would-be subscribers to pay up. The rep wouldn't elaborate > on how long and extensive the experiment was and if permanently closing the > loophole was a possible outcome.

</comment><comment><USER3> I've noticed the same thing. I guess that they've stopped using cookies and are using some kind of "super cookie" that uses the visitors computer environment to create a individual id.

</comment><comment><USER4> Looks like WSJ found a workaround for that bypass.

Google will not be amused.

<comment><AUTHOR> [https://support.google.com/news/publisher/answer/40543?hl=en...](https://support.google.com/news/publisher/answer/40543?hl=en&topic=11707)</comment></comment>


U.S. government is poised to withdraw longstanding warnings about cholesterol - <AUTHOR> http://www.washingtonpost.com/blogs/wonkblog/wp/2015/02/10/feds-poised-to-withdraw-longstanding-warnings-about-dietary-cholesterol/

<comment><USER2> I'm still confused on what the thinking on saturated fat is. does anyone know? I keep hearing how healthy coconut oil is but isn't that saturated fat?

What about cream? Bacon?

<comment><USER3> Increased consumption does lead to higher levels of cholesterol, but the link between high levels of cholesterol and heart disease is (at this point) questionable.

Most of the studies about the latter link have been done around the time when scientists did not distinguish between HDL and LDL, and currently the scientific status quo progressed towards recognizing two sub-types of LDL - big fluffy one (harmless) and tiny one (plaque-forming and dangerous). As there's no good way to measure fluffy vs tiny LDL, there's no good studies on it either.

The book "Good Calories, Bad Calories" provides a good overview.

</comment></comment><comment><USER4> The popular press is completely useless regarding nutritional science -- every study is reported in absolutist and exagerated fashion. But even the science is in pretty poor shape, as this move points out. Expert consensus as embodied in recommendations like the cholesterol limit are founded on the basis of slim evidence and maintained by inertia.</comment>


Node.js 0.6.3 out (npm included) - <AUTHOR> http://blog.nodejs.org/2011/11/25/node-v0-6-3/

<comment><USER4> Help is broken in the bundled npm, so they're going to be shipping 0.6.4 soon: [http://groups.google.com/group/nodejs/browse_thread/thread/d...](http://groups.google.com/group/nodejs/browse_thread/thread/d592e5f194588aa7)

You might want to stick with the separate npm for now if you find yourself using "npm help" a lot.

</comment><comment><USER5> What's the state of the art in Debian/Ubuntu packages for Node? Is anyone maintaining some anywhere?

<comment><USER6> Debian (unstable) - 4.12-1

<http://packages.debian.org/sid/nodejs>

Ubuntu (11.10) - 0.4.9-1ubuntu3

<http://packages.ubuntu.com/oneiric/nodejs>

Mint - <USER3>

Fedora - <USER3>

Arch - 0.6.2-1

<http://www.archlinux.org/packages/community/x86_64/nodejs/>

Gentoo (unstable) - 0.6.2

<http://packages.gentoo.org/package/net-libs/nodejs>

OpenSuSE - ??? (couldn't find package database)

FreeBSD - 0.4.12

<http://www.freebsd.org/cgi/cvsweb.cgi/ports/www/node/>

<comment><USER7> There is a Ubuntu PPA that tracks Node.js releases pretty closely.

<comment><USER7> Checked, still at 0.6.2: <https://launchpad.net/~chris-lea/+archive/node.js>

</comment></comment></comment></comment><comment><USER8> does anyone know if npm is included with the windows install? This is very exciting.

<comment><AUTHOR> yes, it is included :)

<comment><USER8> OK Brilliant. Im going to try this right now - Thanks! ;-)

<comment><USER9> See the person's comment above about npm help.</comment></comment></comment></comment>


How to Pick a Random Element from an Infinite Stream - <AUTHOR> https://dailycodingproblem.com/2017/11/30/random-element.html <comment><USER2> > infinite stream

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

<comment><USER3> You don't have wait for the sampling loop to finish if you're willing to trade time for accuracy.</comment></comment>


ClojureScript Is Not An Island: Integrating Node Modules - <AUTHOR> https://clojurescript.org/news/2017-07-12-clojurescript-is-not-an-island-integrating-node-modules <comment><USER2> One thing I really like about Clojure is how the language has basically stayed the same, but I can use it on the heavy server-side stuffs like working with Hadoop, Spark, ElasticSearch to the front-end stuff like React, React Native, to CLR and now into nodejs, while staying sane [1] in the process. It feels like comparing a nice tropical island paradise to a crowded, hectic, mutating market, where everyone is competing for your attention and selling their newest wares.

[1] [https://hackernoon.com/how-it-feels-to-learn-javascript- in-2...](https://hackernoon.com/how-it-feels-to-learn-javascript- in-2016-d3a717dd577f)

</comment><comment><AUTHOR> This feature is really, really a long time coming. Myself and other ClojureScript core contributors are happy to answer any questions people may have.

<comment><USER3> It sounds like this handles extern inference if possible. Is that the case? I have wanted to play around with Webrtc for a while now but it basically requires adapter.js ([https://github.com/webrtc/adapter](https://github.com/webrtc/adapter)) and as a result a ton of externs.

It would be cool if I could just plug and play!

<comment><AUTHOR> There's no extern inference required here as all the original sources are passed directly through Google Closure Compiler. As a benchmark for feasibility when we started we chose React.js as it's non-trivial and heavily depended upon in the ClojureScript ecosystem. We discovered that over all of React's sources we only need 4 extern definitions for 4 generated names in EventsPlugin. So as long as the JS library in question isn't relying on string-based meta programming everything should work.

Granted this rules out some libraries, there are plenty of libraries written in a simple straightforward style that will work just fine. In particular I am bullish about fantastic results with ES6+ libraries written with ES6 classes with static import/export. Closure will eat that stuff up.

<comment><USER4> That's a surprisingly positive result. Usually I expect most JavaScript libraries to be destroyed by Closure's Advanced optimizations, unless they've been written specifically with Closure in mind (which they're not).

Anyway, congrats on those features :-) Scala.js doesn't do the part where Closure is applied on JS dependencies; it's only applied to Scala.js code (though with the advantage that we never need any externs).

<comment><USER5> how does interop works in scalajs without externs?

<comment><USER4> The Scala.js compiler, thanks to its static types, precisely knows which property accesses refer to "internal" properties (defined in Scala code, which can be renamed) and which ones refer to external JavaScript code (which cannot). It then simply always emit the former using dot notation (foo.bar) and the latter with bracket notation (foo["bar"]). This allows Closure to rename all internal property accesses but not external property accesses.

It's even slightly more powerful than using externs: if you use the _same_ property name both in internal accesses and external ones, Scala.js can rename the former without touching the latter. An externs-based solution won't be allowed to rename the internal accesses.

</comment></comment></comment></comment></comment></comment><comment><USER6> This is awesome. CLJS is amazingly close to having as good host-interop with JavaScript as plain Clojure does with Java.

Will be interesting to see how this impacts things like the React Native and Node.js service-side stories.

</comment><comment><USER7> This is a nice step forward for developer experience. I struggled to get NPM and Clojurescript to play nicely. Ultimately, I had two different build systems at play in one project. (Three if you count Webpack.)

It'll be nice to have such an easy integration.

</comment><comment><USER8> The thing I like about Clojurescript is the ability to escape the node/NPM ecosystem entirely. It's feature, not a bug, that I don't want to interoperate with node/NPM.

<comment><USER9> As someone looking to get into CLJS, where do I find "native" CLJS libraries in case I wish to avoid using NPM?

<comment><USER10> Native CLJS libraries are regular JARs that you add to your classpath. Most people publish them to Clojars[1] (which also has Clojure libs). Maven Central may also have some.

[1] [http://clojars.org](http://clojars.org)

</comment></comment></comment><comment><USER11> What's the best resource for learning CLJS as of mid 2017?

<comment><USER2> Depends whether you learn best by reading [1], answering some interactive questions/koans [2], or downloading and playing around with a ToDoMVC app example [3][4][5] or a mixture of the above. Feel free to join the #clojurian Slack channel [6] if you need help.

As a beginner, I recommend you looking at the Reagent [7] or Rum [8] React library first, than you can look at something more complex and full-featured like Om [9] later (whose author is also a ClojureScript core contributor @swannodette).

PS: You can also learn by implementing a Dashboard like this [10]. Disclaimer: I am the author of this library.

[1] [http://funcool.github.io/clojurescript- unraveled/](http://funcool.github.io/clojurescript-unraveled/)

[2] [http://clojurescriptkoans.com/](http://clojurescriptkoans.com/)

[3] [http://todomvc.com/examples/reagent/](http://todomvc.com/examples/reagent/)

[4] [https://github.com/reagent- project/reagent/tree/master/examp...](https://github.com/reagent- project/reagent/tree/master/examples/todomvc)

[5] [https://github.com/gadfly361/cljs- todomvc](https://github.com/gadfly361/cljs-todomvc)

[6] [http://clojurians.net/](http://clojurians.net/)

[7] [https://reagent-project.github.io/](https://reagent-project.github.io/)

[8] [https://github.com/tonsky/rum](https://github.com/tonsky/rum)

[9] [https://github.com/omcljs/om](https://github.com/omcljs/om)

[10] [https://github.com/priornix/antizer](https://github.com/priornix/antizer)

<comment><USER11> I like small books that build progressively more complex projects (Dave Thomas's Elixir book was good that way, Realm of Racket was my favorite). Short video tutorials are nice as a supplement are nice, too. Daily Drip's elm videos were fantastic.

The #1 thing I'm usually looking for is something that eliminates any time- wasting hassles related to getting set up, and all the major language features in some set of working examples.

After that, I usually write little command line apps, play with graphics a bit and convert some simple games into the language.

<comment><USER12> Not ClojureScript but Clojure: I really liked www.braveclojure.com. Maybe not technical enough for the most folks in here, but it was a great starter since you jump right into and solve some problems. Still it was not too newbie focused (Write a program which prints Hello World and calculates the sum out of two numbers). Sadly i wasn't able to stick with clojure since i cant wrap my head around jvm and clojure always felt like something which is fun but will not help me in the future job market.

</comment></comment></comment></comment><comment><USER13> How does Clojurescript lookup for a module you declare?

For example, in [https://github.com/omcljs/om/blob/c68e668a73cc534ecfdc71d631...](https://github.com/omcljs/om/blob/c68e668a73cc534ecfdc71d6314abc3af911657e/src/main/om/core.cljs) (couldn't think of any Clojurescript library), you have `[om.dom`, `[cljsjs.react`, `[goog.dom`. Where does the compiler look for these things? How does it knows one is a local module and the other an external package?

I need to know this so I can implement it in [https://github.com/fiatjaf/module-linker](https://github.com/fiatjaf/module- linker)

<comment><USER14> This is quite a large question to answer.

From viewpoint of compiler, there is no much distinction between local and external packages. Clojure (and so ClojureScript compiler) is built on to of JVM and uses Maven dependencies so that is where most of the dependencies come from. From viewpoint of compiler, all files are in JVM classpath (or in directories specified in Cljs compiler options).

Om declares it's dependencies in project.clj file: [https://github.com/omcljs/om/blob/master/project.clj#L13](https://github.com/omcljs/om/blob/master/project.clj#L13)

\- om.dom, based on the name, compiler will look for om/dom.cljs/cljc files in classpath, and in this case the file is local to the project

\- cljsjs.react is foreign-library ([https://clojurescript.org/reference/packaging-foreign- deps](https://clojurescript.org/reference/packaging-foreign-deps)) provided by external cljsjs/react package. Compiler indexes all these foreign-libraries at start, so when it encounters require to one of them knows what to do

\- goog.dom is Closure module provided by Google Closure library ([https://github.com/google/closure- library](https://github.com/google/closure-library)), which is dependency of ClojureScript. Compiler will look for goog/dom.js file if no .cljs or .cljc by the name is found.

</comment></comment><comment><USER15> This is a great step for ClojureScript. It's extremely difficult for a compile-to-JS language to bootstrap a large enough ecosystem to stand alone. A good interop story neatly sidesteps that issue.

<comment><USER2> That's very true, one of the key aspects that I use for picking a language is the huge ecosystem. Enough cannot be mentioned about the ecosystem of libraries and tools. With Clojure, you can leverage it to lift the heavy server-side stuff like Spark, Hadoop, and use the same syntax basically for the browser UI and mobile.

</comment></comment><comment><USER16> I just want to thank the Clojure(Script) team for such an amazing work. It really is a joy to work in Clojure(Script) and improvements like this make it an even better tool to work with.

Keep up the good work!

</comment><comment><USER17> How did clojurescript use node modules / APIs before?

<comment><AUTHOR> Using NPM for client libraries required using Webpack to bundle those things. If you were targeting Node.js then we just didn't support idiomatic usage of those libraries (users could just call require themselves directly).

</comment></comment><comment><USER18> Do I still need externs?

<comment><AUTHOR> The whole point of passing everything through Closure is to avoid needing externs. However there are caveats, see me comment above about building React.js directly from sources.

</comment></comment><comment><USER5> Scary, any newbie will read this and run away.

Is passing through the complexity, pain and all the caveats one can encounter from this really worth it for using Clojurescript? Serious question, now that with have ES6+ and today babel/webpack are solid tools.

I mean from all the modules mess, I didn't get what's the correct way to do javascript interop right now.

<comment><AUTHOR> I fail to see how Closure Complier is any more complicated, more painful, and has any more caveats than Babel/Webpack. With Closure Compiler at 8 years old and building some of the most sophisticated JS properties on the web (GDocs anyone?) it seems pretty "solid" to me. Perhaps it not clear from the post but that's a big part of why this works, we're not doing the heavy lifting.

<comment><USER5> Its not about closure, is all the Clojurescript interop issues/gotchas, what's the correct way to do interop today in Clojurescript?

<comment><AUTHOR> Nothing has changed about ClojureScript interop in _6 years_ so I don't really know what you're getting at. We believe ClojureScript interop is pretty good and our users pretty consistently agree.</comment></comment></comment></comment>


Experimental music from very short C programs - <AUTHOR> http://www.youtube.com/watch?v=GtQdIYUtAHg&feature=youtu.be

<comment><USER2> So cool. It'd be interesting to re-frame this in a non 8bit context. Maybe by piping it into a nice midi synth or some kind of drum machine. Does it hold up?</comment>