On Improving When Your Friends Aren't - <AUTHOR> http://www.sebastianmarshall.com/on-improving-when-your-friends-arent <comment><USER2> I have a very close group of 3 friends that I have known for at least 6 years each. We all come from immigrant families, went to a competitive, top 100 high school and all did well and went to good schools. We're all 24 now and two of them are busy hopping from job to job to find the biggest paycheck, bragging about their $160k base salaries (consulting/private equity) not including bonuses and how they quadrupled their savings with margins trading. Then there's me and my other friend in this group.

I've only ever done startups and the closest I've been to a BigCorp job was a yahoo internship. The aforementioned two friends just don't understand the world of startups and think I'm wasting my time and setting myself up for financial disaster. The other friend is on his 7th year of college. He picked majors because they were highly regarded and he saw that we were doing similar things, but did not interest him. Over the years he looked at our relative career success, did not think he possessed any real skills for the workforce and became suicidal, attempting to kill himself twice. Saved the first time because of a malfunctioning old handgun and the second because of a goodbye email he sent to the 3 of us. I check my email way too often and saw the email first and called 911 and then kept him on the phone.

I'm not quite sure what the moral is, but it seemed relevant and I wanted to share. I wish my friends did what they loved and not what their peers thought was cool or society deemed worthy. None of them love what they do.

<comment><USER3> _The aforementioned two friends just don't understand the world of startups and think I'm wasting my time and setting myself up for financial disaster._

Who knows, they might even be right...

<comment><USER4> Or wrong...

If you don't love what you do it's probably not worth it in the long run. Doing a startup isn't necessarily going to put you in a financial disaster. It just makes the end result more volatile.

The way I look at it is with life there's a bell curve (maybe not normally distributed but still a curve distribution). Those with a steady consulting job will fall into the "average" middle area of the curve and be "safe" financially and might not ever be poor OR rich for that matter.

Those taking risks like in a startup would more invariably end up on one side of the curve (either on the side that makes you poor due to debt etc, or extremely rich but most likely you won't end up as an "average" middle area where everyone else is and regret not taking any chances in your life).

</comment></comment></comment><comment><USER5> After all the books I've read, after all the time I've spent on learning, solving problems and exercising my brain, after all the self- help/marketing/how-to blogs I've gone through, after all the effort I've taken on becoming a better person, after all the sacrifices I've made by going out of my way to help other people to make their lives better, I have found that there are many people who are better than me in many ways I cannot even begin to imagine, not because they try to be, not because they are more intelligent than me, not because they have any incentive to be, not because they are better educated, but probably because they just _are_ , probably because they grasp the beauty of life better than me on a scale that I am not able to comprehend, probably because there is more to life than being successful and being better, whatever that means, or probably because of some other reasons I will never understand.

<comment><USER6> It seems like being depressed over that conclusion is just a form of vanity. It's a fine line between comparing yourself to others in order to learn from them and reevaluate your direction, and comparing to satisfy or starve your ego.

<comment><USER5> Exactly my point. :)

</comment></comment></comment><comment><USER7> Your friends don't have to be "useful to you". Real friends are waiting there for you when you take a break from work to have fun, relax and shoot the breeze.

I've worked maniacally for the past 4 or 5 years and declined many many social invitations because I was focused on building my business. I would never EVER express that as "improving when my friends aren't" and I find this attitude deplorable.

They're just living life differently to me. They don't get in the way of the way I want to live my life at all and when I take a break I go hang out with them and we have fun - it's just that I don't do that very often.

There is no difference between focusing on a business, focusing on education, focusing on raising a child or on a new relationship.

It seems like such a cliche that you "improve" somehow and leave everyone else behind and then see them later in the street with your new friends and ignore them as you walk by and make them all jealous with how much better you've become.

Life just doesn't have to be like that. True friends are friends forever regardless of whatever life projects you're working on and if you're incapable of maintaining friendships with people who aren't living exactly the same life as you then there is something wrong with you.

The whole "I want to win so I surround myself with winners" approach is just admitting that you're so susceptible to peer pressure that the only way you can succeed in life is to set yourself up with a bunch of friends who will force you to succeed. That's a strategy for addicts, not winners.

</comment><comment><USER8> What does "improving" even mean when it comes to life? Sometimes friends drift apart when their common interests change. The end. Put the ego aside.

<comment><USER9> I want this to be true, but I don't think it is. I really do think a lot of people just kind of drift through life, being reactive rather than proactive, with little in the way of goals or ambition. I don't necessarily know if there's anything wrong with that (topic for another day), but it does seem valid to say that they're not interested in "improving". Maybe that's the wrong word; maybe "optimizing" captures it better. Regardless, some of my best friends are those who I share surprisingly little in terms of common interests. But what we do share is that we don't want a life adrift, and we're working hard to achieve the things we care about. To me, that's what "improving at life" means.

<comment><USER10> Reactive versus proactive captures the notion perfectly. I'm not content to be reactive. I was that way for too long, but I realized it was a cover for fear. It is hard for me to relate to the reactive mindset now. I feel like codependent-prone individuals smell the change and try to follow you around.

I want to be able to relate to everyone well, but there's a point at which the mismatch emerges, and it is unfortunate. It just means my interests are changing.

</comment></comment></comment><comment><USER11> I split from some friends about 20 years ago...

We were a group of 5 top friends at high school. We were popular, entertaining, going on vacation together, you name it.... At college, we carried on meeting, going to parties, but something became odd for me. It was obvious they were willing to carry on with immature/teenager activities and I wasn't...

I just did not enjoy it anymore. It was not in me. I had grown up. I told 3 of them I was not willing to participate to this anymore. The 5th one did not care, we always got along well. In fact, he was participating in those juvenile activities less and less too and developed his own branch of friends.

Two really take it badly, as if it was some kind of betrayal. They adopted a dogma attitude. I knew them since I was 5 years old. They reacted emotionally and would not address the maturity issues. It was a one-sided conversation. They carried on their juveniles games until their early thirties.

I was even replaced by another guy to fill the gap. When #4 got married, my replacement was invited to the full ceremony and I was only invited to the cocktail. He knew my replacement for a couple of years then, I knew him for more than 20. It was a bit of a shock, but not a real surprise.

I knew they were acting juvenile beyond their 20's to cover for their insecurities and lack of will to become mature and responsible. Today, we are connected on Facebook and exchange messages from time to time. I do not regret the split 20 years ago. I got to meet different people and developed new fulfilling relationships.

</comment><comment><USER12> >In a way, to put it bluntly, they're not usefull to me.

(yes, I know this was the author quoting /someone else/ but I think the rest of the article was saying something very similar, albeit in a much more tactful way.)

Huh. I guess I have a similar exploitive attitude, but it drives me in the opposite direction. Having poor friends is /incredibly useful/ - need help moving but don't want to reciprocate? call up your highschool buddy who works at home depot. He'll be happy to help you out for a few bucks. It's only weird if you make it weird.

I've always kind of gravitated towards people who are smarter than I am, so my highschool buddies were an awesome recruiting ground. People who are smart but work cr-p jobs because they lack the social skills or confidence to advance make great employees for your small side businesses. And the great thing about that is I'm helping my friend while I'm exploiting him or her. Most of the people I've hired in this manner have gone on to get "real jobs" after gaining experience working for me.

Of course, all this is predicated on your ability to live a different lifestyle from your friends, and being willing to fire a friend. Never hire anyone you can't fire. On the other hand, if you loose a friend every time you fire someone, you are doing it wrong.

<comment><USER13> How incredibly self-obsessed and shallow.

I guess this is usual for the kind of material that comes from Sebastian.

There need be no mystery why the poor have such irrational loathing for the middle and middle-upper class when you witness this kind of attitude.

Part of being better person and an exemplar is to improve without an attendant increase in ego.

Humility and sincerity are critical virtues to have as a whole person.

<comment><USER14> Your comment is an incredibly offensive and judgemental thing to say to someone that you told don't know.

Just because he has different goals than his friends and is honest about the fact that they are helping him achieve doesn't mean he is "self-obsessed and shallow" and lacking in "humility and sincerity".

His friends who know him in person can and will judge him for the person he is.

Did you write this because you have some kind of preconceptions based on people you know?

<comment><USER13> His words are self-obsessed and shallow. I am expressing my thoughts in the hope that those words don't fairly describe his character. Maybe I can make him aware of his behavior before he starts buying into his own bullshit even more.

>His friends who know him in person can and will judge him for the person he is.

Or they'll stick around in the hopes of getting beer money for mowing his lawn.

>Did you write this because you have some kind of preconceptions based on people you know?

No.

</comment></comment></comment></comment><comment><USER15> I think overall his post was spot on. There is an old saying that goes along the lines that 'you are the average of the 5 closest people to you.' This means if all your closest friends are losers you'll likely be a loser too. It's not mean or egotistical to recognize that people you spend the most time with do in fact influence you.

It's also a good thing to remove friends that are holding you back. Sports stars probably need to do more of this. They become famous, make a lot of money, but keep hanging out with the friends from 'the hood' and end up all sorts of trouble.

Another good example are people who lose a lot of weight. Whether on purpose or not their friends often hold them back. Losing all her friends was the hardest thing a friend of mine had to deal with when she finally decided to lose weight and get in shape.

</comment><comment><USER16> Gads, what obnoxious, egotistical drivel.

Is there any way we can get a Sebastian Marshall / Tim Ferris filter on Hacker News?

</comment><comment><USER17> I suddenly had the desire to smoke some weed and play tekken my buddies after I read his post

<comment><USER18> Same here.

</comment></comment><comment><USER19> I can really relate to this post a lot. While I have feelings of being sort of a dick when I come to terms with this, it is completely true.

I don't really hang out with a lot of startup people (perhaps I need to). But mostly it is because I _really_ need a break from the scene sometimes. However, my only friends in the area are the same friends I had in high school who aren't doing a whole lot with their lives. It is frustrating to say the least.

Just tonight I got text messages from my friends telling me they drunkenly ran in my ex-girlfriend and are all having a great time out at the bars. Meanwhile, I'm sitting programming stuff into the night trying to make a business that could ultimately fail. But I'm learning a lot. Sure, I'm living in near-poverty. But I'm overall really enjoying myself -- even if it is quite lonely.

