Hiring for Happiness - <AUTHOR> http://www.scribd.com/doc/44636259/Hiring-for-Happiness

<comment><USER2> This all looks excellent. I'm not sure about the debt management part though.

First of all, something about your math just isn't right:

"All employees who want to sign up to the programwill have a percentage of their debt paid off each fortnight. So instead of getting$70,000/year they might get $23,000/ year and be debt-free in the next 4 years."

Why would I spend a total of $188k to pay off an average of $24k in student loans in 4 years? I mean, I know that interest rates are a bitch and all, but that's a bit much. Plus, I don't know where you guys are located, but $23k/year in San Francisco isn't a whole lot. I understand that these are probably all hypothetical numbers, but you might want to choose numbers that are a little bit less scary.

Another thing:

"If groups of employees live, work and party together our hope is that they will love their entirelifestyle, not just their work."

...I don't think it's necessary to be _that_ intimate with my coworkers. In fact, it could arguably be _bad_ to encourage people to be that close. A workplace needs some level of conflict to discourage groupthink, and it's much easier to disagree with someone you're paid to do a job with than someone who's your best friend and roommate.

<comment><USER3> I agree with j_baker -- I was thinking that this document was kind of nice until I got to the part where everyone has to take a holiday together. No matter how you tweak this, what it means is that the company is impinging on the employee's personal life and leisure time.

Another thing to remember is that there's a difference between personal and work relationships. You can (and should!) have great work relationships with people who you have little in common with, personally.

"Forced fun" is always as bad as it sounds.

<comment><USER4> Definitely agree with these points. I will make it more clear that these would be optional things that the company put on rather than mandatory corporate events. I would hate those.

</comment></comment></comment><comment><USER5> "My hope is that our employees never, ever feel patronized, belittled or small."

Anyone applying to your company after having read that pile of patronizing crap are probably genetically incapable of feeling patronized or belittled.

(Seriously, I don't think I know a single highly qualified person who wouldn't quit the same day if you showed up and told them that this is how the company will be run from now on, and half of them would punch you in the face on the way out.)

<comment><USER4> Studer. How do you run your company? Or are you an employee? I put this online for feedback and help.

<comment><USER6> It sounds like one way to make money working there would be for debt-free employees to assume some debt at less than 5% interest so that the higher real wage and 5% top-up payments kick in. There are some interesting ideas here with the exception of section 4 which sounds like a cult. Not everyone wants their workplace to function like a commune.

<comment><USER4> Very good point. Need to work on the numbers more carefully but I hope you agree with the intention. Section 4 is definitely the least carefully thought out but probably the most well-intentioned. Right now Happy feels a bit like a commune as lots of students come to our Tiki House and enjoy our parties and help with the project. I guess I'd just love to maintain that vibe if at all possible.

</comment></comment></comment></comment><comment><USER4> Tyler thanks a lot for submitting this! A bit of background: I've written this for my Human Resources class at UCSB and as a way to think about how I want to grow my new company, Happy.

<http://www.thisishappy.com>

<comment><USER7> This really reminds me of Zappos's Culture and the great stuff that Tony Hsieh and others have been working on for the past years.