In a way, it is motivating. On the other hand, it bums me out quite a bit.

<comment><USER13> This is a better attitude to take to the matter.

Just keep working, don't blog about how great you are on the blog whose main purpose is to tell other people about how great you are.

What kind of stuff do you work on? (I'm a programmer as well)

<comment><USER20> Dude, this is Sebastian Marshall, one of the great strategists of our time. He specializes in winning and communicating the art of winning through his blog.

Now to the untrained eye, his posts may come across as the work of a delusional, narcissistic windbag, but if you look deeper, you'll find that with his hectic schedule it's amazing that he has time to write at all. Between fighting off Asian gangsters with high-powered kung fu kicks and hosting charity events for hospitals whose name he misremembers, he still finds the energy to offer priceless career guidance and moral support to patio11. Soak up his wisdom, so that you too may learn the entrepreneur strategies of the winning scientist.

As an aside, I would love to read more about his science. I've learned so much about strategy and entrepreneurship and winning from him, but not much yet about science. Please write about your science, Scientist Sebastian, so that I may seek to improve my own science, which has hitherto proven most unfruitful.

<comment><USER9> Extremely disappointing to see so many upvotes on such a mean-spirited comment by an anonymous user who has contributed to HN a fraction of what Sebastian has, in terms of time and karma. I understand that some people might disagree with what Sebastian has to say, but there are constructive ways to do so. Sarcastic, anonymous, ad hominem attacks like these are probably fun to write, but they hasten the downfall of a wonderful community. So thanks for that.

PS - I've gotten to know Sebastian over the last few months and he's proven to be a genuinely good person who wants to learn how to be better and help others do the same. It's sad to see people lashing out at him for that.

<comment><USER21> Sebastian's blog strikes me as _intensely_ arrogant, self-centered and tasteless. Like others, I'm sure, I have my doubts about the truthfulness of some passages from his blog such as the following:

 _"I got into a shouting match protecting some McDonald's employees from a mob boss in Hong Kong. A riot cop came to break it up, I was almost in a fight with three mafia guys.

I had two guys try to mug me the other day in a dangerous area. Bad mistake, doubled one of them over with a kick the stomach and shouted at the other one, "YOU WANT TO DIE? BACK DOWN, STAY BACK." He did, he let me walk away while his criminal buddy was doubled over."_

Even if every word of the above were true, which I doubt, it wouldn't impress me. It just makes me think the guy is stupid. The post bragging that he'll be making 250k/month in 10 years was similarly in-your-face, yet uninspiring. Ditto for the comparison of "high born" and "low born" people. Other posts push credulity in similar ways and give me the sense he's a runaway narcissist.

Honestly, I don't have a problem reading really odd stuff if there's enough value to take from it. One example would be Steve Pavlina's blog. I have little to no interest in new age philosophy and some of his posts come across as downright nutty. But they're thought provoking, though. Many of the earlier posts on online business and a wider set of personal development topics were solid gold. I rarely feel like it's wasted time to read that blog, even when I disagree with it.

Unfortunately, I can't say the same about Sebastian's blog or so-called "get victory" newsletter. Thus far, I haven't found a single article that's genuinely helped me (a high bar, I know). There isn't nearly enough substance to offset the obnoxious tone. Until he actually _is_ a VC with all kinds of internet properties, making 250k/month, a lot of people just won't be interested in reading about his opinions, goals or tall tales.

As I said, I don't know the guy. He could very well be a great guy to hang around with, especially with his interest in self-improvement. Maybe if I did know him offline as you do, I'd have a greater appreciation for his blog. This comment isn't meant as a personal attack. It's a rationale for why I agree with zuckerborg's comment and why HN would be a better place without a constant stream of victory spam.

<comment><USER22> I can understand why you'd be skeptical - most people are unwilling to put themselves in harm's way to break up a fight, protect people around them, or explore the slums of a city to understand more about the development of humanity.

I do do those things. I don't know exactly what to tell you if you want to doubt that - there was a guy yelling and spitting on the floor of the Tsim Sha Tsui McDonald's in the late night/early morning, yelling at the staff. He was with two of his buddies. I told him to knock it off. Shouting match ensued.

I've had three attempts to mug me in my life - once in Shanghai, once in London, and once in Saigon.

You can dislike me - that's your call - but I dunno man, I don't say things that are untrue.

> Thus far, I haven't found a single article that's genuinely helped me

That's too bad. You've obviously been around my site a fair bit, and I do try to make it of value to a visitor. I cover lots of stuff that a lot of people have found useful - what are you trying to do exactly? What have you tried that I've written/advocated on that didn't work for you?

<comment><USER13> >What have you tried that I've written/advocated on that didn't work for you?

You're missing the point. You're handing out advice with no demonstrable expertise on...anything.

You don't discuss anything that requires talent, intellect, experience, or domain knowledge. You write about things you pull out of your head or other content you Tom Sawyered other people into collating for you.

Speaking of "content", that neuroplasticity and habits post is a travesty.

Your whole blog is so thoroughly preoccupied with your person that I can only think you are suffocating on the fumes of your own alternate reality.

In brief you are:

1\. Without demonstrated accomplishment

2\. Arrogant

3\. The only thing you're superlative in is narcissism

4\. Giving out advice to deluded hopefuls who want to have a site about nothing and to be paid for zero productivity and not work a day more of their lives than they have to.

People with work to do, work they love, they don't need people like you.

Bonus time! Since people don't seem to get it yet, I've taken the liberty of making an annotated version of the front page of his 'blog'.

<http://i.imgur.com/ET2hf.png>

With that, I'm done chasing this matter. I am exhausted with battling this banality.

Exeunt.

<comment><USER23> In brief, and only because vicious attacks on writers I enjoy just rubs me wrong:

1\. It is not Sebastian's duty to demonstrate his accomplishments to you.

2\. Arrogant? If you hate yourself so much that you can't stand a person with ambition and grand intentions, that's your problem. I'll take Sebastian's "arrogance" over your condescending "objective criticism" any day.

3\. On what basis can you say this?

4\. I spend my entire LIFE working to build things to help fix the problems in the world. I enjoy reading Sebastian because he writes about doing the same. And from what I can tell, he is one of the hardest working and honestly self- critical writers on the internet.

> People with work to do, work they love, they don't need people like you.

Sebastian hasn't asked anything of you. He's a valued contributor around here for a great number of reasons, and has found a writing style that resonates with many around here. If it doesn't resonate with you, that's fine. We're all in a different place. But there's no cause or excuse for this type of attack. As Sebastian points out below, 17 posts? That _is_ a bit scary. Remember, beneath the posts and karma there's real human beings around here, some of the smartest on the internet, and they all deserve a measure respect, regardless of your thoughts on the value they provide the world for free. What exactly are you trying to prove, and to whom?</comment></comment></comment></comment></comment></comment></comment></comment>


German Federal Court decides ad blocking isn't illegal - <AUTHOR> http://www.faz.net/aktuell/wirtschaft/diginomics/adblocker-sind-erlaubt-hat-der-bgh-entschieden-15550353.html <comment><AUTHOR> Google's translation at <[https://translate.google.com/translate?sl=auto&tl=en&js=y&pr...](https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=http%3A%2F%2Fwww.faz.net%2Faktuell%2Fwirtschaft%2Fdiginomics%2Fadblocker- sind-erlaubt-hat-der-bgh-entschieden-15550353.html&edit-text=>)

</comment><comment><AUTHOR> The company being sued (unsuccessfully) by the publisher is eyeo, the company behind AdBlock plus and Flattr. I'd appreciate a balanced discussion about ad blocking and white-listing of "acceptable adds" for money.</comment>


Show HN: Creepyface – Makes your face follow the mouse - <AUTHOR> https://creepyface.io <comment><AUTHOR> Hi everyone, author here.

Creepyface is a Javascript library that you can use to make your picture follow the pointer (mouse or fingers).

It's been my side project for more than I expected. This is Creepyface's story:

1\. A few years ago I added this feature to my online resume. Employers would see my eyes following their mouse, and they liked it!

2\. At some point I thought I could turn it into an open source library. I did so ([https://www.npmjs.com/package/creepyface](https://www.npmjs.com/package/creepyface)).

3\. I decided to create a site for it. I did so ([https://creepyface.io](https://creepyface.io)).

4\. I decided to improve the site so that people could create their own Creepyfaces from it. I did so ([https://creepyface.io/create](https://creepyface.io/create)).

5\. Time passed and I got fed up, thought this was a useless silly project and was about to trash it forever.

6\. I met a guy at work ([https://github.com/boton](https://github.com/boton)) who thought it was cool and has been pushing me to release it to the wild. Thanks for the motivation!

7\. I kept delaying the "release" because it wasn't perfect. I fixed too many bugs and my friend kept telling me I was worrying too much.

8\. Now here I am, still not convinced, but I think it is time to move on and throw it out there.

What could have taken a few days ended up taking more than a year. So much work for such a small thing :)

I hope someone finds it cool. Feedback is very welcome.

<comment><USER2> I'm the guy and this project is awesome, don't doubt using in your portfolio or about pages

</comment></comment><comment><USER3> Landing page is great - good job!

</comment><comment> rodan- This is super fun! Nice presentation as well

<comment><AUTHOR> Thanks!</comment></comment>


Ask HN: How do you dive into a new codebase? - <AUTHOR> I recently started working on a non-trivial 3-year-old codebase (~50KLOC, mostly python, developed in-house, plus a dozen or two 3rd party dependencies) and I'm not sure how to ease my way into it. The developer I replaced as well as most current developers on this project are working remotely and the main way of communication is chat and email; they don't even use Skype for voice chat.
As for documentation, although there is some it seems kind of unstructured and random; it's hard to see the big picture and how each piece fits with each other. Plus most last-modified timestamps are from 2008/2009, which from experience makes me question how relevant to the currently working system are the docs.
So direct communication and documentation aside, how should I start learning about the system and the code on my own ? Should I go for a top-down approach, i.e. start from the top directory and try to figure out what each subdir is responsible for down to the actual files ? Or rather pick a narrow subtask and drill down to it, ignoring everything but the absolutely minimum required to complete it ? Any insight will be much appreciated, I feel kinda overwhelmed at this point. <comment><USER2> Personally, I wouldn't worry about directories or code layout; focus instead of functionality/use cases.

When I've had to do this, I usually try a dual approach: \- Reading code, by identifying an interesting function / use case and tracing the code (reading + stepping through debugger) from the top to the bottom. Example: start with a webpage / api and drill down to see how it works. \- Adding features / fixing bugs: Once I've got a basic idea of the code layout, having to try and and do small bug fixes or small features is a great way to learn more about the system.

I've never had any problem with using chat to talk with the original developers; that's what I do most of the time, and several times have had to write some initial "get started"-kind of docs for new developers coming into the project. It's something to ask for; can't hurt.

</comment><comment><USER3> It's really like a worldmap: I think it's better to have a good overall view, then dive only when needed. You can literally spend weeks into a tiny part of such codebases.

What I used when dealing with very large code base (>500kloc) was putting the classes, their relationships (inheritance etc) as some kind of graph (UML, MindMap) on a large (A3 or A0) sheet of papier.

To achieve that, I used either an existing tool (reverse engineering UML model in C# for instance) or a home-baked approach (use reflection or even home-made file parsing) then graphviz or similar.

In any case, you'll want to have an automated way of doing this, so you can refine afterward (ie: put colors on what you already visited, add a summary extracted from comments, etc).

Good luck! If it's like for me, it will become fun :)

</comment><comment><USER4> I think the best way to get started is to have some _small_ bugs or features to implement, and start diving in. By tackling a series of small problems you'll get familiar with different parts of the code base as you try to figure out why a particular buggy behavior is happening, or where to put a new feature. Make sure you give yourself a decent amount of time as you do this; you obviously aren't expecting to fix the bug as quickly as you would if you already understood the code.

That said, reading and diving into existing codebases is definitely a learned skill, and a skill that you'll get better at as you do it more and more.

<comment><USER5> I have to dive into new codebases on a daily basis.

The best way to start wrapping your head around it is one, actually try and use all of the features of the software.

Then as the above poster said, start fixing small bugs and adding small features.

Be happy that there is documentation, even a small amount. Then also be joyous that it was written in python. It is a lot easier to read than diving into some legacy C++ code.

</comment></comment><comment><USER6> I would second some of the advice about working on a set of small bugs or features. At my current job we have 2 million+ lines of code in a proprietary language with absolutely no documentation! I found while working on smaller issues it gave me an opportunity to familiarize myself with the rest of the codebase. I also drew a diagram of the class hierarchy as I went but quickly ran out of paper. It's a daunting task but you will become familiar with the code in no time. Good luck!

</comment><comment><USER7> Some rough process like:

\- Identify the main use cases (i.e. what the thing is actually for)

\- Work through each one until they bottom out in calls to a database, webservice, message on a queue, file update etc.

\- Try and sketch out a rough architecture of how the "modules" in the application hang together

Once you get used to doing this it can be quite fun in a masochistic kind of way.

</comment><comment><USER8> neat question, thanks for asking.

i like to figure out what roughly what:

\- the major modules are,

\- the communication paths between different pieces of the system / different servers -- Drawing a picture is really helpful for this

\- key objects or function libraries

And then start with a very small upgrade; sometimes as simple as a little html/view change.

hope this helps -- good luck!

</comment><comment><USER9> Was version control used? Preferably something like Git or Hg where you can see each changeset? Start at the beginning of the project to get a feel for the overall structure then follow how it grew from there.</comment>


Built an art porn site in a drunken stupor - <AUTHOR> Drinking with buddies at a tech accelerator and felt that there needed to be a site just for art porn (it had been an idea I had for a few months). Everyone said they'd use it so I figured I could crank it out real quick.
At 2am, www.faprt.com was born. It weighed 60 videos scrapped from 5 popular tube sites. It pulls in new ones every 24 hours.
I'm using CasperJS to scrape the sites.
Let me know what you think: http://www.faprt.com <comment><USER2> Ok, I'll ask. What is "art porn"?

<comment><USER3> It's "tasteful" porn. Passionate, intimate etc. X-art and Joymii produce a lot of them.

</comment></comment><comment><USER4> Source on github or bitbucket?

</comment><comment><USER5> Wow!

</comment><comment><USER6> E. P. I. C.

<comment><USER3> :D

</comment></comment><comment><USER7> A-Maze-Ing!

</comment><comment><USER8> Just what I need</comment>


The Case for Calling Terrorists Nitwits - <AUTHOR> http://www.theatlantic.com/magazine/archive/2010/07/the-case-for-calling-them-nitwits/8130/

<comment><USER2> I liked this part of the article "... it's fair to say that the Taliban employ the world's worst suicide bombers: one in two manages to kill only himself. And this success rate hasn't improved at all in the five years they've been using suicide bombers, despite the experience of hundreds of attacks—or attempted attacks. "

It's hard to find suicide bombers with a good resume of successful attacks.

<comment><USER3> Yeah, but you don't just wake up one morning, strap on a bomb and go. Rather you spend a few weeks or months at a jihad training camp in the mountains first, and then get sent off to blow yourself and maybe some infidels up.

So there will be suicide bomber training _mullahs_ who have a track record of training martyrs to be effective suicide bombers, and those whose graduates more often than not fail.

</comment></comment><comment><USER4> I was half expecting to see a reference to Chris Morris's recent film Four Lions. That film has been dubbed "controversial" here in the UK precisely because its protagonists are portrayed as nitwits, albeit nitwits with bombs.

</comment><comment><USER5> "The bombs had been prepared in a Palestine-controlled area, and set to detonate on Daylight Saving Time. But the confused drivers had already switched to Standard Time. When they picked up the bombs, they neglected to ask whose watch was used to set the timing mechanism. As a result, the cars were still en-route when the explosives detonated, delivering the terrorists to their untimely demises."

[http://www.speakeasy.org/~mamandel/filks/Darwin- notes.html#t...](http://www.speakeasy.org/~mamandel/filks/Darwin- notes.html#timebomb)

</comment><comment><USER6> That's the trouble with getting someone to be a suicide bomber: you need someone stupid enough to think that killing themselves is a good idea, yet smart enough to pull it off.

</comment><comment><USER7> It seems that "the terrorists" just don't have careful leadership. With good leadership, average people can do amazing things, like hijack four planes at the same time and crash three of them into buildings. Pretty scary.

Also, why does the article call people "perverts" for looking at porn? Really? People _still_ think that?

<comment><USER8> I'm pretty sure they were referring to the sexual encounters involving barnyard animals. I think that qualifies as perverted.

<comment><USER9> But the word was used explicitly in the context of the discussion of the contents of seized laptops.

<comment><USER10> Not all porn is created equal.

I don't find it at all unlikely that the same sorts who would resort to the most intimate form of animal husbandry might have truly perverted pornography.

</comment></comment></comment></comment><comment><USER11> the dumb and the evil have always had a lot in common. It takes intelligence in many forms to recognize and practice virtue, to recognize the influence of the crowd over one's thinking and to resist knee jerk reactions and grudges

<comment><USER12> > the dumb and the evil have always had a lot in common.

As proven by the existence of one of my favorite logical adages- Hanlon's razor.

<comment><USER13> to wit, "Never attribute to malice that which can be adequately explained by stupidity."

<comment><USER11> ha ha. love it

</comment></comment></comment></comment><comment><USER14> When your field is "suicide bombing", it's hard to retain good talent.

</comment><comment><USER15> This article really pisses me off.

Who cares how smart your enemy is? You don't need to be intelligent to be dangerous.

The author clearly doesn't understand the point of asymmetric warfare. Even if people want to laugh at the fact that 50% of Afghani suicide bombers don't kill people, 50% _DO_ kill people. Suicide bombers aren't doing a cost benefit analysis of their efficacy and then deliberating on whether they're going to blow themselves up or not. Their job is to sow terror, and pierce the idea of safety.

In spite of any of the points mentioned in the article, it's still possible to recruit suicide bombers to go blow themselves up for an ideology that's insane.

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

I do honestly believe that we should point out the absurdity of suicide bombing. But the absurdity is _not_ a question of their efficacy, which is undeniably a winning strategy if you've got the man power to throw at it. The absurdity of suicide bombing lay in the ideology, and the goals one seeks to achieve by blowing oneself up.

This article is at best naïve, and at worse, dangerously ignorant and besides the point. Fight ideas.

<comment><USER16> You're completely missing the point. Terrorism is about spreading terror, killing people is just a technique. Finding reasons to laugh at these jackasses makes them a lot less terrifying.

The best way to fight their ideas is to avoid buying into their romantic self- image as heroic martyrs, and reveal them as the sad losers they really are.

<comment><USER11> and yet, humiliation is the best way to make an enemy

I think its much better to have nothing to do with these people. we need to stop trying to create the centralized states our DC politicians are in love with and that are necessarily more fragile, requiring life support from the west.

I think many people feel very threatened by the west, its technology and its overpowering media. the more we keep pushing it in their face, the more they will keep looking for a way to make us regret we ever did

<comment><USER17> _and yet, humiliation is the best way to make an enemy_

Mockery and humiliation are not equivalent. Humiliation implies some degradation of people under our control. We should of course avoid such behavior, but public mockery need not entail humiliation.

I'm pretty sure that folks willing to commit acts of terrorism are already enemies. But I do agree that this sort of messaging has to be careful to differentiate the nitwit terrorists and the larger community from which they might draw support. Mock the former, not the latter.

 _I think its much better to have nothing to do with these people._

Alas, this does not seem politically feasible. Governments that fail to communicate anything to the public about terrorists are at risk of falling victim to demagogues in other parties.

<comment><USER11> I was referring to our foreign policy, not whether or not we should communicate with our citizens about threats

</comment></comment></comment></comment></comment><comment><USER18> Someone relay this to TSA.

</comment><comment><USER19> Only fools underestimate their enemies.</comment>


Playn: write your game once, compile to HTML5, Java, Android and Flash - <AUTHOR> https://developers.google.com/playn/

<comment><USER2> GWT? Either there's going to be some transition to/support for Dart in the near future, or I'm very confused...</comment>


Ask HN: What are some good ORM? - <AUTHOR> I am tried by the lack the of ORM in GoLang, what other languages offer nice ORM which works with PostGres? <comment><USER2> I've tried some ORMs in the past, for me the Django ORM was by far the best. It's extremely powerful and extendable, while covering most use case in a very simplistic way.

</comment><comment><USER3> Obligatory reference/warning:

[http://blogs.tedneward.com/post/the-vietnam-of-computer- scie...](http://blogs.tedneward.com/post/the-vietnam-of-computer-science/)</comment>


Why do you mentor? - <AUTHOR>

a. To Pay it forward
b. An early opportunity to invest
c. You like to learn what's new and what people are working on
d. All of the above
e. Other? Please list <comment><AUTHOR> A + C</comment>


Argentine artist wraps former chocolate factory in Switzerland - <AUTHOR> http://daniel-gonzalez.com/portfolio-items/paper-building-2016-fondazione-la-fabbrica-del-cioccolato-tessin-switzerland-2016/?portfolioID=3684 <comment><AUTHOR> Paper Building by Argentine artist Daniel González gives emotional intimacy back to the architecture; it removes the historical facade from the public view to generate a loss of identity through the change of the original context. With a change in the conditions in which they once lived, a building, a person or a community struggle to maintain their own identity, having been forced to adapt to the new conditions. Paper Building is an ephemeral architecture on the facade of the former chocolate factory "Cima Norma" in Valle Blenio, Tessin, CH. Now on view till September 30th, 2016</comment>


Introducing Wikipedia's new HTML5 video player  - <AUTHOR> http://blog.wikimedia.org/2012/11/08/introducing-wikipedias-new-html5-video-player/ <comment><USER2> Looks like Wikipedia is on track to become a big server of HTML5 WebM videos. The absence of H.264 support (assuming they hold on to that) might finally push Microsoft and Apple to support WebM out of the box. Maybe we will also see more hardware support for WebM in mobile devices...

<comment><USER3> Yes, and this is really exciting news. Soon one day, publishing a video is as easy as publishing a img, the world will be then a more open and free place.

</comment></comment><comment><USER4> I liked this example: <http://commons.wikimedia.org/wiki/File:Great_Feeling.ogv>. It also showcases the subtitles feature of the player. It didn't play the first time I tried it (current stable Chrome on Ubuntu) but reloading helped.

</comment><comment><USER5> Happy to see that a big site is finally starting to support WebM. I hope that they've chosen to not support h264, because of its proprietary nature?

<comment><AUTHOR> As the post say, previously they were using Ogg player and now a complete open source player.

</comment></comment><comment><USER6> I would be interested in knowing the financials behind this. Video is expensive to serve and store: these costs become more noticeable if they get a lot of growth of Video uploads.As much as I love HTML5 Video , it drives up your storage and transcoding costs by two to three times if decide to support WEBM, OGG and MP4(though I see they are not doing MP4). If they are transcoding the video ,then that would add to CPU costs. Of course, I am basing my assumptions of AWS, Zencoder etc. I would love to hear how to plan to contain costs.

<comment><USER7> Wikipedia currently holds a huge amount of storage and data, while it will be a lot of work for them to support videos, I assume they thought of the costs before hand.

Also, the true cost of videos isn't storing them in two formats, it's the various qualities, such as if I upload a 1080p and it gets converted to 480, 720, and 1080 for streaming.

<comment><USER6> I totally agree: the costs are number of formats supported times number of streaming resolutions supported. One video could potentially eat up 1 Gb of storage , if we add up all the formats- resolutions combination. (I am assuming that they will have multiple copies of the same video in different qualities. ) Plus transcoding and costs. A comparative text article might be stored and served at a fraction of the video costs.

I am sure Wikipedia has some of the brightest minds and they have thought about these numbers. I want to know what their analysis is for my own edification.

<comment><USER7> That makes sense, it would be nice to see what they're planning - how they plan - to support the new videos that will be sure to come. I wouldn't expect anything about it for awhile though, it's new, they're still learning, and they may change their approach early on.

</comment></comment></comment></comment><comment><USER8> So, nobody cares about more widely adopted <object/> which was supposed to be a solution for future media types and just happens to usually be more stable, have better perfomance and support much more media formats without having to invent new elements for each media type. Not even as a fallback.

</comment><comment><USER9> Does anyone have some benchmarks on file size / video quality between ogv and webm?

</comment><comment><USER10> The camel video barely plays in Chrome 23, froze my Firefox 16.0.2

<comment><USER11> (I'm a Firefox developer that happens to work on HTML5 audio and video).

I can reproduce your problem on Firefox 16.0.2 , and this is fixed, at least on our Nightly builds, perhaps before that. But it is certainly embarrassing and should not happen (and was not caught during our extensive testing and beta phases), I'll look into back porting the relevant patches.

Again, sorry about that.

<comment><AUTHOR> You are great guys. I would have never used internet if I didn't get Firefox.</comment></comment></comment>


Show HN: Review Requests for GitHub [Open Source] - <AUTHOR> https://review.two15.co/ <comment><AUTHOR> All the code is available here: [https://github.com/Two15](https://github.com/Two15) You'll find some Elixir/Phoenix, some Ember.js and some Restify.

You know where to find me if you have questions or comments :)</comment>


Show HN: Nightlight, an editor that runs inside Clojure projects - <AUTHOR> https://github.com/oakes/Nightlight <comment><USER2> I don't really see how the integration would be any better than what I'm getting already from Emacs: I can already patch the code live, etc, through a REPL, and run the code as I develop it.

Nightlight is asking me to give up the comfort of Emacs: so what does it get me?

<comment><USER3> I am ignorant of SLIME/CIDER (though I think I've used the latter with Clojure). Do they have access to the same memory space as the running application and the ability to interact with live application state? It seem that Nightlight has that as a goal. My (limited) understanding is that SLIME/CIDER run in a separate process from the application, thus requiring IPC back and forth between Emacs and the application runtime.

<comment><USER2> That's true, but the practical effect (having access to application internals, interacting with live program state, the ability to connect to a live program and hotpatch it, even if it's running on a remote server (but you'll really want the source files if you're doing that, and you should be sure to upload the new sources/binary to the server you just hotpatched, or you'll be in for a shock when it reboots), and so on) is exactly the same, and they mostly share the same capabilities (AFAICT, Nightlight might have better autocomplete than SLIME/Geiser, but other than that, I can't think of anything).

</comment></comment></comment><comment><USER4> Wish it credited Light Table as inspiration ([http://lighttable.com/](http://lighttable.com/)) :/ Even the term "instarepl" is taken from LT's creator, Chris Granger. Of course LT's inspiration is Smalltalk's IDE.

<comment><USER5> "Of course ..." is that really true though? From the very beginning, the very first demo, Chris Granger mentions that he got inspired by Bret Victor's Inventing on Principle demo. He mentions it in the first blog post as well :p No mentions of smalltalk

Chris Granger's first video on LightTable: [https://www.youtube.com/watch?v=7XUWpze_A_s](https://www.youtube.com/watch?v=7XUWpze_A_s) Chris Granger's first blog post on LightTable: [http://www.chris- granger.com/2012/04/12/light-table-a-new-id...](http://www.chris- granger.com/2012/04/12/light-table-a-new-ide-concept/)

<comment><USER6> Ah, but Bet Victor draws inspiration from Smalltalk, Logo and Hypercard :

[http://worrydream.com/LearnableProgramming/](http://worrydream.com/LearnableProgramming/)

</comment></comment></comment><comment><USER7> I like the idea of a browser based IDE. I like the idea of an IDE for a lisp- like language that actually offers first-class auto-completion.

I don't like the idea of embedding it into a project. That doesn't make sense from a dependency tree way of looking at it.

<comment><USER3> Maybe a Clojure equivalent to NPM's "devDependencies" can manage something like this, so that it gets excluded from the final deployment JAR. It's been a while since I'd done Java/JVM development, but the dev-time vs. deploy-time dependencies configuration should be possible, I would think.

<comment><USER7> I wouldn't want to risk something this critical being in my project. I'm stupid so I try and limit my own attack surface against myself.

<comment><USER3> A very humble approach, and one that I try to subscribe to, as well. :)

I think the embedding part is certainly a tradeoff. Once the development community settles on a best-practice for things like this, it becomes less of a danger of forgetting. For example, once this sort of config shows up by default in archetypes and boilerplate projects, I feel that the danger is reduced to the level of being manageable. And hopefully the port that the editor uses is blocked by default in the production environment. :)

<comment><USER7> Yea it seems like a great project but I don't really like to think of my IDE as a dependency of my code but rather my code as a dependency of my IDE.

</comment></comment></comment></comment></comment><comment><USER8> The possibilities of this thing blow my mind. Very cool idea.

<comment><USER9> Can you give some examples of what you have in mind? I find this very intriguing but I can't think of anything it could do that would be impossible with hot reloading code.

<comment><USER10> 1\. Cloud based development/debugging.

One of the harder issues when I'm building microservices is stringing each service and dependency together and debugging. With this I could put together a full staging environment and log into each service to monitor and tweak problems I've found.

2\. Limited hardware or access.

This is important because it's talking with Java Clojure not Clojurescript. Because it's entirely browser based, I could spin up an EC2 instance and load the editor on my phone. I can't do that with a regular Clojure environment in my phone.

<comment><USER2> ...But can't you do that already with CIDR? (or SLIME/Geiser, for some of the other lisps).

IIRC, it does support connecting to a remote REPL like this.

</comment></comment></comment></comment><comment><USER11> Very cool. Looks like a spiritual successor to Catnip[0], which I made heavy use of when I was newer to Clojure.

Bodil's moved on to other things, I'm glad someone is moving forward with this kind of environment.

[0]: [https://github.com/bodil/catnip](https://github.com/bodil/catnip)

</comment><comment><USER12> Something more advanced yet similar to Nightcode is something I am definitely excited to try as an alternative to Emacs and Cursive. Also gotta try this with play-clj to see how the workflow plays out.

Edit: Tried the REPL but it felt quite buggy: [http://recordit.co/ziDH1PrJvm](http://recordit.co/ziDH1PrJvm).

<comment><USER13> It's the same author, so I'm assuming that this is his spiritual continuation of Nightcode with a huge update.

EDIT: They are going to remain separate, here's what he wrote on the project site:

> _Nightcode remains easier for beginners, because it 's a standalone > application with Leiningen and Boot built in, so they don't need to use the > command line. Nightlight must be added to your project, but provides more > power, so it may be more suitable for intermediate and advanced users._

</comment></comment><comment><USER14> This is actually _really_ creative and clever! In fact it's the first project of it's kind that I've _ever_ heard of!

Basically it's a library that runs a web server that serves a page which displays the contents of your source files in an editable text field, and saves/loads them by reading/writing directly to disk. This also means it should be _much_ easier to implement the advanced IDE features of CIDER, since you don't need a plugin system and have full access both to the raw source code files and the project's very own JVM (which the IDE shares). Neat!

Although, I once again have to completely disagree with Oakes' choice of buttons in the toolbar (just like in Nightcode): I don't know any programmers who don't know the shortcuts for Save, Undo, and Redo by heart.

<comment><USER6> You might want to have a look at LivelyKernel too:

[https://www.lively-kernel.org/](https://www.lively-kernel.org/)

</comment></comment><comment><USER14> > _" More powerful editors like Cider and Cursive manage to do this with some > very complex machinery that I could never duplicate. Instead, I decided to > rethink the problem. Since Nightlight runs inside the same process as your > project, code completion and other advanced features are trivial to > implement."_

How? What makes it easier to implement code completion when the IDE is running inside your project's JVM? Clojure is still a _dynamic_ language, which means you'll never fully know what vars make _actual sense_ in a given context. For example what vars in the current context make sense as arguments to the function you're about to call, when you have no idea what the type signature of that function is (which may even be a variable). Unless, do you mean very simple context-less code completion? That's what CIDER does, and presumably Cursive too, but they just do it by asking the process on the other end of the nREPL server for more details, and the plugins for these have access to the same JVM.

<comment><AUTHOR> The reason code completion is easier with this design is that I don't need to deal with any nREPL server; Nightlight can just go to the relevant namespace and ask for the available symbols.

You are wrong that it is context-less code completion. In fact, I use the same library that CIDER does: [https://github.com/alexander- yakushev/compliment](https://github.com/alexander-yakushev/compliment) I pass the entire top-level form to the library so it can make intelligent choices about what to complete. Here's how it works: [https://github.com/alexander- yakushev/compliment/wiki/Exampl...](https://github.com/alexander- yakushev/compliment/wiki/Examples)

<comment><USER3> Just wanted to repeat my sentiment in another thread, that I love this approach to problem solving. The outcome appears to be a tradeoff, but one that simplifies the hard part beautifully, leaving a simple(r) solution. I look forward to how this goes!

</comment></comment></comment><comment><USER15> "The ambition is to create something that follows the Lisp and Smalltalk tradition, _blurring the line between your tools and your code_ to provide unprecedented interactivity."

(emphasis mine)

I don't come from a Lisp background, but I don't see why that would be something desirable at all. Does anyone know more about this?

<comment><USER16> Reflection, for example, was heavily used by Smalltalk tools to build and debug objects alive.

Growing programs without the need to stop them is also very much in the Lisp tradition. See, e.g. the JPL remote bug in spaceship story [1].

[1] [https://ti.arc.nasa.gov/m/pub- archive/176h/0176%20(Havelund)...](https://ti.arc.nasa.gov/m/pub- archive/176h/0176%20\(Havelund\).pdf)

</comment></comment><comment><USER17> I would love to see if this works on Google App Engine. GAE has some strict requirements, as far as what its apps are allowed to do, but, up until now, it's been a pretty closed box when it comes to debugging. Something like this would be superb; official support for GAE would be even better.

<comment><USER18> GAE is rolling out their next gen which is container based. No more restricted jvm, and debugging is much better (live ssh access). Just a heads up :)

<comment><USER17> Thanks for the heads up. Do you know when?

<comment><USER19> It's in beta currently [1].

Last time i checked (4 months ago, with a hobby project) it felt already pretty mature.

[1] [https://cloud.google.com/appengine/docs/flexible/](https://cloud.google.com/appengine/docs/flexible/)

</comment></comment></comment></comment><comment><USER20> Something is wrong with the SSL cert on [https://sekao.net/nightlight/](https://sekao.net/nightlight/)

<comment><AUTHOR> I'm using let's encrypt, which seems to not work on chrome for android.

<comment><USER21> My let's encrypt sites work just fine on Android

</comment></comment></comment><comment><USER22> This is amazing. Could you provide a "starter image" in the form of, say, an android .apk ? That would get me started on clojure very quickly

(that would be the smalltalk way)

<comment><USER23> So you can code on a mobile device?

<comment><USER22> yes, I would code by connecting to my mobile device from my laptop

</comment></comment></comment><comment><USER24> Very metacircular of you. I bet 5$ that jmc is applauding.

</comment><comment><USER25> Interesting project. but I don't feel I'd use other editor than Emacs for clojure.

<comment><USER2> CIDER allow for many of the same features, IIRC. But you likely already knew that, and I'm primarily working in Scheme with Geiser, so what do I know?</comment></comment>


Ask HN: Have you ever used logic programming in a recent project? - <AUTHOR>

By logic programming, I mean Prolog or variants. I would like to know how it made your life easier compared to using other more conventional programming paradigms (OO, functional, imperative). For which situations is it the best tool at hand? <comment><USER2> You might want to see the comments from this thread, "Ask HN: Anyone use Prolog?" (less than a month ago):

<http://news.ycombinator.com/item?id=1912735>

<comment><AUTHOR> Thanks. Mental note: "Search for anything you are going to ask before you actually ask it".</comment></comment>


Netflix confirms it is blocking rooted/unlocked Android devices - <AUTHOR> http://www.androidpolice.com/2017/05/13/netflix-confirms-blocking-rootedunlocked-devices-app-still-working-now/ <comment><USER2> Anyone who roots their phone, in all likelyhood, knows how to pirate the content: granted Netflix is way more convenient, that's why I pay them. I don't watch on mobile devices so this doesn't bother me. If I did watch on mobile and I had a rooted device, they would definitely stop seeing my money though. When will these companies learn to stop going after the nerds; we're the one who actually know how to get around you if you piss us off.

<comment><USER3> Knowing how to pirate is quite different from being able to pirate easily. Torrenting is a small niche now (at least in the US) because of ISP DMCA notices etc., whereas billions of people own smartphones worldwide. If someone releases a netflix-ripper app, it would quite likely see a higher adoption than bittorrent.

<comment><USER4> A netflix ripping app would surely be banned from the Play Store, and would still not be able to solve the content distribution problem. Netflix doesn't care if you rip content, they care if you try to distribute ripped content to others, which is really only feasible with bitttorent or similar.

<comment><USER3> It doesn't have to be on the play-store. Also, netflix cares more about ongoing subscription than re-distribution. So if I rip a sizable chuck of what I want to watch, I won't renew my subscription.

<comment><USER5> What's to stop Netflix from uniquely forensically watermarking each user's streams? If anyone person starts to rip their streams for redistributing, then it will be easy enough for them to determine which user it was and block that account. The small number of people that would be able/willing to rip would be easy enough to track down.

<comment><USER6> Blocking accounts would just earn you an extra $12, not solve the problem. So you'd need to actively prosecute, and account sharing is so rampant that is going to quickly lead to terrible press.

</comment></comment></comment></comment></comment></comment><comment><USER7> This sort of thing doesn't surprise me from Netflix. It has been tightening up its rules for some time.

I dropped Netflix after whoever is in the group that decides policy for Netflix decided that Hurricane Electric's IPv6 tunnels are "a VPN" that is being used to circumvent Netflix's location checks with no warning.

(I'm aware of the DNS tricks I can do to only return IPv4 addresses in response to queries for the netflix.com zone. I choose not to do them and, instead, to not avail myself of Netflix's content.)

<comment><USER8> Yeah they seem to be moving to newer, platform based security/drm models across the board.

For instance my HTPC has an Nvidia 1050ti card and can do UHD colour 4k output. I can play UHD test files just fine.

But the Netflix app won't show me 4K content as they require you to have a Kaby Lake CPU, which has some new hardware DRM module built in.

<comment><USER9> > Netflix app won't show me 4K content as they require you to have a Kaby Lake > CPU,

So we've gone from "this website works best in Netscape", to "this website works everywhere" to "this app requires you to have a specific motherboard".

Sure sounds like progress. Who do we have to thank for this?

<comment><USER10> the man!

(i just have no idea how to get enough people to care about this kind of stuff to matter, and even if I'm the one people come to for recommendations, I can't in good conscious recommend the platform/device where netflix won't work)

</comment></comment></comment></comment><comment><USER11> Who is this trying to stop? People that rip their content? Because those ones certainly have other methods to do it (e.g. record video out).

If they're targeting consumers, why do they give a damn if the phone is rooted or not? As long as they pay netflix to stream the content to them?

Or is this "just" to prevent fake locations and such, to please their content producing/distributing overlords?

<comment><USER12> Netflix doesn't care. They drag their feet on this kind of thing as much as they can. In the end, though, they do this so they can keep their licensing agreements with content creators.

<comment><USER13> This. It is 100% about being able to license more titles. Many people forget what the early days of Netflix streaming was like. Remember when you needed silverlight to watch on a computer? Remember when you couldn't even get Netflix on Android? Netflix has come a long ways since those days, and they have done a LOT in moving forward fair-use expectations for digital subscription content.

<comment><USER14> Netflix loves doing DRM stuff "for the studios" as it creates a barrier to entry for other players. If Netflix pushed the truth that DRM doesn't matter, then a competitor might get a studio to sign a nice deal with them.

<comment><USER13> Ya, because studios want (require) DRM. My point is that Netflix has done a lot to reduce the obnoxiousness and hassle of DRM compliance.

<comment><USER15> Name one thing they have done

</comment></comment></comment></comment></comment></comment><comment><USER9> That's google essentially rendering the value-proposition of their bootloader- unlockable phones to be a negative one.

Wth would I pay extra for a Nexus/Pixel if unlocking it causes all Android software which uses DRM to start failing due to "not being compatible"?

Might as well buy a Samsung then. Or even better: an iPhone.

It's no longer your device anyway.

And to think Android was once open source. Now it's infected with DRM all the way down to the bootloader.

Such a shame. There are no free devices anymore.

Edit: to clear I've always been OK with DRM in apps (as opposed to HTML) because that clearly isolates it from the general purposey bits of the platform. Seems that's no longer the case with Android.

<comment><USER16> > I've always been OK with DRM in apps

You want to eat your cake and have it too. DRM is technically impossible, so problems like the one you described are inevitable. Bummer, I guess.

<comment><USER17> Can you expand on why DRM is technically impossible? I don't disagree but I'm wondering about your reasoning.

<comment><USER16> "Impossible" is a bit rhetorical, although in principle the content has to be decrypted to be seen and a Sufficiently Sophisticated Attacker can always somehow extract the decrypted data from the device, in more practical terms this can be made pretty much arbitrarily difficult.

What I really meant is that making DRM difficult to crack generally goes against owner control over the machine. The more control you have the easier it is to simply copy the decrypted data or at least attempt exploiting some bugs in the DRM engine if the former is impossible. So we see things like signed bootloaders or dedicated "secure" cores running alongside normal CPUs with some secret firmware on them.

In particular, it seems that Android's DRM can be subverted by the bootloader (presumably it uses the ARM TrustZone extension, which is configured by the bootloader and then locked away from the OS) and hence the OP has to choose between DRM and unlocked bootloader.

</comment></comment></comment></comment><comment><USER18> The way this message will translate to the nerds|power users|hackers|rooted user|content creator|

"Netflix does not value your money, therefore you cannot use our services. However, you can always pirate the content on Internet for free."

<comment><USER19> Why bother with content that is difficult to access, when you can watch one of the billions of other videos and streams available on YouTube, Twitch, Vimeo, or any other website.

If a content owner wants to make access to their content difficult, why should their content be relevant?

</comment></comment><comment><USER20> Can someone explain what is it about some crappy shows and Hollywood movies that it deserves such invasive attacks on device ownership?

When Microsoft tried Secure Boot there was a huge outcry. But when HBO/Netflix/Verizon/WB demand a complete lockdown of your device (to the point where AACS 2.0 demands you have a special CPU, Motherboard, GPU and more components that lock you out and disable themselves if you use custom software/drivers), then suddenly even on HN I see a huge amount of people defending a complete lockout from your device to the point where you're not allowed to even install a custom, better, driver.

What is it about some shows/movies that would be SO DAMAGING to whole society if a few people would be able to copy them on another device or even give it to a friend?!

<comment><USER9> > AACS 2.0 demands you have a special CPU, Motherboard, GPU and more > components that lock you out and disable themselves if you use custom > software/drivers

That's a standard I have zero knowledge of, because I have absolutely zero intentions going down that road for any reason what so ever. And I wish that would apply to much more people!

My PC represents the last bastion of true computing freedom, and I'm not giving up that, just to be able to watch some movies in a freaking web- browser.

(In the name of pragmatism and not being a complete neckbeard, I have separate, unfree, locked down devices for that specific purpose)

<comment><USER20> AACS 2.0 is a DRM standard used in UHD/4K Blu-Ray disks. It requires the device to call home via internet to retrieve the decryption keys for the BR disc you're holding in your hand. You need a full stack supporting DRM (including a CPU with ironically called "Software Guard Extensions"). At this point there's obviously no way of playing back these on Linux or non- whitelisted hardware, which is an issue because they're the only source of truly high-quality 4k/HDR content (the videos are encoded in 50+ MBit bitrate as opposed to HDR content on streaming services which barely gets to 15Mbit and is therefore not really much visually different than fullHD content).

Also, I've just noticed that Netflix on the web demands to "verify my hardware" (on Chromebook) to determine if my laptop is properly locked down for video playback. The DRM assault is getting worse, not better.

<comment><USER21> Thanks for the detailed response. You mentioned:

>"AACS 2.0 is a DRM standard used in UHD/4K Blu-Ray disks."

How does this relate to the context of streaming from HBO/Netflix? Are these companies offering 4K streams on their services?

<comment><USER20> They offer 4K streams already, but they don't use this DRM standard. They mostly now use Widewine or some similar which is also slowly pushing to the same restrictions as AACS 2.0 on BR discs has.

It was more demonstration of a trend.

</comment></comment></comment></comment></comment><comment><USER22> Isn't it possible for a rooted device to fake beeing a non-rooted device to (selected) applications? To my understanding root means having the full control but I fear that this definition doesn't apply to smartphones.

<comment><USER23> Obviously I don't know the implementation details of how Netflix is detecting rooted devices, but my guess is they're using Play Services's new "GMS Certification".

This involves using signed hardware that helps determine if the execution environment is trusted. So, users can still root the device, but Android + Play Services can still determine if features (such as DRM) can be relied on.

It makes sense for Google to develop these features, especially as it wants to move Android to new devices (Cars?), reduce risk for mobile payments, in addition to giving stronger security features to content distributors. This also lets Android devices compete with security features like Apple's secure enclave.

Honestly, if you are going to root your device you must accept you are not using it in the supported way the vendor intends. Therefore, you should not expect all the features of the supported configuration. I think that's a fair trade-off. Rooting your device is awesome!

<comment><USER24> I think it's actually the SafetyNet Attestation API. Checking for root means requiring "certified, genuine device that passes CTS". It also excludes "genuine but uncertified device, such as when the manufacturer doesn't apply for certification". [https://developer.android.com/training/safetynet/attestation...](https://developer.android.com/training/safetynet/attestation.html#possible- results)

I was reluctant to unroot an old phone to try Android Pay, but having to do it just to watch some movies a tad too far. For me anyway. [https://phunehehe.net/xperia-android/](https://phunehehe.net/xperia-android/)

<comment><USER25> My Nexus 6p is running the latest purenexus room, so it is unlocked. Before I rooted, I installed both DirecTV and Netflix and logged in to both. Rebooted recovery, flashed magisk 12, rebooted. installed magisk manager from playstore, enabled su hide in magisk settings. Rebooted again. pass safety net, Netflix works like always

</comment></comment></comment></comment><comment><USER26> As someone with an unlocked and rooted android phone, what are they afraid of, and where can I get it?

<comment><USER3> Get Netflix ? Yalp Store ([https://github.com/yeriomin/YalpStore](https://github.com/yeriomin/YalpStore)) should work I guess. There are also mirror sites for apks. Netflix/Google may decide to block playback too in the future, at which point you'll have to explore other options. You can also try to use Magisk to circumvent safetynet.

<comment><USER26> By "where can I get it?", I meant "where can I get the thing that Netflix is presumably afraid of me using on my rooted phone?"

</comment></comment></comment><comment><USER27> This is particularly absurd because it's trivial to record from any device that has HDMI out; HDCP 1.x is quite thoroughly broken, and there is a steady stream of HDMI splitters that can strip HDCP 2.x

<comment><USER8> The problem is dumping all that data to disk, or encoding on the fly and doing so.

HDMI caps are mostly kind of shitty quality. Look at the UHD BluRay releases (smurfs excluded.)

<comment><USER27> I know there are non-compressing UHD cards; can x264 on a modern multicore not keep up at -qp 0 -preset ultrafast for 4k/24p?

</comment></comment></comment><comment><USER28> Does "unlocked" mean carrier-unlocked or bootloader-unlocked? I'm confused by this sentence:

 _For example, Artem 's unlocked stock Pixel is still on Widevine Level 1, the most secure level, but fails SafetyNet because it is unlocked._

(What does "unlocked stock" mean - does the Pixel ship carrier-unlocked? Was it unlocked by calling up the carrier and asking for an unlock, or in some other way?)

<comment><USER29> I would assume bootloader unlocked, I believe that causes SafetyNet to fail and can't imagine why a carrier unlocked phone would.

<comment><USER30> Yeah, an unlocked bootloader passes androidboot.verifiedbootstate=ORANGE to the kernel cmdline.

That said, the kernel could just lie about what was passed to it sooooo...

</comment></comment></comment><comment><USER31> Are they going to block admin Windows accounts too?

<comment><USER15> Why would they....

ohh you believe if you are an "Admin" on windows you have control over the OS.... no Redmond has control over the Windows OS, they have DRM built in well below "Admin"

<comment><USER31> Ok, let's put it this way: Are they going to block root Linux accounts too?

<comment><USER15> Well

1\. Root on Linux is not the same as Admin on Windows. Sorry

2\. They do limit Linux playback to 720p, you can not play 1080p or higher streams on linux largely due not having control over the OS.

<comment><USER31> > 1\. Root on Linux is not the same as Admin on Windows. Sorry

No need to be sorry, but how so?

> 2\. They do limit Linux playback to 720p, you can not play 1080p or higher > streams on linux largely due not having control over the OS.

I didn't know that. Is it done based on OS detection or is it just Netflix neglecting to support? What if I fool Netflix into thinking I'm running windows? Will I be able to play 1080p/4k then?

<comment><USER15> >No need to be sorry, but how so?

With root on linux there is nothing outside of your control, With Admin on Windows there are still all kinds of things outside of your control. Just look at the Telemetry controversy as an example. No way for even an "admin" to disable it

>I didn't know that. Is it done based on OS detection or is it just Netflix neglecting to support?

In order to play HD Content you much have a OS that refuses to follow the Admin's wishes, instead follows the wishes of the OS Vendor.

You much have full stack DRM built into the OS that is not bypassable.

Currently the Only OS that support browser based HD Playback from netflix is Windows in the Edge Browser because MS DRM is built into the OS and the Admin of the OS has no control over it.

</comment></comment></comment></comment></comment></comment><comment><USER32> This is kinda silly though. Pirates will not bother using netflix. You have stremio, pop corn time, the pirate bay and 100 of streaming websites with more content for free. If somebody is paying, let the client have the unlocked phone.

</comment><comment><USER33> So they are now admitting they have gone completely insane with DRM craze. That was expected.

Now let someone come and disrupt this industry swamp with DRM-free video.

<comment><USER34> The drm is probably a requirement to stream many of the videos. I would rather Netflix with drm than not being able to stream legally

<comment><USER35> Next thing you know the photos you upload to facebook might use DRM so that you wouldn't be able to move to other site. Would you be happy about such a development?

<comment><USER34> I'm unsure how this is related to my argument. I never said I liked drm, I basically just said that it's a tradeoff I'm willing to make because it's probably a necessity if they want to license the content legally. Obviously I would be mad at Facebook but it's an entirely different situation

<comment><USER35> > because it's probably a necessity if they want to license the content > legally.

For sure the same argument could be applied to fb photos, the point is - it's a slippery slope and I'm not willing to walk it. It is a tradeoff though, the one which means that society is willing to trade their freedom. "The dancing pigs" phenomenon if you wish, the Felten & McGraw quote applies so much to security as it does to freedom and privacy: Given a choice between dancing pigs and _security /freedom/privacy_, users will pick dancing pigs every time.

<comment><USER34> I still don't understand how the argument applies to Facebook photos. With Netflix we are talking about a requirement imposed by the people creating their content so my guess would be that the analogue in Facebook terms would be if users started not posting photos unless Facebook implemented drm but I don't really see the point of that analogy.

</comment></comment></comment></comment></comment></comment><comment><USER36> It's shit like this (and the VPN bullshit) that keeps piracy alive. popcorntime has chromecast support and a much better selection anyway. Or kodi or whatever people use these days. The _only_ selling point and advantage that Netflix ever had over the alternatives was convenience. That's no longer the case.

</comment><comment><USER37> Bad move, in my opinion. So now most 30$ Android-TV devices are not going to be able to run Netflix? I hope they don't blame piracy afterwards.

</comment><comment><USER38> Wait. I can't cast Netflix to my TV from my phone anymore?

What the f __* are they expecting us to do? Surely they can 't be that stupid?!

</comment><comment><USER39> What I don't understand is what Netflix has from it. Is Google paying them money for that "feature"?

</comment><comment><USER40> rooted != unlocked

My phone is not rooted. It is unlocked. Netflix app works fine on this phone.

<comment><USER41> If your phone is unlocked, you will no longer find the app in the Play Store, or any updates to it. If it's already installed or sideloaded, it will work, for now.

<comment><USER40> Not true. My phone is unlocked, the Netflix app was not installed, and right before posting my above response I installed it from Play Store.

</comment></comment></comment><comment><USER42> This is outrageous.

</comment><comment><USER43> Why prevent installing the app when you could instead stop specific content from being played?

Surely not all Netflix content is licensed under terms which prevent it from being distributed to rooted devices.

<comment><USER44> Testing and complexity. (in their estimation) There's just not a large enough population to shoulder the additional engineering overhead and maintenance costs of partitioning the data and testing/monitoring with every single release.

</comment></comment><comment><USER45> There are going to be people that blame Netflix for this, but it's really not their fault. They didn't even care if people used VPN's to access their service. Pressure from the content providers forced them to do this.

<comment><USER15> >There are going to be people that blame Netflix for this, but it's really not their fault.

There are going to be people that continue to excuse netflix and believe it is all pressure from content providers.

News Flash for people that believe that, Netflix is a content provider now. They fully support DRM for their content, they are not being "pressured" by content providers to do this. They support anti-consumer policies like DRM, and are just like the MPAA in this regards

Stop allowing Netflix to hide behind their PR machine and blame 3rd parties for polices they fully support and endorse

No I do not believe for 1 second Neflix is being pressured by anyone to enact these draconian drm polices nor where they forced to support EME in HTML5.

Netflix is just another anti-consumer, anti-freedom corporation.

<comment><USER45> Here's another news flash - Netflix without content ceases to become worth their subscription fee. What did you really expect Netflix to do? Ignore the demands of their content providers and then have the content taken away?

<comment><USER15> Keep defending netflix if you want, they are not innocent victims of content provider threats, they are content providers.

MPAA did not come in strong arm Netflix, Netflix is a willing and eager participant in the development and spread of DRM

<comment><USER45> There's no need to defend Netflix as they're simply doing what they need to contractually do to stay in business. Did you really think Netflix was going to defy the demands of their content providers? Content is king and if Netflix didn't have it they wouldn't be worth subscribing to.

<comment><USER20> Again, Netflix is actively pushing DRM on content they themselves produce (no "content provider" pressure there).</comment></comment></comment></comment></comment></comment>


What's Wrong with Learning Haskell - <AUTHOR> http://willowbend.cx/2011/07/22/whats-wrong-with-learning-haskell/ <comment><USER2> My biggest stumbling block when trying to learn Haskell, was that I could not find out what operators did, and every example program i tried to learn from had its own obscure set.

Even simple things like trying to find out what "$" does, are effectively impossible to search for. Constructs such as "||>" are a nightmare.

I finally progressed a little after finding a Haskell "cheat sheet" and reading it thoroughly.

The "cheat sheet" was 14 pages long, with three columns per page. And to top it off, it still didn't explain what many of the operators did, rendering whole sections illegible.

Still, like I say, it's the best learning resource I found.

<http://cheatsheet.codeslower.com/> for the curious.

<comment><USER3> I had a look at the Cheat Sheet - many thanks it is exactly what I need. I have some basics with Haskell and as you said it is a nightmare to figure out what the operators are doing. I am still working through Real World Haskell, the book is really good - but what I miss is this kind of short reference (well, the cheat sheet being 14 pages, it is not really short).

Thanks for this link!</comment></comment>


Why pre is better than post production code review - <AUTHOR> https://about.gitlab.com/2015/08/05/6-reasons-why-pre-is-better-than-post-production-code-review/

<comment><USER2> Are there really places doing post-production code review? That sounds like a terrible practice.

I've worked for places that didn't have code review, and places with pre- production code review. The ones that didn't code review brought in code review practices (like they should). I have never seen a post-production review process though.

<comment><USER3> There are plenty of places that do code reviews post-commit, but these places pretty much always just have their CI push to a staging server and not prod.

<comment><USER4> Post commit, sure... I still prefer pre-commit, but I get why some might do post-commit.

But post- _prod_? Why even bother at that point? Might as well put off writing tests and so forth, too! Go BIG!

<comment><USER5> From the other side pre-prod code review just delays software getting into production. Delays here tend to lead to bigger, riskier changesets.

I'd rather continuously-deliver sub 1hr of changes to production several times a day. Pair & Mob programming provide continuous code review pre-commit, but they don't provide all the benefits of traditional code reviews. It can be valuable to sit down as a team and or with others who didn't work on some code and think through how to make it better/improve it asynchronously.

<comment><USER4> _From the other side pre-prod code review just delays software getting into production. Delays here tend to lead to bigger, riskier changesets._

That makes no sense.

If delays introduced by pre-prod code review result in "bigger changesets", you're clearly doing it wrong. In fact, if you batch up commits to deliver to prod on some semi-regular basis, the exact _opposite_ should happen.

Individual changesets would be exactly the same. Velocity may slow down (that is, it may take longer for any given changeset to make it to production), but you're producing higher quality code in exchange.

</comment></comment></comment></comment></comment><comment><USER6> I personally review all of the code from anyone on my relatively large team when they check it in. When I first started at my current organization everyone thought this idea would be absolutely crazy. The objections were usually in one of two categories. From engineers it was "My code doesn't need reviewed! Why would you review my code? Do you not trust me?" and from management "There is no way you will have time to review that much code! You'll slow everything down!" Neither of these is true.

First of all I let every engineer review my code (and encouraged it). They found problems. They laughed. They realized I wasn't embarrassed by having to fix my code... and they realized it was ok for them to do the same with theirs. As for managers, if you review code early in the development process there just isn't that much to review. I wouldn't go line by line and check every possible thing. I generally am looking for code smells. If tests are there and CI runs then my biggest concerns can be found relatively quickly, commented upon, and then I can move on and so can the engineers.

6 months later, I have had a number of engineers say that would never want to have it any other way again. Frankly, that's how it started with me too. I really enjoy code reviews.

<comment><USER7> I am enjoying Ex Catmull's book "Creativity Inc" about his time founding and running Pixar and his struggles to build a creative company that keeps being creative.

The parallels to software engineering are many and obvious, and I encourgE you to read it (candour, search for quality etc).

But the big one that struck me and I am looking for a way to try it is in "the brain trust". A group of 20 or so directors and producers gather every three months to watch the latest version of a film (I guess they all meet more than three months as they make more than one film at a time but whatever). The goal is to give feedback on what does and does not work as story arcs and emotional content and so forth. Not to fix it, but to raise the issues, and not to proscribe solutions but to point out blind spots.

Daily code reviews are great, but stepping back every few months with comfortable peers and just looking around a system is something that I would love - it seems to only happen after six or more months when things are starting to break.

</comment></comment><comment><USER8> What does post production mean? After it's shipped? After it's merged to a release branch?

All of those sound like madness to me. It's not done if it's not reviewed. How are you going to release something that isn't done and expect the result to be what you want, unless what you want it to ship something that isn't done.

I can't ship stuff right all the time without code review. And I know I'm not terrible. I don't know anyone who is better. I find that defect rates are constant across skill levels and developers after a certain point. The real difference is productivity which results in more defects from more productive developers.

<comment><AUTHOR> I think after it is shipped on a environment with actual users. But at GitLab we always review before merging into master.

</comment></comment><comment><USER9> You can make code reviews required by using something like Gerrit ([https://code.google.com/p/gerrit/](https://code.google.com/p/gerrit/)) and having it be the gate to your master branch.

The system I use at work is:

code -> push to gerrit -> gerrit automatically runs all unit tests and if they pass you get a +1 from gerrit -> get a code review + approval from a colleague -> submit.

So to get a piece of code to production you need both all unit tests to pass AND a code review. I am a big fan of this system and gerrit

</comment><comment><USER3> "Small Reviews > Large Reviews"

This depends on what you are looking for. For style and "obvious" bugs? Agreed.

For finding bugs? Couldn't be more wrong. Functionality based reviews pick up far more defects, if done properly, than reviews of change sets. And it's because you pull back and think about the entire context of the feature.

Of course they also require a much more significant time investment and need to be run differently than a standard code review, but they are also much more valuable.

<comment><AUTHOR> I agree sometimes you need to review a piece of functionality. But I think of this more of an escalation of a change set review. As in: 'this code stinks, why is that, lets look at the bigger picture, mmmm, lets schedule a review for this'. From the article: "It's possible that a larger piece of code needs refactoring. If this is the case, do it within the merge request or schedule the refactoring as a separate issue.".

<comment><USER3> > I agree sometimes you need to review a piece of functionality. But I think > of this more of an escalation of a change set review.

I find it's more like the difference between unit testing and integration testing. No matter how well you unit test it doesn't replace integration testing.

Most of the bugs I run into in prod are not the result of localised issues but are rather caused by the interplay of different modules/classes/subsystems.

<comment><AUTHOR> I agree there is scale in this. My point is that the smaller ones (here is a bug we need to fix/code with high churn) are the best way to find the larger ones (here is code we need to refactor.

</comment></comment></comment></comment><comment><USER10> A lot of people at my company did this:

1) send out code review 2) commit the change and say "I will address the comments in the future."

A follow up never ever happens.

</comment><comment><USER11> we use gitlab, it makes doing pre code review easy. when your code is ready, send a merge request, someone else has to review it to merge it.

most of the time it doesn't catch anything, but every now and then it does, so that's cool.

it also means we can revert features easily most of the time, should the need arise.

all in all, gitlab is really good and you should check it out

<comment><AUTHOR> Thanks, glad to hear you like it!

</comment></comment><comment><AUTHOR> OP here, I would love to discuss code review best practices from the crowd here.</comment>


Deployinator: Etsy's deploy tool open sourced - <AUTHOR> http://www.slideshare.net/OReillyOSCON/put-a-button-on-it-removing-barriers-to-going-fast

<comment><USER2> The slides without the talk are mostly useless, you're better off reading their Deployinator blog post:

<http://codeascraft.etsy.com/2010/05/20/quantum-of-deployment>

</comment><comment><USER3> Does anyone know if this talk was recorded? It's the sort of deck that leaves you wondering what the presenter was saying.

Edit— Found this from NYLUG in April: [http://www.archive.org/details/NYLUG-2011-04-20-Etsy- Deployi...](http://www.archive.org/details/NYLUG-2011-04-20-Etsy-Deployinator) (Talk starts at around 4:20, runs to 1:21:06.)

Haven't watched it through yet, but it looks like mostly the same slides.

</comment><comment><USER4> Continuous deployment sounds right to me in principle, but I have yet to see a system to handle rollback in the face of database handling (one slide mentioned this briefly). When you have a bug (say you delete the wrong data), how do you rollback this ?

The only solution I can see is one where databases are handled differently (they generally are anyway at the deployment stage), and IMO, this is the challenging issue. Continuously deploying app servers is not trivial, but I would consider it a mostly solved problem.

<comment><USER5> The problem is pretty universally solved:

1\. Use some sort of schema migration tool to keep track of and version all changes you've made to the database since your very first commit.

2\. Never do a backwards-incompatible schema change. Never. Time and time again these are the ones that will completely bite you in the ass when the day comes that you broke production with a deployment and desperately need the old version back up and running. You're going to end up losing data and shit will hit the fan. It doesn't take much code-wise to support the old scheme, and it will ensure that you have zero downtime while rolling out your updates.

3\. Never delete data. The only exception being if some user-submitted content violates a law, like child pornography. In which case, it shouldn't be part of your migration/update process to begin with. Just use deleted flags / boolean fields. Note in your code when certain fields are no longer used anymore because they're only there to support legacy versions.

<comment><USER4> I am pretty much a beginner in database handling, what would you suggest for 1 ?

Concerning 2: how do handle schema fixes (example: at my previous job, the tables were very badly designed, and the application+schema combination prone to frequent race conditions). What to do in this case ?

As for 3, I already came to this conclusion on my own, so I was not completely on the wrong track :)

<comment><USER6> I've used DbDeploy and Mybatis Migrations with good success, they're written in Java but they've also been handy in PHP projects.

</comment></comment></comment></comment><comment><USER7> Direct link to the project: <http://github.com/etsy/deployinator>

</comment><comment><USER8> I'm curious about how HN feels about doing feature management all in trunk with if/then blocks (Flickr, and I assume Etsy), versus a more branch-based workflow. By having config flags you can be very particular about what features or bugfixes are enabled/disabled at any time, but it seems like what you are saving in merge time, you are paying by having a bunch of dead code hanging around until someone gets rid of it.

Even in svn, and much better in git, if you can keep a sane release and merging strategy then it's not going to introduce much overhead to getting new features or bugfixes out. Our 20+ person team deploys a few times a day using a branch system of (sprint + trunk/QA + release), but always looking for different ways to do things.

<comment><USER9> Config flags and how we commit code are two completely separate issues. Very simply, you need config flags to operate a site that degrades gracefully when something is going wrong. They cannot be avoided. Is there a query in the forums suddenly hitting the database too hard? Turn off the forums while we fix it so the rest of the site isn't affected. Etc.

When a feature is in development, its config flag is off or enabled for admins. We deploy it as we develop it, in pieces that are generally not more than a few dozen lines of code long. This is another critical idea: we don't push out all of the code for an entire sizable feature all at once, ever. Doing that is a recipe for having a problem and having to review thousands of lines of code to try to figure out what it is.

For new features, we generally do not remove the config flag once a feature is live because we want to be able to disable it if anything goes wrong.

If we are replacing a feature with another one, we generally want to keep the old one around for a little while (we generally do A/B testing or ramp up new versions whenever we do this). After that, we do delete the old code and reduce the config flag to an on/off switch which was probably there in the first place.

<comment><USER8> Thanks for the replies. I didn't mean to frame it in a mutually exclusive way; I'm up for ini or yaml configs any day. Am looking at this from a rel-eng perspective.

</comment></comment></comment><comment><USER10> For those who are interested in continuous deployment, there is a recent talk from Flickr: [http://sna-projects.com/blog/2011/06/continuous- deployment-f...](http://sna-projects.com/blog/2011/06/continuous-deployment- flickr/)

</comment><comment><USER11> i'm very interested in learning more about deployment, does anyone know where to look ? say for a small webapp that has 1000 daily users

<comment><USER12> If you are specifically interested in this kind of continuous deploy process then "Continuous Delivery[1]" is a decent book on the subject. The IMVU post "Doing The Impossible 50 Times A Day[2]" is another good place to start reading.

[1] <http://www.amazon.com/gp/product/0321601912>

[2] [http://timothyfitz.wordpress.com/2009/02/10/continuous- deplo...](http://timothyfitz.wordpress.com/2009/02/10/continuous-deployment- at-imvu-doing-the-impossible-fifty-times-a-day/)

<comment><USER11> thanks a lot

</comment></comment></comment><comment><USER13> Anyone have these slides in a non-Flash format? I try to advance the slide and it just corrupts the display. Using flash to swap out static images. Dumbfounding.

<comment><USER14> PDF format: <http://bit.ly/qRhsj4></comment></comment>


Humans produce new brain cells throughout their lives - <AUTHOR> https://www.theguardian.com/science/2018/apr/05/humans-produce-new-brain-cells-throughout-their-lives-say-researchers <comment><USER2> This seems to be a contentious claim: [http://slatestarcodex.com/2018/04/04/adult-neurogenesis-a- po...](http://slatestarcodex.com/2018/04/04/adult-neurogenesis-a-pointed- review/)</comment>


Functional programming C++ template library - <AUTHOR> https://github.com/beark/ftl

<comment><USER2> This is awesome. Maybe the successor to C++ will be C++. Another really neat library is libcppa[1], which provides erlang-inspired concurrency with the actor model but also support for general functional features like pattern matching and guards.

[1][http://neverlord.github.io/libcppa/manual/index.html](http://neverlord.github.io/libcppa/manual/index.html)

<comment><USER3> >Maybe the successor to C++ will be C++

True that. I really like where C++ is going. C++ is getting almost as expressive as ML.

Thanks for linking the libcppa library. As a fan of Erlang and a former C++ day-jobber, I find this fascinating.

</comment></comment><comment><USER4> As less haskellish approach to functional programming boost library: [http://www.boost.org/doc/libs/1_55_0/libs/range/doc/html/ind...](http://www.boost.org/doc/libs/1_55_0/libs/range/doc/html/index.html) is nice. It allows me to write:

      v | filtered( [] (int i) { return i % 2 == 0;}) | transformed([] (int i) { return i * 2;})

instead of:

      vector<int> filtered;
      copy_if(begin(v), end(v), back_inserter(filtered), [](int x) { return x % 2 == 0;});
      vector<int> transformed;
      transform(begin(filtered), end(filtered),    back_inserter(transformed), [](int x) { return x * 2;});

</comment><comment><USER5> I find this a surprisingly good explanation of the benefits of functional programming, not just a how-to guide for the library. It probably helps that I've read LYAH first however...

</comment><comment><USER6> Does this solve the problem of operator>>= being right-associative, while Haskell's (>>=) is left-associative?

</comment><comment><USER7> Wow, that is beautiful! Thanks.

</comment><comment><USER8> Choking linker with lengthy symbols.... coffee time!

</comment><comment><USER9> What happened to all of the excitement about functional programming?

<comment><USER10> My excitement lasted several years. I think it was enough :)

<comment><USER11> Sounds like you are now back to imperative/OOP. If that is so, why?

<comment><USER10> Because of my excitement I _almost_ jumped into academia, for PL research. Then, I realized that I have a family to feed :) and after all, I never really wanted to become a teacher/professor.

As for the "real world" side - I'm in the domain where C++ is still the best tool - good enough high-level constructs (but could be better, of course, we're slowly moving toward it) along with low-level stuff and determinism.</comment></comment></comment></comment>