I strongly recommend Delivering Happiness by Hsieh to anyone who is interested in this type of approach to employee care. Very inspiring stuff. [http://www.amazon.com/Delivering-Happiness-Profits- Passion-P...](http://www.amazon.com/Delivering-Happiness-Profits-Passion- Purpose/dp/0446563048/)

<comment><USER4> Absolutely. My inspiration all along has been Tony Hsieh. Such an incredible entrepreneur. I am just adding a few more ideas I have about creating a happy company culture.

</comment></comment></comment><comment><USER8> Direct link to the PDF for Scribd Haters: <http://dl.dropbox.com/u/2577298/Hiring-for-Happiness.pdf>

<comment><USER4> Thanks for that.

</comment></comment><comment><USER9> I think most talented employees care about freedom and flexibility, including freedom to not have to worry about things which are necessary but not interesting.

Being forced to do something which isn't a major benefit to the company would be close to a deal breaker (e.g. filing TPS reports), regardless of salary, unless you had other options. Whereas doing something unpleasant which is clearly important (coming in on christmas morning to fix a security problem) is painful, but much more acceptable.

Really, what seems to work the best is to offer "sensible defaults" for most things, and then let employees make their own choices if they wish. Stuff like offering a budget to buy your own desktop/laptop/phone, but "a lot of people like the 15" MBP HD, and we have a couple already configured if you'd like that". Having social events on the weekends, after work, etc. where employees are invited, but certainly not mandatory. (for this, informal usually works better, especially if some people are clueful enough to try to build links across departments, like the engineers also inviting people from sales).

</comment><comment><USER10> I'm in LOVE with this paper. Can't wait to make my company more like that.

<comment><USER4> Awesome Paolo. I'm just starting with this venture too so I'd love to hear how it goes for you. What idea/startup/company are you working on at the moment?

<comment><USER10> I currenty own a consulting web agency that also has its own revenue websites (what's the correct name for those? lot of smallish site that have revenues with either ads, subscription or e-commerce). Just as Google nowadays doesn't have a single idea but rather a lot of projects I believe this is a model that can work in a company that's doing 1/2 consulting and 1/2 its own smallish projects. There's just 4 of us now but we're always looking for people, especially if they recognize themselves in a document like this one.

</comment></comment></comment><comment><USER11> _He argued that the following 4 things were paramount:

-Perceived Control

-Perceived Progress

-..._

hilarious

</comment><comment><USER12> i applaud you for trying to be innovative about how to run companies, and hire and keep people.

<comment><USER4> Thanks mkramlich. I am just putting a few ideas out there for criticism to see if they could work so that when I have the revenues to support them I can make it happen.</comment></comment>


Inside the next Xbox: Project Scorpio and its brand-new dev kit - <AUTHOR> http://www.gamasutra.com/view/news/295800/Inside_the_next_Xbox_Project_Scorpio_and_its_brandnew_dev_kit.php <comment><USER2> After so many attempts to innovate and bring new ideas to the console space, Microsoft must be relieved (and kicking themselves a bit) to finally realize that all that their most vocal consumers ever wanted was bigger iron.

I sense that the console market has picked up a lot of "performance enthusiasm" from the PC community. The tried-and-true tech/car analogy works here - a lot of people love building, or even just _buying and owning_ , really powerful cars. Do a search on Youtube for "[game] framerate [test|comparison]" and you'll find a zillion hits, many of them with details down to patch versions, driver versions, and detailed settings. The number one complaint I saw of the new greatest-game-of-all-time Zelda game was "framerate," and the web was flooded with framerate tests as soon as a patch was released. A common meme in Reddit's PC-building community is dropping $X000 building a monster rig in order to install a big new game just so they can jack it up to max settings and watch it run at 100FPS, then shutting it off and returning to browsing and Minecraft.

That said, it's a little surprising to me to read all the positive feedback on this, especially around the price. Game-related Reddit threads are usually full of hate on any topic that involves paying for something, but all I see for this is "I will drop $500 for this, day 1, I'd even consider it at $600; guess I better get that $1500-$2000 4K TV I've been looking at too; let me know when the VR's ready and I'll put $600 on that as well." Just a couple years ago, speculation about a move like this was widely poo-pooed by industry analysts, who said that bringing the PC's complexities of hardware upgrades to developers and consumers would kill the only thing consoles had going for them - simplicity - and leave consumers wondering why they're expected to shell out $X00 just a few years after buying the last new box. Now the overwhelming consensus appears to be "4K at 60FPS or don't bother".

With hardware standardization increasing, compatibility becoming the norm, and the focus on power, I think there's going to be a really interesting convergence between the PC and console market in the next few years.

<comment><USER3> well the question for the game industry should be: do we really want to target a audience who doesn't care about the "fun" part and more about the "good locking" part?

\- actually I'm more a nintendo person, because their games are fun and they don't care about all this fps/monster machine, thingy. I mean I don't care about Call of Duty 1000 or any other re-release with cool looking graphics but minor game play enhancements. well the pc, xbox and ps4 also has a lot of games that are fresh and new and make fun or even a re-release of a game can be great, but most of them are just sickening and after a while I stop playing them. It's really really sad where this industry goes. Well pushing graphics is good, but overdoing it while limiting the fun part, is bad.

tl;dr fun > graphics

</comment></comment><comment><USER4> Maybe unrelated but it's quite confusing to call the second revision of the original hardware the "One S", and name the hardware upgrade the "One Scorpio". Hopefully they'll pick some other name not starting with S for the final name.

<comment><USER5> They've announced already that Scorpio is just the codename; they have yet to announce the shipping product name. I'd guess they'd do that at E3, alongside pricing.

</comment></comment><comment><USER6> Hehe, I love that they shown those stacked - my biggest issue with X1 devkits is that they have the vents on top, so I have two on my desk but can't put anything on top of them because the console will overheat.

<comment><USER7> Our I.T. guy grabbed some desktop shelving from a local office store to help stack mine when I had devkits. Sadly I can't find the exact model online to share. Between the XB1s, XB360, PS4s, iPads, Windows Tablets, Mac, and Windows dev boxes, monitors and HDMI switches, I also needed an extra desk. I also added some nails to a plank to help make a (tiny) wall of tablets...

Porting things has it's perks :D

EDIT: "Shelves" were probably actually monitor stands, roughly like these - stacked a little percariously but it did the trick (tm): [https://www.amazon.com/Allsop-Monitor-18-Inch-platform- keybo...](https://www.amazon.com/Allsop-Monitor-18-Inch-platform- keyboard/dp/B003M2YDE2/ref=pd_sim_229_7?_encoding=UTF8&pd_rd_i=B003M2YDE2&pd_rd_r=MFWGGTCWP2BF9D645PAD&pd_rd_w=8CMIp&pd_rd_wg=7UZNG&psc=1&refRID=MFWGGTCWP2BF9D645PAD)

<comment><USER8> My work laptop is on one of those stands. I got it for free, then bought a Dremel to cut out some metal between two of those holes so that a USB hub could be plugged in from underneath. Not bad.

</comment></comment></comment><comment><USER9> Annoying misuse of the term "draw calls". :- ( Also, the fancy transfer cable seems to be basically just a USB 3.0 connector, and by their description it gets about 3.4GiBit/s. Pretty okay.

<comment><USER10> How were they misusing the term?

<comment><USER9> There is only one "draw call" in D3D12, ID3D12GraphicsCommandList::DrawInstanced. Strictly speaking, DrawInstanced isn't even a _call_ anymore, it is just part of a recorded command buffer.

When they say draw calls, I imagine they mean that they added D3D12 command stream handling to the firmware on the GPU. It's arguably nonsensical to say "it's designed to incorporate basic, oft-used DirectX12 draw calls into the GPU command processor itself".

</comment></comment></comment><comment><USER11> Until I can use a keyboard and mouse in FPS settings against people with controllers, I don't give a fuck. I came up the hard way and hate the exploits possible in pretty much every competitive game. In that regard, I want to have the real advantage I care about. Precision. Finger agility.

Until a console gives me that option, to lay waste to Player and (1)Player and (2)Player like Half-Life gave me joy back in the day and leveled me up beyond what I could've imagined by bunny hopping and tau jumping and using audio A3D to at least hang with the best...Chosen1, Neo, aCiDtRiP, 007 and more...

I'm an old now. I'm not going to let a bunch of teenagers talk shit to me with a mic unless I can lay waste to their feeble understanding of victory by attrition. I've found it's uncomfortably hard to use a controller to walk up to a victim and use the squat/crouch function to tea bag their carcass.

When console gaming gets with the mainline of competitive PC gaming, it might be worth it. I've got no use for MMOs and shit like that. I'm an FPS/driving guy. I've played Australians and Croations alike no matter the lag, we competed fair. Console interfaces are fucking garbage.

Give me my mouse, my keyboard, my console to tweak my views (FOV 110, weapon_on 0) and let me do my thing.

Apparently this is not the best business model. Huh. For a minute there I was (1)Player getting a face full of Glock or crowbar, but life is like that. Spawn. Run. Die. Repeat.

Oh, just for the record, if Gabe debuts HL3 as an Xbox Scorpio exclusive I will take money out of my retirement fund just to get in on it. Only if I can use my keyboard and mouse though. Always good to temper expectations...

<comment><USER12> I can't tell if this is sarcastic or not. Mouse precision is so much more accurate than controllers that the Overwatch team literally considers using KB/M on consoles to be cheating.

<comment><USER11> It is tongue in cheek. I don't want to play unless there's a choice. KB/M vs console controllers. Pick your poison, get down on it. I happen to think using anything but KB/M is dumbing-down handicapping. Canon fodder takes many forms.</comment></comment></comment>


Reimbursement of Exit Operators - <AUTHOR> https://lists.torproject.org/pipermail/tor-relays/2013-September/002824.html

<comment><USER2> I really want to run an exit node because I'm a firm believer in what the Tor network does-but I'm really worried about being arrested for running one. Does anyone have practical experience running a Tor exit node?

<comment><USER3> Yes, run the exit policy at [https://trac.torproject.org/projects/tor/wiki/doc/ReducedExi...](https://trac.torproject.org/projects/tor/wiki/doc/ReducedExitPolicy) and put up the info page that comes in the tarball on your default vhost.

The only problem I ever had in a year of running an exit relay was when I had a default allow-all policy and someone torrented something, triggering a DMCA notice. My provider, Linode, had no problems with it.

<comment><USER4> Ummm .. but port 80 & 443 are still open, so if someone downloads child porn then you'll get an early morning visit (and a lot more) from the police.

What would be great would be if you could restrict the _websites_ people could go to. I would gladly offer people in internet-oppressed countries access to bbc.co.uk (only).

<comment><USER5> toss a proxy past your exit and you can restrict it any way you want.

<comment><USER4> That breaks the Tor protocol. It means that non-bbc websites would appear to be blocked and unblocked at random as users used Tor.

I had a discussion with one of the developers and basically Tor isn't designed to do this -- the blocks on each exit node have to be propagated through the network, and if every exit node did this then it would adversely affect the network in some way that I don't recall the details of.

</comment></comment></comment></comment></comment><comment><USER6> So I rent a VPS in Egypt and provide an exit node there. I am as small time as it gets. Looks like this will not do anything at all for me since they are looking for very large players to provide exit nodes.

I do like the idea of Tor becoming fast. It's painful to use currently. If someone like Netflix was to donate 1% of their bandwidth to Tor, things would look so much better.

<comment><USER7> Where do you get VPS hosting in Egypt? I am in the region and very interested to hear someone with experience in this, meaning VPS and providers not in Europe. My experience with friends and colleagues is a lot of the latter.

<comment><USER6> [http://citynethost.com/vps.asp](http://citynethost.com/vps.asp)

They used to be a lot cheaper. I got mine for $2.50 off a lowendbox.com sale. It has not been super reliable through the turmoil in the region, so there were a few days of downtime for the VPS and the control panel/website. In other words don't rely on it to be your single point of failure, but for me it has worked well as a secondary machine.

</comment></comment></comment><comment><USER8> I'm not sure there's _any_ amount of money they could give me that'd offset the risk of getting hit with a false-positive dawn raid.

<comment><USER9> Having documentation on an official-looking letterhead that you're running an exit node may reduce the risk of such a thing happening.

<comment><USER10> It might help AFTER the raid, but probably wouldn't help prevent it.

</comment></comment></comment><comment><USER11> Summary: The total amount being handed out is $3500, to only six organizations right now. In order to qualify, you have to know this guy, and be providing Serious Bandwidth.

<comment> jack-r-abbit _Note that since the total amount of $3500 will be handed out every month, as long as we have less than 6 entities signing the contract, each entity will receive their maximum share of 500 Euro._

One of us interpreted that wrong then. I read it as "If we have less than 6 entities, each will get the max cap. More than that and each will get less than the cap." I didn't read anywhere that said how many entities have been contacted and how many are expected to sign the contract.

<comment><USER11> Look at [https://www.torservers.net/misc/reimburse- output-2013-07.txt](https://www.torservers.net/misc/reimburse- output-2013-07.txt)

That list only has six orgs on it. (Though it doesn't total up to 3500?)

<comment> jack-r-abbit You might be right. That doc is described as: _example report at [link] (not the correct numbers, but you 'll get the idea)._

</comment></comment></comment></comment><comment><USER12> Does anybody know of a good VPS provider - overseas is fine, perhaps even preferable - that accepts Bitcoin, which I could run an exit node on?

This lists Good/Bad ISPs, but a CMD+F for 'bitcoin' has 0 results: [https://trac.torproject.org/projects/tor/wiki/doc/GoodBadISP...](https://trac.torproject.org/projects/tor/wiki/doc/GoodBadISPs)

<comment><USER13> Bytemark in the UK might accept it for this if you have a chat with them. They are ORG sponsors and generally seem to be on side over privacy and free speech issues.

</comment></comment><comment><USER14> So if I have a 15/5 dynamic IP home internet connection, could I make enough money to cover my connnection by running an exit node in a VM? Somehow I imagine a static IP would be needed.

It sounds like since there's only $3k allotted for this, there wouldn't be enough to go around, even if my connection were technically feasible.

<comment><USER11> Bandwidth in less heavily served countries is worth more. 10 Mbit in the US only gets you two euros a month: [https://www.torservers.net/misc/reimburse- output-2013-07.txt](https://www.torservers.net/misc/reimburse- output-2013-07.txt)

</comment></comment><comment><USER15> does this mean that TOR will have a close relationship with its exit operators? I dont like the sound of that...

<comment><USER16> See my top-level comment. TLDR: No, as The Tor Project has nothing to do with this announcement.

</comment></comment><comment><USER16> Outright incorrect headline. An independent organisation, with no official ties to The Tor Project is now going to start reimbursing other organisations who run exit nodes. Essentially helping to ensure a more diverse set of relay operators. This organisation previously directly took donations to run exit nodes themselves. That's problematic from a decentralisation point of view, so instead their going to use the donations to fund exit nodes run by others.

<comment><USER16> Within minutes of posting this comment the title has been silently edited to be more neutral. (Although still potentially misleading given the associated domain name).

It originally read: Tor to start reimbursing exit node operators</comment></comment>


HBO to Netflix: We're taking our ball & going home - <AUTHOR> http://venturebeat.com/2012/01/05/time-to-torrent-more-boardwalk-empire <comment><USER2> The CEO of HBO is infuriating. I will never have a cable subscription ever again and it has nothing to do with the economy, yet I would love to be able to purchase HBO shows digitally. Game of Thrones? Still not even available on DVD, let alone iTunes, Amazon, or shit, even some crappy HBO run service. Have friends in the same situation who just gave up and pirated it.

Perfect picture of an out of touch media executive.

<comment><USER3> Everyone I know who wanted to watch Game of thrones has torrented it. Many of them after checking iTunes first. DVDs are out for those who no longer have DVD Players (all the macbook Air types). Streaming is out for those who want to watch stuff remotely. Cable Format has to be the most useless delivery format I can conceive of - you have to: (A) Purchase Digital Cable, and then (B) Subscribe to HBO on top of that, and finally (C) Go through the hassle of tracking/converting all those shows into a watchable format.

For the first time in my life, I can say with almost complete assurance, that the reason the majority of the people I know are torrenting, is because the rights owner isn't willing to sell in format that they want to watch it in.

Don't call him out of Touch though - The reality, though, is that the CEO of HBO is a highly informed profit maximizing individual and the reason we don't get Game of Thrones on DVD/iTunes, is because of the huge revenue stream represented by the other 95% (99%?) of the population who is more than happy to Tivo GameOfThrones. He'll forego the 5% of us who won't purchase it on Cable, in order to make money on the other 95% The Reality is, that some percentage of that 5% would have Torrented it rather than paying the $50 for an iTunes season.

They know how much they can make through iTunes, DVD Sales, and, most importantly, their Cable Customers (Comcast, etc...).

And, if SOPA goes through, it will provide a platform for attacking the Torrents. First the entertainment industry will DNS blackhole "piratebay.org", then, when people avoiding that in numbers enough to matter, they will pass SOPA Part II, and start blackholing IP addresses. SOPA Part III will come out once people figure some way of connecting to dynamically assigned IP addresses.

It will be a legislative game of Cat-and-Mouse driven by the massive $$$ that the entertainment industry is paying the lobbyists.

<comment><USER4> What in the world do they stand to lose by offering Game of Thrones through iTunes or Amazon in a reasonable amount of time? iTunes is already selling it even though it will not actually be available until March. None of us who are waiting for it are going to subscribe to cable in the meantime.

<comment><USER5> they are afraid that people will cancel their HBO subscriptions and buy just the shows they watch

<comment><USER6> It's half this and half that they want to convert DVD buyers to subscribers so they come out with the DVDs a month before the new season starts.

The market for the DVDs is still good (True Blood S3 was the #1 TV show DVD for 2011) and I'm sure they're research tells them they get more from conversions then they lose in DVD sales by opening it up 2 months earlier. And if they started selling DVDs 6 months earlier they'd lose current subscribers like you say.

</comment></comment></comment></comment></comment><comment><USER7> One of, if not the main feature that I associate with Netflix is its large library of content. I pay the monthly fee as I can assume to a certain degree that the majority of the things I want to watch will be available. I'm sure I'm not alone in this.

Fragmenting the content like this over numerous streaming solutions each with their own charges and workings is, in my eyes, a huge step backwards for online content. I can't see users being happy to pay more parties for the same content on numerous services. This to me reeks of networks killing the golden goose.

<comment><USER8> OR...

having one large company on the internet be the "distribution" company for a bunch of media creators sounds a lot like cable TV doesn't it? I think we actually DO want the media fragmented across multiple providers. We should look at it as a Good Thing that media creators distribute their own media, no matter how big they are.

<comment><USER9> Except HBO won't do this. If HBO wanted to charge some pittance for HBO Go, I'd pay it. Instead they want me to sign up for cable, which I don't want, so they don't get my money at all. (And I don't see how refusing to negotiate a DVD rental deal helps that goal at all.)

<comment><USER6> "(And I don't see how refusing to negotiate a DVD rental deal helps that goal at all.)"

If Netflix hemorrhages subscribers and loses it's value proposition vs cable that's clearly good for HBO/Time Warner/Turner.

Giving your competition a discount is what doesn't make sense and that's why HBO decided to stop doing it.

<comment><USER10> >If Netflix hemorrhages subscribers and loses it's value proposition vs cable that's clearly good for HBO/Time Warner/Turner.

Is it? How much money will they make from all the torrents?

</comment></comment></comment></comment></comment><comment><USER11> If HBO wasn't hopelessly compromised by their dependence on cable networks, the smart move would be for them to use their proprietary content as the lure for a full-fledged competitor to Netflix streaming, similar to the way that Valve used their own games to get people using Steam. I'd be willing to pay the $8/month I give Netflix just for access the HBO back-catalog, assuming it didn't require a cable TV subscription that I'm never going to pay for again.

<comment><USER12> Curiously, Time Warner Cable customers do not have access to their streaming service HBO Go. I have a feeling they might be working on a little trick to pull the carpet out from underneath their competitors.

<comment><USER13> HBO and TWC patched up their differences on Dec 16 and announced that TWC customers would soon be able to use the HBO Go app.

</comment></comment></comment><comment><USER14> Interesting. It's easy to pattern match this against the old "media company wants control and doesn't get the modern world" chestnut.

On the other hand, try pattern matching this against the "band decides to put work directly on internet rather than going through a label" or "writer decides to self-publish rather than go through a publisher" story. Why wouldn't a direct-sales model work for them?

Admittedly, they aren't quite doing the direct-sales model, since they only grant access to HBO GO through some sort of premium TV subscription. But if they offered direct subscriptions to HBO GO...

<comment><USER15> _But if they offered direct subscriptions to HBO GO..._

Unfortunately, that's exactly what they won't do- they've stated as much themselves. The cable companies essentially promote HBO for free right now, so HBO is unwilling to rock the boat with them. Selling subscriptions online would most definitely rock the boat.

I don't know if I blame them or not. I don't think there is any doubt that this kind of online subscription is the future, but I'm not sure it would reach as many people as a premium cable subscription would _right now_ , so they'd stand to lose a lot of money and subscribers. Of course, setting up HBO GO means that they have the system set up and ready to go whenever the market changes.

<comment><USER16> I think they can afford to be slightly ballsier than they're being. But not by much. And that matter of degrees is what makes the situation with "rocking the cable providers' boats" so fraught. Fact is, HBO is _not_ in a power position against its cable providers. HBO doesn't drive cable subscriptions en masse the way sports packages do. HBO still -- for the time being, at least -- needs Comcast, Time Warner, et al., a lot more than they need HBO.

That said, I don't think there is a major cable provider out there right now who'd dare drop HBO from all of its offerings if push came to shove. And I think HBO is, in many ways, _the perfect content brand_ for on-demand subscriptions or a la carte episode sales on digital ecosystems. Its content is top-notch, and the potential audience for that content is theoretically a large multiple of the current HBO subscriber base. The quality of a typical HBO scripted series is lightyears beyond that of almost any other network show, and consumers would eat it up.

I agree with you that HBO seems well-positioned for either world right now: the world in which it currently lives, or the world in which it could find itself a few years from now. HBO GO is a great app with what I imagine is a large install base. It seems relatively future-ready, if not wholly future- proof.

</comment></comment></comment><comment><USER17> "At that time, Kessler also said his company sees cable-cutting as no more than a temporary austerity measure that will cease as soon as the economy takes a turn for the better."

To steal a page from John Gruber, this sounds like one to keep for claim chowder.

<comment><USER18> HBO has strong content, an amazing brand, and a mobile app. They can turn around tomorrow and sell a streaming service for $10 that will get tons of subscribers.

But right up until that point, they will say cable is great and will never go down.

Thinking this is "claim chowder" is just thinking too small and literally.

<comment><USER19> This is what I was thinking. I almost wrote a rant about how it's unfortunate that HBO, a network that makes some pretty awesome shows, isn't getting with the times etc etc. Then, I thought I should probably just hold my tongue and watch what happens.

I suspect the scenario you describe is correct, they'll defend cable up until they launch their own service.

</comment></comment></comment><comment><USER20> Here's what I do when I want to watch a show:

1) Check out Netflix Instant.

2) Hit up Amazon VOD.

3) Check out iTunes

IFF those fail, then I go to the bay.

I prefer to use legitimate services to get content. But I'm not moving away from my keyboard to do it, and I'm not paying for HBO/Showtime/etc just for the one or two shows I want to watch.

<comment><USER21> You should check out hulu first. It has the biggest selection for tv shows

<comment><USER22> Hulu has horribly obnoxious ads - repeated multiple times per episode of the show. Voting "not relevant" on an ad doesn't prevent it from appearing. There was an ad my wife found quite disturbing (about exorcism), and it played almost every ad segment. I had to mute and tab away.

And this is on a free trial of the Hulu Plus paid subscription service.

I just can't see paying a subscription fee for that user experience. In contrast, with Netflix, every time the program hits one of the advertisement breaks, you get the little psychological reward: "Hurray! No ads!"

<comment><USER23> Agreed. 3 ads in a row every 5-7 minutes Hulu? To the Bay!

</comment></comment></comment></comment><comment><USER24> It sounds like they're trying to roll their own streaming solution, instead of trying to rely on Netflix.

And hell, it might even work. Isn't this what we've been asking for? _A la carte_ cable channel selection?

<comment><USER25> If I didn't have to pay for cable and the regular HBO rate, yes, it would be good.

<comment><USER24> Ah, I didn't realize you had to have a cable subscription for this. I thought it was just streaming.

</comment></comment></comment><comment><USER26> I'd buy an HBO subscription today if it didn't mean I had to have $60 of cable company shit on top of it.

</comment><comment><USER18> Relevant:

In December, Netflix CEO Reed Hastings told an investors conference that HBO's online viewing service, HBO GO, was "the competitor we fear the most."

<comment><USER27> As long as HBO GO still requires a cableTV subscription (and HBO subscription), Netflix has nothing to fear about.

I'm sure Amazon, Apple, Google and others are ready and willing to pay HBO for an option that bypasses the cable requirement, and at some point it may be lucrative enough for HBO.

On the other hand, Comcast probably has HBO over a barrel, given they also own the last-mile for millions of internet users as well.

<comment><USER28> _As long as HBO GO still requires a cableTV subscription (and HBO subscription), Netflix has nothing to fear about._

While this is true, I have to think HBO has already built a payment system and is literally a flip the switch away from charging customers directly for streaming. Netflixs CEO is future looking if nothing else, and I'm sure he's come to the same conclusion.

</comment></comment></comment><comment><USER29> "...Eric Kessler stated to industry leaders that HBO shows would not ever be available to non-HBO subscribers on digital platforms"

This is idiotic on HBO's part.

Look, it's pretty simple: I want to watch "True Blood", which is currently in Season 5. Netflix doesn't even have S4 yet. I'm willing to pay good money, say $20 for a season, but am _not_ so crazy as to pay $$ for crappy supreme- whatever package from Comcast. The reason is not that I hate Comcast (I do) but I'm not interested in other channels (sports etc.) in the package, i.e. I want HBO only.

<comment><USER19> This is the sort of thing that encourages piracy, too. It's not that I'm unwilling to pay for HBO programming, it's that I'm unwilling to pay for the things I do not want, or need, just to be able to pay HBO for their programming.

I just went to Amazon, though, to check the price of a Bored to Death DVD to add to my point (a show I enjoy, but I don't really want to own on DVD and would pay to stream) and it came up as available for streaming through Amazon Instant Video. Odd since that seems like a non-hbo subscriber being able to watch on a digital platform. I assume having Amazon Prime grants access to the show, too.

</comment></comment><comment><USER30> I love HBO, but this is really dumb. they have to understand that the fact that people have to pay $60 bucks for the privilege to pay $15 for HBO is going to shaft them in the long run. They've cast their lot with the cable co's, which is fine, I respect you taking a stand, but it will be a full business cycle before people stop cutting the cord, and by then between Netflix, Hulu, iTunes, and whoever else arrives, there will be alternatives. . .

</comment><comment><USER31> Are the traditional cable premium channels like HBO & Showtime even relevant anymore? I would hate to be them.

I'm sure many (most?) will disagree, but I see these services as on their way out. Quickly. They could have lived longer had they brought out more flexible subscription plans. For example, no way would I have a monthly subscription, but there have been many times I would have paid some fee for a shorter block just to catch a movie or event.

<comment><USER32> They need to learn from Kodak. Once the public begins to transition en masse to another medium, it's very fast.

TV has a certain "lemming" following: people want particular content because other people want that content. When enough people expect the bulk of their content via Netflix (or wherever) the social pressure to stick to "cable" will evaporate.

Now if somebody could just replicate the "here we are now, entertain us" brain-dead delivery system that cable/OTA provides.

<comment><USER33>
      > Once the public begins to transition en masse to
      > another medium, it's very fast.

HBO already has a system in place (HBO Go), but it seems like they are waiting for a tipping point to divorce their internet content streaming from the requirement of having a cable subscription. Probably once they feel that pissing off the cable companies is worth the revenue they will gain.

</comment></comment></comment><comment><USER34> Netflix is going to suffer death by 1000 cuts.

The problem with making money off streaming is it's easy to overcome all the technical problems of streaming these days - all they are doing is using Amazon's CDN.

So the content owners can just DIY when they want to squeeze every penny of profit out of it.

</comment><comment><USER35> We are only going backwards. I've spent hours (x2 after having to re-do with de-interlace) ripping my HBO boxsets only to have to spend more time hunting down SRT files. Give me direct downloads already.

</comment><comment><USER36> It sounds like HBO is ditching Netflix to do their own streaming. Bummer. While I wish Netflix had a larger selection, the bigger appeal to me is how many platforms they support. I can watch it from Windows, my Boxee Box, my Wii, my iPhone or my Kindle Fire (Linux support is sourly missing, though). If HBO strikes out on their own, there is no way they are going to have that kind of breadth.

What I really want is a streaming service that lets me choose what sources I subscribe to in an a la cart manner. If Netflix wants to survive losing these content providers I think that's the direction they should go in: become a platform. And if they don't, it's a great idea for a startup.

<comment><USER18> To be crystal clear, HBO content has never been on Netflix streaming. This story is about HBO making it harder for Netflix to lend out the DVDs by not selling them to them at a discount.

</comment></comment><comment><USER37> I just gave a try to their HBO GO Android App. I thought I could pay a subsccription directly to HBO but no... you need to have a cable subscription to use this app. Nevermind!!!!

</comment><comment><USER38> I have some small hope someone will just buy HBO and put us out of their misery.

<comment><USER39> HBO was created in 1972 and was wholly incorporated into Time-Life in 1973. Time-Life is now Time Warner [1], i.e. one of the world's largest media conglomerates.

I would be surprised if Time Warner put HBO up for sale any time soon if ever.

[1] <http://en.wikipedia.org/wiki/HBO#Development_and_launch>

</comment></comment><comment><USER18> Whenever a company like HBO cuts off direct DVD sales to rentals, the message is simply "we don't want to make life easier for you", which makes sense since NetFlix is a direct HBO Go competitor.

</comment><comment><USER40> All the people talking about whether HBO wants to "piss off the cable companies": you do know that HBO is _owned_ by Time Warner, a cable company, right?

<comment><USER13> Actually, Time Warner Cable is an independent company. It was spun out of the Time Warner mothership a couple of years ago.</comment></comment>


IAmA NASA Astronaut who recently returned to Earth and I am new to reddit - <AUTHOR> http://www.reddit.com/r/IAmA/comments/r62jp/iama_nasa_astronaut_that_recently_returned_to/

<comment><USER2> I have to say, it would be phenomenal if there was an HN equivalent to this opportunity (e.g. like Ask HN but in the other direction) that didn't simply promote a blog post elsewhere in order to spark intelligent discourse here. This would allow intellectual superstars in the computer sciences and entrepreneurial spheres to hold similar forums without (the likelihood) of offensive comments to infiltrate the conversation, i.e. "Do boobs look cooler in space?"

<comment><USER3> There's no reason you couldn't do it right now with the existing infrastructure on HN. It wouldn't be as fancy (e.g. the AMA subject's comments highlighted) but it would be just as functional, down to the ordering of the questions in the comments.

<comment><USER4> I find the reddit interface extremely annoying with AMA... I want to see all the questions and answers, I don't want to see the random ones that don't get answered, etc. Just show me everything in a neat organized way. Love the guys that summarize everything at the end.

<comment><USER5> I agree. I'm unclear how it decides what posts get shown and what is hidden in the "Load more comments" tag. I've even found responses to questions within those "load more comments" section, which I find odd. They are also completely out of chronological order.

<comment><USER6> If you open a submissions comments you'll see in the top left corner under the submission text and the empty "your comment" box a little drop down that says "sort by" ...

The default sort order is either best or top scoring which will rank comment order by vote score, I generally sort by "old" (oldest first; chronological order.

If you have an account you can alter your default sort preference.

</comment></comment></comment></comment></comment><comment><USER7> This made me pause: "If the dinosaurs had a space program they'd still be here." ~ RonGaran ... sounds like something Elon Musk'd say.

<comment><USER8> A few years back someone wrote an article (to a science journal I think) asking if it was possible that the dinosaurs had high technology but all evidence of it had vanished in the millions of years that have passed.

Some dinosaurs were around for millions of years, which is a phenomenal amount of time compared to human history, and if humans go extinct anytime soon we may leave very little trace of our technology for a species 60 million years after us.

Two factors weighed against it: plant diversity and evidence on the moon.

The first comes from the argument that any sufficiently advanced civilization will travel around the globe, so fossil records will show the same plants everywhere. It's tricky to determine this but the evidence seemed against it.

The second is simply that any high technology civilization will eventually travel to the moon, which allows for a much more undisturbed record.

<comment><USER9> _The second is simply that any high technology civilization will eventually travel to the moon, which allows for a much more undisturbed record._

If we didn't already know where the lunar landers touched down, do we really think we'd be able to find them again with just a telescope? That's a lot of area to search.

<comment><USER10> The point is ... there is no question that our satellites would have found such evidence by now. We may not tell the general public ... but we would definitely have a good idea of where to look for evidence.

</comment></comment></comment></comment><comment><USER11> _The Shuttle is a big powerful vehicle that you ride IN. The Soyuz is a small vehicle that you WEAR._

That's just priceless.

<comment><USER12> A common sentiment regarding spacecraft of the era: _"Because of their small size, it was said that the Mercury spacecraft were worn, not ridden"_

(From <http://en.wikipedia.org/wiki/Project_Mercury> )

</comment></comment><comment><AUTHOR> My absolute favorite passage is "If the dinosaurs had a space program they would still be here"... Beyond the caricatural aspect of this phrase, i think it is a deep statement that needs to be understood by all humans. We had that exact discussion the other day with a bunch of friends/geeks; we tried to calculate the cost (to humanity) of all the "wasted" time designing,building,marketing,selling things that reduce the likelihood of the human specie survival beyond then next 500 years (an arbitrary large number). Seriously just think of bankers (very popular scapegoat these days - not that they do not deserve it) and the money (=time x effort) they wasted and how this time x effort could have been a far better investment in advanced space programs. Obviously, bankers are not the only negative contributors on the planet...

<comment><USER13> The bankers didn't waste money the gambeld and lost. The govs around the world wasted the money by spending on them.

The freedom to do these things led to the innovations over the centuries, its like evolution. Evolution is never the road to perfection but it adapts and gets better (slowly). If we would set everything else aside and only work on human survival we would in a short term make great progress but it would not be good longterm. Curiosity into all directions is better.

</comment></comment><comment><USER14> This one is my favourite question/answer so far:

[http://www.reddit.com/r/IAmA/comments/r62jp/iama_nasa_astron...](http://www.reddit.com/r/IAmA/comments/r62jp/iama_nasa_astronaut_that_recently_returned_to/c437c03)

<comment><USER15> I agree. He also has a much more in depth answer about the return process on his blog.

[http://fragileoasis.org/blog/2011/9/plunging-over-niagara- fa...](http://fragileoasis.org/blog/2011/9/plunging-over-niagara-falls-in-a- burning-barrel-and-more/)

</comment></comment><comment><USER16> He just inspired me to write this blogpost about our startup and Space.

[http://blog.localuncle.com/2012/03/21/localuncle-goes-to- spa...](http://blog.localuncle.com/2012/03/21/localuncle-goes-to-space/)

I really wish sometimes, I would've tried to become an Astronaut. I do have a Master's in Mech. Engineering...</comment>


A CLI tool for watermarking, converting and resizing images in bulk - <AUTHOR> https://github.com/jasimmk/watermarker

<comment><USER2> How is this better than ImageMagick?

<comment><AUTHOR> This is not a core library. But a wrapper around Python image Library, Pillow. In future, we also plan to include imagemagick functionalities

The aim of this tool is automate 70% of our image editing functionalities for our Python meetup group

eg:

We took photos @ meetup, we needed to publish the photos with our logo (preferrably at bottom right)

We needed to convert all the images to jpg and resize to 1024*768 for uploading to social media :)

It comes with multiprocessing functionalities, by default 4 processes are running at a time, and you can increase that one too with number of images and the number of resources available to your computer

Have a try and we are waiting for your feedbacks :)</comment></comment>


Jimmy Wales: This is super cool.  "I started to learn python..." - <AUTHOR> https://twitter.com/jimmy_wales/status/359640425268649984 <comment><USER2> I suggest reading the article before making a comment.

Jimmy Wales tweeted, "This is super cool!" about a girl presenting her Raspberry Pi story, "I started to learn Python...".

<comment><USER3> Which makes me wonder, why is Wales' tweet linked here as the news, whilst it's the original article that should be linked and upvoted?

</comment></comment><comment><USER4> For the commenter's applauding Jimmy Wales' new language skills, he's referring to the story of Amy Mather and her adventures with python and the Raspberry Pi. Linked video: [http://www.youtube.com/watch?v=a35XINnYFtA](http://www.youtube.com/watch?v=a35XINnYFtA)

</comment><comment><USER5> I don't share his enthusiasm about this. Doesn't everyone interested in computers/computing start programming things that are actually useful at roughly that age?

Also, is an early start a guarantee that someone will choose a career in computing?

<comment><USER6> Nope! But it would be great if the general population had some proficiency in programming, even if they don't choose a career in computing.

My partner is an aspiring film maker, but knows how to parse a CSV in python and do pattern matching, he was looking for funding and needed to pull all of the "x.com" domains out of a giant spreadsheet .. for him, simple, export as CSV and string match the email field.

This simple skill alone, put him miles ahead of the other film makers in his class, the others were using "find" in excel and copy pasting, he was done in 15 minutes, the others took hours.

There's so many examples where account managers, secretaries, business analysts, chemical engineers etc benefit from simple data matching. They're not going to write the next facebook, and are not interested in a "programming" / "computing" career, but data extraction and simple programming is becoming a basic skill like reading and writing, and it's all good I say!

<comment><USER7> Do you have links to any good tutorials about programming (in any language) for this purpose?

<comment><USER8> Though I haven't read it (I'm a programmer myself), I've always liked the idea of this book: [https://leanpub.com/scrapingforjournalists](https://leanpub.com/scrapingforjournalists)

</comment></comment></comment></comment><comment><USER9> Really important Hacker News. I started to learn node.

</comment><comment><USER10> Jimmy Wales is a role model, you must have modesty and defined objectives to build that humongous platform and refuse to monetize, his quotations of "The Fountainhead" made me read it, awesome, the man really is a Howard Roark.

<comment><USER11> Jimmy Wales did not build Wikipedia. Thousands upon thousands of unpaid volunteers did.

As for Howard Roark, who is supposed to epitomize Ayn Rand's "virtue of selfishness" ideal, I don't remember him being any kind of philanthropist. If anything, he (like Rand) has nothing but contempt for the masses.

Wikipedia would be the antithesis of what Roark would want to build. The Encyclopedia Britannica would be more to his liking, except that even it would require too much cooperation and would be made to help others and instead of himself.

Rand's ideal is the lone visionary designing his brilliant artwork for his own pleasure, and to the gnashing of teeth of the ignorant horde who are jealous of his genius.

<comment><USER12> Hmm, I don't know. Seems like much of Wikipedia is by smart people for smart people (like NPR). We all think of Wikipedia as the commons but it's far from it. Most people are on perezhilton.com all day.

Anyway, Ayn Rand was more against the falseness around giving and the betrayal of the recipient when he is given something he could never earn.

<comment><USER13> Are we talking about smart people, or rich people? Because they aren't the same category.</comment></comment></comment></comment>


Fun with GitHub repositories statistics - <AUTHOR> http://blog.sourced.tech/post/github_stats/ <comment><USER2> What is the data source/age of the data? The new BigQuery datasets?

<comment><USER3> The age is April 2016. The source is github.com/src-d/go-git-ing

<comment><USER2> That's the tool, not the source.

Both the data source and tool are _very_ important to include in analysis posts.

<comment><USER3> Data source is GitHub of course - it's in the article title, so I don't quite get you...

We used go-git to fetch every repo out there.</comment></comment></comment></comment>


Hofstadter's Law - <AUTHOR> https://en.wikipedia.org/wiki/Hofstadter%27s_law <comment><USER2> Hofstadter's Law will regularly reappear on Hacker News even when taking into account the audience's knowledge of Hofstadter's Law. :-)

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


Rotating black holes may serve as gentle portals for hyperspace travel - <AUTHOR> http://theconversation.com/rotating-black-holes-may-serve-as-gentle-portals-for-hyperspace-travel-107062 <comment><USER2> Hmm. You first, let's see how it goes.</comment>


We have a problem with promises - <AUTHOR> http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html <comment><USER2> Callback heavy languages can be very challenging to think about. They require keeping quite a few disparate pieces in your mental stack all at once.

Promises make this both better and worse, in my experience. In the easy cases, all you have to do is follow the promises syntax, and you can treat it as linear code.

The problem arises when writing non happy path code, you not only have to think about the promises syntax, but about the abstraction it's creating over callbacks. Otherwise, you begin to miss corner cases, create incorrect promises, and in general write code which misbehaves (often silently).

Promises are powerful abstractions, but like all abstractions, they have their leaks. Also like all other abstractions, there are places where you have to fully comprehend the mechanisms underneath them to use them properly.

<comment><USER3> I like doing stuff like

      function ensureFoo() {
        let promise = Promise.resolve();

        if (!foo) {
          promise = getFoo();
        }

        return promise;
      }

<comment><USER4> Shoudn't you store the initial fooPromise and use it instead?

        var ensureFooEquivalent = getFoo();

<comment><USER3> Sometimes the data you want is already available - no need to make an extra request in those cases.

</comment></comment></comment></comment><comment><USER5> The real confusion here is dynamic typing. It's weird that the parameter to .then() can return any value, but if it's a promise there's special behavior. And for no good reason either

        p.then(r => r + 5);

Is just a bit of sugar for

        p.then(r => Promise.resolve(r + 5));

And then the type signatures are easy to reason about. The dynamic typing also risks introducing hard to find bugs. Suppose you have an heterogeneous array `things` which might contain numbers and promises which will resolve to numbers.

        p.then(r => things[r])
         .then(thing => selectedThings.push(thing));

You might intend `selectedThings` to also contain either numbers or promises that resolve to numbers, ordered deterministically as a function of `p`, but instead it will contain only numbers and its order is nondeterministic (it depends on `p` and all of the promise members of `things` that `p` ever signals).

<comment><USER4> I don't agree with your first remark: what do you expect to be returned when you return a value not wrapped in a promise?

The ambiguity is actually the auto unwrapping of promises for subsequent then calls but I've yet to see a case where it's a problem (it's actually what makes the API clean looking when used).

For your last snippet, I don't see an array so I don't know what ordering you want to preserve (p always returns the same value so r will always be the same), if it's actually inside a loop, you should use Promise.all or Promise.map.

<comment><USER6> I think the confusion stems from the fact that .then() acts like either .map() or .flatMap() depending on the return type.

If .then() was just .flatMap(), you could expect an error if you didn't return a Promise (for example, reject with a TypeError).

If .then() was just .map(), you could return a value of any type (for example, string or Promise<number>) and get back a Promise for a value of that type (Promise<string> or Promise<Promise<number>>).

<comment><USER7> Actually, it's slightly more complex because if the result of the function passed to then were somehow a Promise<Promise<something>>, it would be flattened recursively so that the ultimate result is just Promise<something>. (Of course, due to .then's flattening semantics it's highly unlikely you'd have a Promise<Promise<...>> in the first places).

The distinction between map and flatMap makes sense for, say, lists, because you often do want to keep the non-flattened structure around. From promises, I can't think of a reason why that would be desired. You just want to represent the final result after all necessary waiting is completed. I suppose a library could provide stricter map and flatMap for people who deeply care about this.

</comment></comment></comment></comment><comment><USER8> > Rookie mistake #3: forgetting to add .catch()

I disagree with this advice. I usually refer to this as a "Pokémon Catch" (Gotta' Catch 'Em All!). Never catch a promise that you are un-able to handle. It's better to use a Promise library that supports debugging possibly unhandled exceptions (e.g., Bluebird).

> Rookie mistake #4: using "deferred"

This one is interesting because it's actually used in the Q library documentation for a way to `denodeify` or `promisify` a function. You definitely shouldn't do this if it's already a promise, but outside of that, it's more of a gray area. I tend to recommend using libraries to convert callback functions to promises.

<comment><USER9> The problem with "var d = defer(); ...; return d.promise;" vs "return new Promise((resolve, reject) => {...});" is that the former does not protect you from synchronous throws. In the latter (at least with every promise library and native promise implementation I've seen) if the code in '...' throws, it rejects the promise with the thrown error. In the former, it throws synchronously, which especially in node is almost never what you want.

Besides, if you need to promisify a node-like function you should just use Bluebird's promisification features; no point in doing it yourself. The fact that Bluebird is also the most debuggable and performant Promise implementation (including native) is just icing on the cake.

</comment></comment><comment><USER10> I would argue that `Promise.all` is not the equivalent of `forEach` because Promise.all will execute everything immediately, maybe all will fail, maybe 1 will fail, eventually you'll have your then or your catch called but 100 of your actions will have an attempt to be executed.

Compare that to forEach, if one fails and you throw the rest don't get executed.

I suppose if whatever you're doing for each thing is async then they are equivalent equivalent but in general forEach has different sementics than Promise.all

<comment><USER11> Now I wonder what would be the good way to make a forEach that actually returns when all elements have been executed?

<comment><USER12> Bluebird has this built in. For a quick userscript where I needed something similar, I created this which works ( warning: no unit tests, but it works for me )

[https://gist.github.com/dcherman/4dfba0d72c008ee5b59d](https://gist.github.com/dcherman/4dfba0d72c008ee5b59d)

It's a reduce function, but it could work as a forEach as well.

</comment></comment></comment><comment><USER13> Great article; a few things I would add. I use bluebird for Promises, which is just the most fantastic Promises lib ever conceived, no joke; if you haven't used it try it. So some of these may be Bluebird-specific:

1\. Don't wrap callback functions manually with `new Promise(function(resolve, reject) {...})`, just use `Promise.promisify(...)`. For one-off functions, try `Promise.fromNode(function(cb) { fs.readFile('..', cb); });`.

2\. This pattern:

      getUserByName('nolan').then(function (user) {
        return getUserAccountById(user.id);
      }).then(function (userAccount) {
        // I got a user account!
      });

Could be:

      getUserByName('nolan')
      .get('id')
      .then(getUserAccountById)
      .then(function (userAccount) {
        // I got a user account!
      });

3\. I too used Promise.resolve().then(...) to start a lot of route handlers. Try `Promise.try(function() {...})`, which is equivalent but reduces the temptation to just stick a synchronous value in the `Promise.resolve()` just because you can.

4\. `Promise#nodeify()` is _super_ useful for creating functions that return promises or use callbacks depending on how they're called. For example:

      function getUserName(id, cb) {
        return db.getUserAsync(id).get('name')
        .nodeify(cb);
      }

Is the same as:

      function getUserName(id, cb) {
        var promise = db.getUserAsync(id).get('name');
        if (!cb) return promise;
        promise.then(function(result) { cb(null, result);})
        .catch(function(e) { cb(e); });
      }

This is great if you want to convert a few functions you use to promises, but they're called elsewhere and expect a callback style.

I'm sure there are many more. This is my bible: [https://github.com/petkaantonov/bluebird/blob/master/API.md](https://github.com/petkaantonov/bluebird/blob/master/API.md)

In short; use Promises! They are the answer for callback hell in Node. Async/await may fix more problems in the future but if you want Node/Browser compatibility and to get started right now, Promises are the best way to go.

<comment><AUTHOR> Bluebird is awesome. :) I especially love promisifyAll() and promisify().

The only reason I didn't include something like that in the post is that I didn't want to overwhelm newbies. I think it's already confusing enough what the difference is between q/when/RSVP/bluebird/jQuery promises/Angular promises, etc... And honestly, more and more I just use vanilla promises, or a tiny polyfill like Lie.

<comment><USER14> After native promises, is there much reason to use 3rd party libraries? Promises are a pretty small set of tools, so I'm not sure what one would have to offer over another.

<comment><USER15> Bluebird is much faster and easier to debug than native promises. It is very feature rich and it runs _everywhere_. It also converts callback APIs to promises at one go.

That said, on a client-side app there are cases where I'd use native promises. On the server - not a chance.

</comment></comment></comment></comment><comment><USER16> The messes that callback/promise-heavy JavaScript make are a good example of why we need syntactic abstraction in the language. With a proper macro system, this whole async mess could be abstracted away and we could write nice linear code.

<comment><USER17> In Scheme, for example, a solution would be likely to involve delimited reified continuations and not need much in the way of macros. It's not obvious to me that the problem can be solved accurately with just syntactic macros. Would the solution involve transforming code into CPS?

<comment><USER16> Yes, delimited continuations would be a big part of the solution in Scheme. The macros would just be the sugar on top of the whole system such that you didn't have to write out all of the lambdas and prompting and aborting of the continuations. I've implemented a coroutine system this way and it works nicely.

</comment></comment></comment><comment><USER18> its interesting that when people talk about the newest feature or framework in javascript, they tend to forget about javascript's core functionality. It's always necessary to look at things like promises with javascript's core functionality in mind. Take #3 for example, which is really just a function of the core way javascript executes, taking promises aside!

You would not do something like this would you in a normal day at the office? function myFunction(doSomething()){

};

so why would you do this.

Promise.then(doSomething());

doSomething() gets immediately invoked when the code is evaluated. It has nothing to do with Promises.

Don't forget the fundamentals!

<comment><USER19> This article has a lot of ambiguity which I think adds to the confusion.

For example I was looking at that question(3) thinking, does doSomethingElse() return a function, another promise, nothing?

Part of the problem of having a very forgiving, lose language and API is that it leads to hidden, subtle complications, highlighted by "Advanced mistake #5: promises fall through". Here the then() method accepts anything as a return type, but will only chain a function that returns a promise, not a promise it's self. This isn't present in the MDN documentation ([https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Refe...)).

<comment><USER8> This. That was my "answer" to the question. "Oh, if `doSomethingElse()` returns a function, it will run that function after the promise resolves successfully."

</comment></comment></comment><comment><USER20> >If you know the answer, then congratulations: you're a promises ninja

No... you know how functions work in javascript.

<comment><USER21> Understanding functions in JavaScript is not enough to be able to complete the quiz. You also need to understand the somewhat surprising semantics of the Promises .then() method.

<comment><USER22> You don't.

Just to drive this home: I've read the spec a few times when evaluating whether to integrate the concept into code I've written, soon after the pattern was introduced, and then again a year or so later. (Side note: the result of both evaluations was a "no thanks".) But at this point, I've never used or authored a Promise, ever. And before moving past the intro that contains the quiz in question, it's been over a year before I last looked at them, much less read any up-to-date spec.

The quiz in the intro doesn't actually do a good job of exercising the details of `then`, because they're all trivial; there's only a single use of `then` in each example, rather than a chain of multiple ones (or a chain involving `then` and `catch` for a less useful example). You can get past the quiz in the intro by having only a general understanding of how `then` works. In fact (and I can only speak for myself here, but this is how it played out when I went through it), _not_ having an extensive familiarity with Promises may help for the quiz, because that knowledge isn't crowding your thinking, and all you see is function calls. The author points out the third example from the quiz as particularly sticky, but it was the easiest gotcha to catch with my mostly Promise-free background, because the effect where overlooking parts that can lead you astray (because you expect idiomatic patterns in that place) is pretty totally nonexistent.

It's the examples further into the article that you need to really look into and consider how `then` works. For example, in rookie mistakes #2 and #5, understanding how `undefined` is handled required backtracking to the intro where the spec is linked, in order to delve into interaction with "synchronous" return values, and `undefined` in particular.

Lesson for potential interviewers: don't rely on the intro quiz in this article for your fitness function to weed out candidates, because it could mean you're optimizing for the people you _don 't_ want (like me), rather than those you do. _Do_ make sure to focus on the examples further in that actually exercise an understanding beyond the superficial.

<comment><USER23> I was able to answer it correctly with no knowledge of JS promises at all, although I have used them in other languages. Being told that there's something tricky going on was enough for me to be able to guess the difference between #1 and #2, and all I needed to know for #3 vs. #4 was that promises aren't a language extension that can capture expressions as thunks.

<comment><USER22> Thanks for corroborating!

</comment></comment></comment></comment></comment><comment><USER24> What's so bad about using deferred? In one case I call the resolve or reject parameters and in the other I call a resolve or reject properties on the deferred object. Not much of a difference to me.

I learned about deferred a few years ago and kinda stuck with it. It's all over my code base and he didn't really justify why I should go about changing it. The only thing I can reason I can think of is using his recommendation follows the ES6 spec which doesn't matter to me that much for now.

<comment><USER25> The main issue I've found is with the way that deferreds handle then failures and how "then" works.

According to the Promises/A+ spec, then should always return a new promise. With the jQuery deferred.then() that's not the case.

In practice this means that it's harder to recover from failures as you're processing your results because your all your onRejected callbacks are attached to the same deferred and so will all fire one after another.

If you're just dealing with one asynchronous event, for example an AJAX call, that might not be a problem but it can cause problems debugging more complex code if you're not very careful.

E.g. (Get request) -then-> (onGetSuccessProcessor, onGetReject) -then-> (onProcessSuccess, onProcessingReject)

If the get request fails the onProcessingReject will also execute even though we haven't run the onGetSuccessProcessor callback.

In Promises/A+ code you can return a new resolved promise from your onRejected callback and the next "then" will fire it's onResolve callback instead of onRejected.

Hope that helps. (it's a lot easier to draw as a petri net than to explain in a comment on HN :)

<comment><USER12> Be careful with that assertion. jQuery's `.then` method has returned new Promises since 1.8.

In jQuery 3.0, their Promises will be fully Promises/A+ compliant as long as you're using `.then` ( `.done` and `.fail` are remaining non-compliant to remain non-breaking with sync XHR I believe )

</comment></comment></comment><comment><USER26> Re "Advanced Mistake #4", do Javascript programmers not know about tuples? Does nobody write functions with signatures like

        pair(pa: Promise<A>, pb: (a: A) => Promise<B>): Promise<{fst: A, snd: B}> {

          return pa.then(function (a) {
            return pb(a).map(function (b) {
              return {fst: a, snd: b}
            })
          })

        }

It's a super reusable little chunk of code.

<comment><USER9> It is, but it only works for pairs and then you wind up with the relatively nonsensical 'fst' and 'snd' names.

My preference would be:

      let user = await getUserByName('nolan');
      let userAccount = await getUserAccountById(user.id);
      // stuff with user and userAccount

But I have long since decided that I am never writing ES5 again, and since I therefore need Babel anyways I may as well turn 'stage: 1' on and use async/await. It's basically do-notation for promises.

<comment><USER26> So alpha convert your names to whatever you like. I don't know how to do it namelessly in Javascript without Chuch encoding the pair.

You can go much further than this. The following operation

        ap<A, B>(pf: Promise<(a: A) => B>): (pa: Promise<A>) => Promise<B> {
          return (pa: Promise<A>) =>
            pf.then((f) => pa.then((a) => Promise.resolve(f(a))))
        }

can be used to extend the previous idea as far as you like.

<comment><USER9> I'm having trouble grokking whatever type-added syntax you're using for Javascript here. I'm guessing it's:

      function ap(pf) {
        return (pa) =>
          pf.then((f) => pa.then((a) => Promise.resolve(f(a))))
      }

Still, if I wanted to go full-hog static-typed functional I doubt I'd be using straight Javascript, I'd probably try one of the various Haskell-alike to JS converters. Promises with async/await syntax seems like the most practical of the various solutions whilst still feeling like Javascript.

(Besides, I prefer dynamic typing and I find points-free style in Haskell to be obfuscating rather than clarifying, so it seems unlikely we're going to have the same opinion of the best way to accomplish things here. :)

<comment><USER26> Sorry, I'm just writing in Typescript. It's the typed Javascript flavor I'm most familiar with. But, yep, you properly erased the types.

I'd love to use Haskell-to-JS but I don't think I could bet a product on it quite yet.

</comment></comment></comment></comment></comment><comment><AUTHOR> If anyone's confused by the 4 "puzzles," I whipped up a JSBin to demonstrate: [http://jsbin.com/tuqukakawo/1/edit?js,console,output](http://jsbin.com/tuqukakawo/1/edit?js,console,output)

<comment><USER27> What if the doSomethingElse in #3 returns a function that is equivalent to the doSomethingElse of #1? Shouldn't #3 then be identical to #1?

<comment><AUTHOR> Yes, but in most code I've seen, that's a typo rather than someone intentionally writing a function that returns a function. You can definitely do it!

</comment></comment></comment><comment><USER28> I made the transition from callbacks to generators/iterators recently, and I'm really enjoying the yield/next foo. Promises just never really spoke to me. Not certain why I always felt reticent to use them.

<comment><USER29> Yield works with promises too.

</comment></comment><comment><USER30> Typescript or Flow will catch many of these errors. Highly recommended!

<comment><USER26> Also having promise libraries which stuck closer to the basic monadic interface without lots of overloading would help things like Typescript and Flow catch all of the errors.

</comment></comment><comment><USER26> And this is why types are nice. Along with limited overloading.

</comment><comment><USER31> Gosh, adding a `.catch(console.log.bind(console))` is just insane.

If you have a library that will return non operational error, just remove it from your project. If your code throws when it is not expected to, fix it.

This is like saying put a `try/catch(ignore)` everywhere. Seriously.

<comment><USER32> Logging errors to the console can be helpful to find them during debugging/development (as opposed to having them fail silently).

The goal isn't to leave errors in, its to expose them when something changes to make them happen so that you can do the 2 things above.

<comment><USER33> You need to configure or change your promise implementation if uncaught errors fail silently.

In any case, logging error gives you no information anyway. Just try running: `console.log(new Error("..."))`. So at the very least you should do `catch(function(e){console.log(e.stack);})`

</comment></comment></comment><comment><USER34> Very nice article, will keep that in mind when trying to help others with promises. Also helped me to re-understand some things :)

One thing though, Advanced mistake #4, is in my opinion good answer, the Q library however gives a (afaik) non-a+-standard way of doing that which I like:

from:

      getUserByName('nolan').then(function (user) {
        return getUserAccountById(user.id);
      }).then(function (userAccount) {
        // dangit, I need the "user" object too!
      });

to:

      getUserByName('nolan').then(function (user) {
        return [user, getUserAccountById(user.id)];
      }).spread(function (user, userAccount) {
        // I do have the user object here
      });

</comment><comment><USER35> The most comprehensive and foolproof way is to grab the spec, read the algorithm and fiddle around a day. Sadly this is the only way of fully understand promises, promises already put a lot of cognitive load on your brain when you're using them, so having any other abstractions of your own (for remembering how promises work) is bad idea. IMO you're better off investing a large continuous block of time for understanding promises rather than reading some article here and there.

</comment><comment><USER36> I am stumbling over this:

> Just remember: any code that might throw synchronously is a good candidate > for a nearly-impossible-to-debug swallowed error somewhere down the line.

Why would a synchronously thrown error be swallowed, and why would I not just `try { } catch` here?

<comment><AUTHOR>
      naivePromiseAPI() {
        if (foo) {
          throw new Error('this will get swallowed!');
        }
        return somePromise();
      }

Instead you want this:

      cleverPromiseAPI() {
        return Promise.resolve().then(function () {
          if (foo) {
            throw new Error('this won't get swallowed!');
          }
          return somePromise();
        });
      }

Because if the client of the API does something like this:

      $('.my-button').on('click', function () {
        cleverPromiseAPI().catch(console.log.bind(console));
      });

Then the client might expect the error to get console.logged, but actually it won't in the naive case. That's because the error was thrown synchronously and thus bubbled up to the click handler, instead of being caught inside of the promise chain.

<comment><USER36> Ah, I get it now, thanks! I missed the part about doing that for synchronous code _in promise-returning APIs_.

I had a moment of stupidity and first somehow understood that to be a general suggestion for error handling.

</comment></comment></comment><comment><USER37> Puzzle number 3 doesn't have a complete explanation. DoSomethingElse() can return a function, which is then evaluated with the result of the first promise as an argument.

</comment><comment><USER38> As soon as you can reasonably introduce an ES6/7 transpiler into your toolchain you should start using ES7's async/await or equivalently ES6's generators + a coroutine library function like Bluebird.coroutine, Q.async, co, or Task.js.

It solves basically all of the problems mentioned in this article.

</comment><comment><USER39> hahahahaha this one cracked me up "Writing code without a stack is a lot like driving a car without a brake pedal: you don't realize how badly you need it, until you reach for it and it's not there."

<comment><USER40> I didn't really understand that one. First of all, I don't see why a stack really is that indispensable, and secondly, JavaScript does actually have a stack so I don't know how he thinks it's operating stackless - where do the local variables go?

<comment><USER41> In the classic, but widely misunderstood, "Goto Considered Harmful", Dijkstra's point is basically that structure programming is good because it produces a stack and an instruction pointer, which contains an immense quantity of useful information when a crash occurs. Goto is bad in this paper because when it is used as the _only_ control flow construct, in a way difficult for a modern programmer to understand in a world where structured programming won so thoroughly that _every_ language is structured, it produces no stack trace. You get a "Crash On Line 28430", with no clue how you got there.

Naive event-based code is _somewhat_ like a goto, in that every time an event comes in, you get a new stack constructed for that event. While you then get a stack if you call functions from the initial handler, every event that comes in whacks the stack afresh. So it isn't "the same as" a goto, but it does hurt the stack. Instead of a stack frame that represents the whole of the program, you get a series of "island" stack frames.

In some sense, this is the most fundamental reason why event-based programming is so painful, and it's the problem that all these multitudinous programming "async" techniques are trying to get around. Promises, for instance, can be looked at as a partial way of having a sort of stack around a particular sequence of operations that may be interrupted in arbitrary locations by this event-induced stack discarding. In this sense they can also be viewed as an inner-platform problem; where the language has "try/catch", for loops, etc, promises end up trying to recreate all that in a second layer above the bottom layer, with all the corresponding complexity of embedding a language in the language.

If you then end up asking, "Well, what if we just didn't discard the stack in the first place?", you end up in Erlang/Go/Haskell/Scala land.

</comment></comment></comment><comment><USER42> If devs don't want to read specs and instead read blog posts then its obvious why there is a problem.

<comment><USER43> Your snark would be appropriate if humans were logically omniscient, but we're not. Reading and comprehending a spec does not imply grokking all of its consequences.</comment></comment>


I Don't Always Chatbot, But When I Do, I Presbot - <AUTHOR> https://www.presbot.com/4-jlangley/ <comment><AUTHOR> With Presbot, my hope was to lower the barrier for non-tech folks to play around with chatbots, remove the need for a traditional chatbot builder, define conditional logic or draw flowcharts and make it easy as a click of a button to spin up your personalized chatbot. The chatbots are free. I welcome any thoughts and feedback to help improve the service and your experience. Have a wonderful weekend!</comment>


Russian hackers allegedly behind cyberattacks to steal Covid-19 vaccine - <AUTHOR> https://www.cnet.com/news/russian-hackers-allegedly-behind-cyberattacks-to-steal-covid-19-vaccine/ <comment><USER2> This is obviously wrong, but shouldn't something as important as a vaccine for the worst pandemic in a century kind of be open source?

<comment><USER3> I don't know why it's wrong. It's wrong to keep it closed. Somebody has tried to fix a problem, can't blame them.</comment></comment>


Unreal Engine 4.19 Released - <AUTHOR> https://www.unrealengine.com/en-US/blog/unreal-engine-4-19-released <comment><USER2> I've tried to learn UE4 multiple times before and I can never get into it. I've been using Unity for several years and the workflow was much more intuitive to me when I first picked it up. Visual scripting doesn't really work for me and the UE4 C++ scripts feel very cumbersome next to Unity's C# scripting (not just the language, but the amount of work needed to get the desired behavior). It's a shame because the tooling, rendering pipeline, and updates for UE4 are way ahead of Unity and I get envious every time I see these releases.

Does anyone here use UE4 to develop small games? If so, what's your development workflow like for game logic?

<comment><USER3> I had also tried to get into UE4 a couple times, and failed until I used found the following resources:

[https://www.udemy.com/unrealcourse/learn/v4/overview](https://www.udemy.com/unrealcourse/learn/v4/overview) \- a bit slow, but there is tons of content

[https://www.udemy.com/unrealmultiplayer/learn/v4/overview](https://www.udemy.com/unrealmultiplayer/learn/v4/overview) \- building an online game with Unreal turned out to be stupid hard for me, and this has paved the way

[https://www.youtube.com/channel/UCRnPBe1tJpXA0lccx_U1mww](https://www.youtube.com/channel/UCRnPBe1tJpXA0lccx_U1mww) \- UnrealGaimedev is amazing. I have so much thanks for his videos

With those, I have built some simple games. One of the things that I have found interesting is that the visual programming of UE4 can accomplish way more than I thought it was capable of. If you're getting started, I'd recommend not even touching C++ because the visual programming stuff is powerful enough for pretty much everything you would need in a hobby game.

<comment><USER4> I have been getting into Unreal the last few months and had the opposite experience.

I found the visual programming language frustrating to use and reason about. While I loved the discoverability of working with blueprints (it is easy to find new nodes), I found that actually working on game logic quickly devolved into an unmaintainable mess of literally, spaghetti code. It was great for prototyping, but horrible at actually building something maintainable and understandable. Reading other people's blueprint setup is even worse.

I found the workflow even more frustrating. Blueprints are stored as uasset binaries, and as such make traditional version control impossible. Changing a single default parameter in a blueprint rewrites the entire file, and can not be diffed, merged, or reviewed, making git/p4 log nearly useless.

I know there is a builtin diff/merge in the editor, but it's pretty limited and I would say it's quite a far cry from what "normal" developers are used to in other parts of the software world.

I have since switched to using mostly C++, and only using blueprints for derived Actors to set up art (meshes, materials, etc). It's definitely slower to set up than using the blueprints. I'm not happy about being back in a place where segfaults can happen; the compile-play-crash-restart cycle is much longer than it should be. I'm not a huge fan of C++, warts and all. In return, however, I can actually read the code, grep it, review it, etc. Do "all the things" you're supposed to do as a good software engineer. I really don't know how the AAA game studios are managing real games with blueprints, I kind of doubt they are.

At least as an experienced software developer but amateur game programmer, I found it much more comfortable to sit down with C++ and learn their API, than it was to perform game logic by dragging around 'foreach' boxes and doing arithmetic by crossing lines.

<comment><USER3> I was also frustrated with the poor git support by blueprints. I ended up just writing long commit messages so that I could read about what I (thought) I had changed

<comment><USER5> I've found the git support to be lacking. Every game studio I've known uses Perforce mostly because it handles lots of binary data much better. Because of the way games are developed, DCVS don't have as many benefits.

<comment><USER4> Perforce is great for binaries, but really kind of a substandard experience for code, at least compared to hg/git.

I also tried Git LFS and it is a hot mess.

<comment><USER5> I don't have much firsthand experience with Perforce. I've set it up, attached it to UE4 and just appended commits. I have been on the miserable side of git and binary data, LFS and other solutions seemed like awkward solutions.

Even ignoring the distributed aspect of git, the things I loved as a solo developer was immediate branching, a sane way of merging, and things being fast because there was no server to talk to (coming from SVN and CVS).

Now that I think more about it, I think some of the game studios I'm familiar with were using Git for the engine and artists were using Perforce for their assets.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is just brutal to Simplygon:

"The new system is used by HLOD and is a replacement for Simplygon....After the prompted editor restart, the Plugin will replace the third party Simplygon tool for static mesh merging LODs. This new Plugin is accessed in two ways: The HLOD Outliner, and the Merge Actors dialog."

<comment><USER7> They got acquired by Microsoft, they'll live.

</comment></comment><comment><AUTHOR> I cant think of a single pieces of software that has this consistent pace of improvements, massive changes every release and shipping every few months, and has been doing so for years.

<comment><USER8> Many internal game engines go through similar levels of churn + updates, they just usually don't see the light of day.

Gamedev is a somewhat unique space in that about 6 months from ship you fork from upstream and almost never merge again. Heck most licensees I know hacked UE3 to hell-and-back(which we did too) to add the features that we need to actually ship.

</comment></comment><comment><USER9> It's funny how Fortnite became the ultimate pitch for UE4's versatility.

<comment><USER10> I think it's funny that Fortnite will probably cause the inevitable unraveling of UE4, as yet another game engine without baked-in anti-cheat.

Cheating in Fortnite is practically unheard of at this point. But it won't be long until the player base is just as jaded as PUBG's: [https://github.com/Griizz/Fortnite-Hack](https://github.com/Griizz/Fortnite- Hack)

<comment><USER11> I have a few reactions here:

1\. Why should Epic go and reimplement anti-cheat that you can grab off the shelf?

2\. A big part of limiting cheating comes down to the specific game design and implementation. You need a server implementation that is as distrusting of clients as possible, you need secure (networking) code, etc. Anti-cheat is not a cure-all.

3\. Even without anti-cheat, Unreal Engine is still well-used by tons of single-player video games. I don't see it "unraveling" regardless.

<comment><USER12> > 2\. A big part of limiting cheating comes down to the specific game design > and implementation. You need a server implementation that is as distrusting > of clients as possible, you need secure (networking) code, etc. Anti-cheat > is not a cure-all.

Unfortunately that's just not realistic for a large category of games. If you can trust the clients to some degree then you can really really offload a lot of server work. It's not feasible to process user's mouse input on the server in an FPS for example. Not just from a server load standpoint but from a latency standpoint.

<comment><USER13> You don't need to do this in real time, instead you could log the data (e.g. mouse clicks, key presses) to something like a database, Kafka, or Kenesis. Now you've unloaded the anti cheat logic to other servers.

You don't necessarily need to ban a player immediately. If you can accurately ban people within a day of using a cheat, then that's a pretty serious deterrent from using them.</comment></comment></comment></comment></comment>


Examining the state of tech salaries across Europe - <AUTHOR> https://email@example.com/talent-io-developer-salary-report-fac3eea3959a <comment><USER2> Scroll all the way down to the bottom of the page to see the actual salary data:

"Coming soon."</comment>