Gamification is not entirely bullshit - <AUTHOR> http://22ideastreet.com/blog/2011/08/16/gamification-is-not-entirely-bullshit/
<comment><USER2> 1) Someone uses X (like game mechanics, industrial & visual design or artificial intelligence) in a new or more generalistic way with great success.

2) A lot of people start using X to get the same results.

3) A "consulting" industry starts to rise around X.

4) Someone gets tired of the overused X and calls it bullshit.

5) Everyone that didn't succeeded with X, probably after some kind of investment inspired by the new "consulting" industry, gets in wagon and calls it bullshit.

6) Some time after the "bullshit" narrative sets in, someone finds out that X can be useful. If he tries to defend it he either does it by carefully arguing "I'm on your side but...", or just change it's name.

This kind periodic behaviour seems to deamplificate until it reach some stable state, generally it's absorbed by academia and gets to be taught in schools. From there it can get some amplifications, and if it does the pattern repeats.

<comment><USER3> With gamification of the workplace in particular, there seems to be a repeating cycle. Each cycle does come with some shifts in focus, but it seems mostly implicit ones, without a lot of reflection.

I've been doing some preliminary research trying to track down each of the cycles and how they relate, but the fact that so much of it is ephemeral and buzzword-heavy, and the studies are done by self-interested people with poor documentation of results, makes it a bit difficult.

As far as I can tell, the earliest proposals for using game-like processes to motivate and engage workers came in the Soviet Union, for the obvious reason that they needed a replacement for _monetary_ motivation ASAP. Lenin called it "socialist competition", and had this vision of friendly, game/play-like competition as a replacement for cutthroat, loser-ends-up-homeless capitalist competition. I wrote a little about that here, though it's more like a preliminary collection of sources than a proper history at the moment: <http://www.kmjn.org/notes/soviet_gamification.html>

Then sometime in the 1980s and especially the 1990s and 2000s, the idea of the power of games and play started becoming a huge thing in management. There was even a hilarious consulting job title for a while, "funsultant", someone who would come into a company and help make it more "fun" and "gamelike". I suspect there are similarities between today's "gamification consultants" and 1990s "funsultants", with the main shift being less focus on play and fun, and a bigger focus on reward/feedback loops. In effect the '90s game/play management techniques are merging with the much older behaviorist- reinforcement management techniques. I wrote a bit about the funsultants and some of the reactions to them as well ( _Office Space_ 's flair scene is probably the most memorable example of a backlash to mandatory fun): <http://www.kmjn.org/notes/funsultants_and_gamification.html>

So I guess what I'm mostly missing from gamification advocates is a clearer picture of what's new here and how it relates to previous approaches. How much of it is about Skinner-style behavior-loop reinforcement? How much of it is about fun? About competition? How do the new approaches, whether we call them "game mechanics" or something else, relate to existing research findings on how effective each of these things are? As far as I can tell nobody actually wants to mention any of those things, instead presenting it as something totally new: game mechanics used to be used only for entertainment, but in the 2010s we realized they could be used to motivate non-entertainment things as well. But I don't think it just fell from the sky with no relationship to previous attempts.

<comment><USER2> I believe this phenomenon it's characteristic of highly interdiciplinary areas, mostly practical and technical but with a strong component of humanism.

The people that want to do work in industry tend to gravitate to some specific fields. And half a decade in managment or engineering school can't teach you the history of philosophy, anthropology, sociology or psychology. I believe this to be the reason why "design" is a big hit nowdays, "managers" and "engineers" are looking at humanism, and the practical humanists: the "designers", for a competetitive advantage.

In the case of gamification, there were people interested not in humanism per se, but in building games. They found the power of some buried ideas for social control either by getting to identify the problem and searching for the answer in the field's body of knowledge, or by rediscovering it themselves, bypassing the field's historical intelectual debate. Some wanted to "sell it", so they needed an "angle" related to their profession.

<comment><USER3> I think that's definitely part of it, but I think there may be a bit of deliberate amnesia as well, out of a desire to portray something as _totally new_ , and perhaps to avoid any unwanted historical baggage.

You also see this in "serious games" and its variants. Even Al Gore was recently talking about how the future of videogames is that maybe they'll be used for things like education, too, not just entertainment. Sure, I even buy that. But that's what everyone was saying in the Apple ][ era also! It's not just about credit, but I think we lose something from the amnesia: some of the Apple ][ games were actually _better_ uses of game mechanics for education than much of the fairly shallow stuff being promoted more recently, and we can even learn something from the examples that were more mixed successes (though admittedly there was a lot of bad "edutainment", too).

<comment><USER2> That's true, the process doesn't need to be 100% "conscious".

PS: Great insight on the article about soviet "gamification", I never thought abut that in that way, thanks.

</comment></comment></comment></comment></comment><comment><USER4> In a more meta way, just about any innovation goes through a 2-steps forward, 1-step back cycle. The 1-step back is always due to wide-scale adoption where the original message is somewhat lost in translation, but as a whole actually moves things forward (ie. agile 'methodology').

I think when it comes to gamification it's perhaps better to reframe it as a more targeted engagement structure. If you think about how big the actual video game industry is, how much people are _paying_ to solve problems, that there could be a better way to flip that script, because they are in fact doing work in the guise of entertainment.

Right now the whole concept is in its infancy, but I imagine five years from now it will be prevalent in most everything we do, perhaps in a very indirect manner. It might even be the perfect cure for procrastination (ducks :)

<comment><USER5> > I think when it comes to gamification it's perhaps better to reframe it as a > more targeted engagement structure. If you think about how big the actual > video game industry is, how much people are _paying_ to solve problems, that > there could be a better way to flip that script, because they are in fact > doing work in the guise of entertainment.

\----

Disagree. Play is distinct from work because it is responsibility free. Work is a chore that you do because you must. For this reason Gamification is and will forever remain bullshit.

<comment><USER4> I up-voted you because I like you directly teasing out this point.

This is what I meant by flipping the script. It's just a matter of perception, and that itself can be changed. It shifts with culture. If you think work is a chore then it will be a chore. If you think it is fun then it will be that, at least some of the time. If innovations come around that make it more fun regardless, culture will shift where less will think of it as a chore. These things build upon themselves.

Keep in mind play is not responsibility-free - it has an associated time/opportunity cost. Taking a trip around Europe for a couple weeks, I'd say that's great. The experience can be life-changing... it can bring alot of value for the time spent. Being locked in a room playing some online game for a few weeks... not so great. It might be fun to some degree, but it can be deleterious for one's health, personal relationships, work life, etc. It can actually be harmful.

As a working engineer for the past dozen years I can agree that many times work is a chore. But, and this is a big but, every once in awhile I get a project that is so challenging, so meaty, so impactful that it is far more fun than anything else I can imagine doing. Those projects are the kinds of things I stay at work late for, when I get home even VPN to the office to continue working until I pass out, then get in early to the office because I can't wait to get back to it. YMMV, but I think quite a few HN folk can relate. Some people this might describe their job entirely. The gamification is implicit in the work itself.

I think there's a huge industry waiting to be tapped here, and once it finds its footing human productivity will go up a few notches. The biggest problem is what we currently have is a bit cheesy and too obvious, perhaps to the point where it makes the user feel foolish/duped. That needs to be overcome.

<comment><USER5> For the vast majority of people work is _always_ a chore. It's a commodity you use to barter with your employer; in exchange you receive money that allows you to live.

You argue that sometimes work is "fun". I think a more accurate description is that work can sometimes be engaging. Like when you're presented with a problem that's right at the edge of your abilities but not out of reach. Yet it's still work. Unlike play, work carries with it stress and responsibility. There are consequences if you screw up. Worse if you stop entirely. None of these are true for play.

Gamification is bullshit because it encourages the perception that these differences don't exist or that they don't matter. It's a flat out lie. Work is not play. Accept it. Move on.

<comment><USER6> Play is a frame of mind, not a contractual relationship. If it weren't, nobody would take mmorpgs seriously, and they do; the consequences may not involve your paycheck but it's harsh when you let your team down.

Playfulness shows up at work all the time, although not necessarily in ways that promote the bottom line.

Play mindsets can be encouraged in the workplace when they don't emerge spontaneously. Whether those efforts are successful for a given person on any given day...? It's still pushing a rock uphill.

Game design and reward systems are trying to find a path that doesn't suck. It may take another decade of experimentation before ten thousand failed attempts show the obvious and elegant ways to make more workplace leaders look like your favorite camp counsellor, recess organizer, or dungeon master.

<comment><USER5> > Play is a frame of mind

It's more than that. The environment matters. Real play is risk free. You can do whatever you want and there are no consequences. This is not true for work.

At the end of the day business doesn't want their employees to treat work as play; they just want them to be more engaged while at work. But instead of looking at why their workers are _disengaged_ they hire people who set up cute little games and contests and tell people to pretend they're not actually working. Which is all well and good until somebody drops the ball and they get fired. Whoops. Sorry Bob. I guess you didn't understand we weren't actually playing after all.

Gimme a break. Gamification is just bullshit newage snakeoil.

</comment></comment></comment></comment></comment></comment><comment><USER7> Off topic, but that inline 'tweet' button to tweet a choice quote from the article was an interesting touch. I hadn't seen this technique before.

<comment><USER8> I think it would be even more awesome if the tweet button was even more inline with the text, almost like a citation link in wikipedia, except you could make it an actual twitter bird character!

</comment></comment><comment><USER9> The most bizarre bit of gamification I've run across lately was in Wells Fargo's ATMs. I deposited a check the other day and got an alert on the ATM screen:

      You've earned a new badge
      Express Depositor
      [Learn More]

Well! That should certainly help me gain status and reputation among my fellow ATM users!

Photo here: [http://artlung.com/blog/2012/05/03/gamification-in-the- wild-...](http://artlung.com/blog/2012/05/03/gamification-in-the-wild-wells- fargo-badge-earned/)

<comment><USER10> Oh goodness.

Have you seen this at any other Wells Fargo ATMs? Do you know if there's a web interface? The only mention I can find of this is the linked image.

</comment></comment><comment><USER10> Gamification is bullshit by design. Gameful mechanics may not be, but we're not there yet.

Point 1 is that Zichermann (who wrote Games-Based Marketing) misrepresents the research into motivation. Whether this is maliciousness or incompetence is up for debate (personally I think the latter with a dose of arrogance). You can see Deturding shred his O'Reilly book, where he goes into this in a lot of detail [1]. One point that is made in the blog post is that most people are socializers, according to Bartle player types. Nick Yee has already shown those player types to be largely useless outside of MUDs, and Bartle never claimed them to be otherwise. In addition, there is no evidence that most people are socializers, and Zichermann doesn't cite this claim. I've not been able to find anyone who's tracked down any research which shows that this is true.

It's odd that the author mentions Pink's Drive at the end, as it's pretty much the anti-thesis of Zichermann. Drive advocates intrinsic motivation, Zichermann is all about extrinsic. If you don't get a trinket, it isn't worth doing. Extrinsic motivation erodes intrinsic motivation. And that's why Bogost slams gamification in the first place: the trinkets you get are valueless, and present no expense to the company. At least frequent flier mile rewards do _something_.

Point 2 is that this post makes no mention of the quality of interaction. When you play with small percentages of large absolute numbers, you're going to find a small minority of people who respond to this. Enough to fill a leaderboard. But what are they doing? Are they really rating stuff? Are they just hitting 5 stars on everything? We know that HITs in the Mechanical Turk suffer from poor interactions, and those people are _getting paid_ (an extrinsic reward worth more than a leaderboard place, no?). What about the other 99% that aren't on the leaderboard?

Point 3 is that, as gradstudent pointed out, context is highly important when discerning work from play. The research shows that artists, for example, make better work when they aren't being paid. Even if you change nothing in the environment but making the piece contracted, the quality of the work suffers. People know when they're working and when they aren't (this was in Drive). A leaderboard in Space Invaders might be fun, but a leaderboard at work is a really good way for middle management to find the worst 10% of performers, and becomes a tool for control, and people recognize this instantly.

So yes, gamification is bullshit. It's so much bullshit, that Jane McGonigal, who popularized the use of such things, has had to back away from the term as it's so poisonous, and she's using "gameful" instead.

What this all came about from was "People play games more so than doing other things, why is that?" Gamification took all the wrong elements. Games are all about feeding intrinsic motivation with tight feedback loops. Self- determination theory and Reiss' 16 Intrinsic Motivations provide much better frameworks for understanding games. Rigby and Ryan's Glued to Games looks at SDT, and Radoff's Game On has a section of the 16 motivations.

For anyone interested in achieving the stated goals of gamification, but is concerned on how to do it right, should probably read Radoff. It's the most honest, and legitimate, treatment of the subject I have yet found, by someone who actually wears the game designer t-shirt and the businessman suit with equal comfort.

[1][http://gamification-research.org/2011/09/a-quick-buck-by- cop...](http://gamification-research.org/2011/09/a-quick-buck-by-copy-and- paste/)

<comment><USER11> Seeing as you seem to be well-read in the area - what's your opinion of the "gamification" on khanacademy?

<comment><USER10> The reason I've been reading it all is because I'm writing my thesis on it :)

I haven't spent too much time with Khan Academy, so can't say too much about it. There are two things to keep in mind:

1\. Extrinsic motivation erodes intrinsic motivation. The most obvious example is asking a kid to take out the trash. Once you pay him/her, they'll only do it for money again. While this example is silly because no-one has any intrinsic motivation to take out the trash, it gets really dicey when you add rewards to things like reading. Are they reading to develop a love of reading, or for the carrot you put at the end? What happens when the carrot goes away? The research suggests that once the carrot disappears, so does the reading. The psychology isn't completely cut-and-dried on this, as no psychology seems to be, but it's compelling to me, at least.

The problem is that some scholars, particularly Alfie Kohn, would say that things like gold stars are rewards, and thus you're eroding things that way. However, you have to balance that with providing legitimate feedback for knowing how well you're doing, as people want to feel competent. Both these come from self-determination theory (read up on it, it's neat). The trick is to make sure the reward doesn't try to control behavior, but rather provide feedback on behavior. eg. "you did x 5 times" (good) vs "you did x 5 times as required" (bad). It's a really fine line.

As far as I can see, the main goals in Khan Academy seem to be informational and are good.

2\. Badges are game systems themselves (I heard this from Nicole Lazzaro [1]), and they will result in increasing behavior of certain things for people that pay attention. They do not necessarily result in increased behavior of _value_. eg. a badge for posting 5 times is earned whether your posts are insightful, or whether they simply say "first post". And, again, these are extrinsic rewards, and once they dry up, people stop caring. There's also a strong possibility that rewards suffer from inflation, and you have to hit people with bigger and bigger rewards once they start relying on them.

The badges at Khan Academy make me wary [2]. Check out this one: "Quickly & correctly answer five questions in a row." What's the goal here? Khan Academy's goal, one would think, is to encourage students to think deeply about problems and arrive to correct solutions. It spends a lot of time saying students are able to work at their own pace, and this is a benefit, but then we have a badge which encourages quick, possibly slap-dash, behavior. It's more controlling than informational, requesting the student do something not necessarily natural to him/her in order to achieve it.

The ones given out for achieving proficiency are better; they align with what they want students to do and provide informational feedback that students have done it, increasing their motivation.

====

Now, this is not to say that all achievement systems are bad or doesn't work. Stack Overflow's seems to do really well. If it was doing poorly, we'd expect a large drop off of people when the extrinsic rewards dry up, largely at reputation 10,000, when you get moderator tools. The current data from Stack Overflow indicates only about 5% or so of users drop off once they get the tools (I can dig out references if you're interested). Upvotes and achievements provide useful feedback about your mastery of SO, so with that low attrition rate, it indicates they are doing things right.

The elephant in the room that Stack Overflow presents is that it may indicate that gamification does work in its entirety, and that all this motivation theory is invalid in this domain for some reason. This is possible, but such a strong statement would require much harder evidence than we have. Right now, it's more plausible that Stack Overflow is simply doing things well and seems to be aligning with the recommendations of the research, rather than indicating a wider problem with the applicability of this stuff.

[1] <http://www.xeodesign.com/founder.html> [2] <http://www.khanacademy.org/badges>

<comment><USER12> For me, Stack Overflow's most rewarding feedback is social recognition for having been helpful, which is largely independent of the formal rewards it offers. I bet it's the same for a lot of other people too.

<comment><USER10> Yes, pretty much. The other open question is what Stack Overflow would be if they removed the reputation system entirely.

The literature on motivation from people that subscribe to self-determination theory indicates I think they would mostly prefer the system gone. Any reward system you put in place is bad, it's just there are certain degrees of bad.

My gut tells me that Stack Overflow has benefitted from the reputation system as another explicit feedback on how well you are doing. I think the badges are largely unimportant, save for being a more fun way of saying "here's what you can do on the site" than another tedious FAQ. If the badges _were_ important, then we head down a nasty extrinsic motivation road. I think it's done better with the rep system than without.

That said, I sometimes wonder how many people are put off by the built-in competitive aspect of Stack Overflow; any writing you do is evaluated and measured against others. For competitive people that end up bumped down all the time, that seems like it would be disheartening, for social people always been graded it might be disheartening too. The winner-takes-all set up, rather than, say, a wiki answer that people are constantly tweaking, seems like it could be problematic. I know that I stopped bothering answering questions very quickly as I felt I had no mastery of the art, other people were getting the upvotes, so I felt like my answers were largely ignored.

</comment></comment></comment></comment></comment><comment><USER13> " _people were rating thousands of deals for free to get on an anonymous leaderboard in a small game universe_ "

This was something I observed on a project of my own (albeit slightly differently), and it was a double-edged sword.

On the one hand, these people would increase their activity on the app so as to get more points and rank higher. It wasn't long before we got people trying to game the system (we didn't do a great deal to prevent it, there was nothing at all clever about our implementation), or trying to spam a few of our API endpoints.

The result of this was the impression of increased popularity. Our counters would rise, and we'd look busier. Score.

On the other hand, we got a massive bump in superfluous activity and little to no insight into real user behaviour (other than suggestions we had a bunch of spammers).

This created an unusual situation where we didn't want to block the spammers, because it made us look good. But we wanted to block the spammers, because they were spamming us to get on the leaderboard (which offered financial incentives for placing highly on).

But, other than that, this sort of 'gamification' was, to someone who'd never implemented or truly observed it, a revealing insight into what lengths some people will go to just to see their name at the top of a table, or on a page as the last active user, or whatever.

I think I find my own experience has a fair bit in common with the author of this article's.

</comment><comment><USER14> At dinner the other night, our five year old and his five year old friend wouldn't eat their broccoli--until I told them that broccoli was worth 2000 points. The points had no reward attached, other than getting "points", and making sure the other guy didn't have more imaginary points.

</comment><comment><USER15> Not entirely but Is gamification mostly bullshit?</comment>


How should we regulate facial recognition? - <AUTHOR> https://www.theverge.com/2018/8/29/17792976/facial-recognition-regulation-rules <comment><USER2> Shouldn't the question be: How will lobbyists shape laws around Facial Recognition? Perhaps I am too cynical. I will just drop in one of my favorite quotes.

"There's an old saying in Tennessee — I know it's in Texas, probably in Tennessee — that says, fool me once, shame on — shame on you. Fool me — you can't get fooled again." -- George W. Bush.</comment>


Learning Programming Languages Faster - <AUTHOR> http://mdmstudios.wordpress.com/2011/02/27/learning-programming-languages-faster/

<comment> T-R > _...solving "How do you tell if a number is even or odd" with clumsy > solutions such as (x % 2). They don't [...] come to the conclusion that > (most) computers are digital machines, all you have to do is check the first > bit (x & 1)._

Not to be nitpicky, since your overall point still stands, but I'd argue that it's better to use a mathematical abstraction (modulo) than an optimization that's dependent on the way the data is stored (bitwise operations), particularly when the compiler will probably optimize it away anyway.

<comment><USER2> Not to mention that there are many small PLs that don't have bitwise operators.

</comment></comment><comment><USER3> This post isn't about learning programming languages faster. It is the author of the blog discovering the rudiments of what Alan Kay discovered decades ago regarding programming literacy.

</comment><comment><USER4> Actually, I think most programmers know the 'even/odd' trick from memorizing it, having seen it used elsewhere. It's a mathematics trick, not a programming one.

When learning to program your first language, there's a lot of memorization involved as far as algorithms go. But if you can write an algorithm in 1 language, you can basically write it in any language.

Learning languages after the first is never about algorithms. It's about learning the features of the language and the easiest ways to do things. And sometimes the syntax, depending on the languages.

</comment><comment><USER5> This is why trying to learn a programming language using Google searches and skimming reference documentation is a bad idea.

<comment><USER6> Isn't that how people who have been programming a fair amount of time do it? Or do they buy new books every time they're interested in a language?

<comment><USER5> Learning by Google: get 1,000,000 search results for every phrase you type in, no clue whether it's complete or even accurate, no clue when you've learned enough to be proficient.

Learn by book: get the information you need organized in a sensible fashion by someone who's an expert on the subject.

Learn by taking a course from an expert: all the advantages of learning by book, plus you get answers to your questions that may not be covered in the text, quizzes to reinforce what you've learned, practice exercises, etc.

<comment><USER7> Maybe its just me and because (I like to think that) I'm pretty decent at writing good software, but I find that I best learn a programming language by writing code, not by doing any of the above.

As for what I use to get to the point where I can write code? Code written by others, in snippet form, as an example, or part of a full app.

<comment><USER5> If you don't know the language to begin with, how could you possibly know what code to write? How do you know what's important? How do you know that what you're doing is correct? How do you know when you're done?

</comment></comment></comment></comment></comment><comment><USER8> The problem I have with people who claim that "all languages are the same" is that they _aren't_. You can't use that bit-shifting trick in some higher-level languages, and any lisp fan will regal you for hours with descriptions of clever solutions to problems that just can't be done in C.

</comment><comment><USER9> This is very true, I came to realize this very thing by watching the SICP lectures: the important thing is to understand programming as a problem solving method and computers as tools; the languages that carry this method and express it to computers become secondary in learning.

</comment><comment><USER10> This guy sounds like an asshole. If he is so concerned about the current state of affairs he should write some tutorials and teach some real problem solving concepts. Instead he rages about something and in the end pretends to be smarter than he actually is.</comment>


Jaws Wired Shut: The culinary adventures of a fractured jaw patient - <AUTHOR> http://jawswiredshut.tumblr.com/ <comment><USER2> oh man, that takes me back - i had a similar experience for about 4 months after a bad bicycle accident when i was a kid. the whole family sits down for a roast dinner, the whizz of a blender and my portion poured out into a modified tube dispenser - ah good time, good times. i still remember the elation when i could open my mouth enough to eat baked beans. one at a time.

</comment><comment><USER3> In one of the posts, she complains that she might not be getting enough calories, etc. It seems like the easy solution would be to drink the meals designed to be fed through enteral feeding tubes. You might need to add something for flavor, but it would probably be one of the easiest things to use in order to know that you're getting the necessary nutrition. At $1.70 for 500 calories, it's not too expensive and probably covered by insurance. e.g. [http://www.jrsmedical.com/ENTERAL- NUTRITION_FEED/NUTRITIONAL...](http://www.jrsmedical.com/ENTERAL- NUTRITION_FEED/NUTRITIONAL_SUPPLEMENTS/NES9871616230/product.aspx)

I guess you'd also have to be drinking a fair amount of Metamucil to get your fiber, too.

</comment><comment><USER4> I'm surprised that isn't my roommates tumblr page. He's a chef at one of the best resturants here, just had his jaw wired shut after a hit and run. He's been making the most incredible food for himself.

</comment><comment><USER5> After getting jumped and getting my jaw broken in the fight, I lived off KFC mashed potatoes with extra gravy, tomato soup, beer and banana milkshakes.

I ended up losing about 20 lbs off my already skinny frame even with chugging as many weight gainer shakes as I could stomach per day.

</comment><comment><USER6> I had a college roommate that went through this. After a week of Ensure and blended stuff, he gave up and mostly lived on milkshakes and beer.

</comment><comment><USER7> I was in the same situation for three months after a bar fight I lost almost 10 years ago.

Forget about haute-cuisine, all you need is plenty of soup and smoothies. You'll be amazed at how many different soups and creams you can come up with.

Broccoli, cauliflower, potato, carrot, pumpkin, chicken, etc, three times a day or more.

The blender is your best friend.</comment>


Lessons from a Life in a Chair - <AUTHOR> https://www.codeproject.com/Articles/5152541/Lessons-from-a-Life-in-a-Chair <comment><USER2> Enjoyed reading this (perhaps because I agree with it), and matching it to my 15 years of (paid) life in a chair. It stands out to me that every paragraph/point includes highlighting the situations where it make sense to forgo that point - and hints at the risks this could bring. i.e. the balancing act of software development.

What is perhaps missing is a nice general viewpoint on how to approach testing, with 50 (man-)years of experience.

</comment><comment><USER3> lovely writing style. bet i'd like this guy IRL.

one error: getting project structure right from day one. this isn't useful advice/lesson. the very sr folks know this already and will do it instinctively. the jr folks don't know what a correct project structure looks like, if there even is such a thing. it can't be gleaned from a koan.

</comment><comment><USER4> Thanks for the comments guys.</comment>


Fanon versus Canon (2015) - <AUTHOR> http://www.whitehound.co.uk/Fanfic/fanonvscanon.htm <comment><USER2> Boy was I disappointed when this was not about Frantz Fanon.

<comment><USER3> I thought it was about Canon the printer company.</comment></comment>


What Happened with Supermicro? - <AUTHOR> https://hackaday.com/2019/05/14/what-happened-with-supermicro/ <comment><USER2> Huh. so shortly after the story broke, I bought a bunch of SMCI. (It's actually the first OTC stock I've ever bought. It was easier than I thought, too... I had to call vanguard to enable OTC trading, but after that? super easy.) I sold it months later, at a pretty good profit, mostly 'cause while I think the bloomburg accusations are clearly false, there _are_ huge accounting irregularities surrounding supermicro; getting delisted is no joke, and I'm super not qualified to evaluate that sort of risk.

but, my reasoning? my reasoning was that if it was a widespread physical hack, someone would discover it fairly quickly; I mean, people were tearing these boards apart, looking for anything. There's no way they could keep that quiet, even if they were willing to disappear people.

I can tell you that within my peer group, Bloomberg has taken a pretty huge reputational hit. I mean, sure, we all still read 'money stuff' because it's "the daily show" for financial news. It's great entertainment, and moderately edifying. But, you know, it's one of those things where after a newspaper writes about something in your field, you start wondering if they are that ridiculously uninformed about the things that aren't in your field.

So, I felt really pretty safe with buying in the dip.

<comment><USER3> > _I mean, people were tearing these boards apart, looking for anything. There > 's no way they could keep that quiet, even if they were willing to disappear > people._

Without commenting on whether or not I believe the Bloomberg story, I very much doubt that "people were tearing these boards apart", doing reverse hardware-level engineering looking for an unknown. Even in the case of open- source software, with _full source code and documentation available_ , the number of people who analyze code is miniscule.

Doing the same thing with ICs and PCBs, without engineering diagrams and documentation, and needing very specialized skills and tools, must be 1000x more difficult. Maybe Supermicro and some intelligence agencies did internal studies, but they aren't going to tell you anything. Perhaps Apple and Amazon asked around in their engineering departments to see if anyone saw something. Possibly a couple security researchers took a look to see if they saw something obvious. But I don't think teams of experts were mobilized all around the world trying to pinpoint a deeply hidden hardware vulnerability.

I'd love to be proven wrong. Hacker News is read by ~50,000 engineers and programmers and related professionals a day. Admittedly my comment won't reach 50,000 people, but I'll ask anyway: Is there anyone reading here who personally analyzed a Supermicro board in any meaningful way, or knows anyone who personally did so?

<comment><USER4> I mean, it's not _that_ expensive to just take some hi-res X-ray photos of old and new boards of the same make, and compare the trace paths near each component. Maybe you can even take a visual diff of the X-ray negatives, if you can get everything lined up tightly enough.

You can parallelize this search, because the people doing it don't need to know much about _what_ they're looking for—they're just hunting for visual differences. Unless/until one of them actually finds anything different. At that point, you need better resources to figure out _what 's_ different; but at that point, all hell also breaks loose, and you'll get all the resources and help you need to do better analyses.

<comment><USER3> > _Unless /until one of them actually finds anything different ... at that > point, all hell also breaks loose_

Boards bought weeks or months apart might have lots of differences in traces and components due to engineering modifications and normal changes in suppliers. Do you really think that all hell would break loose if you showed that there were differences between a Supermicro board made in March 2018 and one made in September 2018? Other than _maybe_ Supermicro or intelligence agencies (who aren't talking), I doubt that anyone has done what you've suggested. People are busy and it's a lot of work based on an allegation and no exact place to look.

<comment><USER5> Is that really true? Granted I'm working on low volume stuff (1000's of units) in a niche B2B setting, but the times for rolling out a new rev of a board can sometimes be measured in quarters. Changing traces/components can have unforeseen effects for even fairly minor things, you can't just have a Tier1/2 CM tool up without a round of DVT. I doubt boards with the same PN change very often if at all, but I'd be curious to know if i'm wrong.

</comment></comment></comment></comment></comment><comment><USER6> Somewhat unrelated: we used to do a lot of business with supermicro. In a meeting one time I asked one of their guys why their billboards are so weird looking (anyone who's driven down 880 past their building knows what I'm taking about). They have these billboards that have weird slogans and super amateur looking graphics that look like they were made in MS paint.

So I asked the guy about them cause I thought it was funny that such a big company had such cheap looking marketing. And he said: "yeah our CEO couldn't believe how much money some agency was going to charge us to design a marketing campaign, so he just did it himself on his computer in like 2 days"

I thought that was hilarious. But good on the CEO for realizing no one really cares what a server billboard looks like, and decided to save the $2MM or whatever someone was going to charge him for design. Super funny.

<comment><USER7> The best photo I could find: [http://meritage-partners.com/site/wp- content/uploads/2016/05...](http://meritage-partners.com/site/wp- content/uploads/2016/05/www.wired_.comwp- contentuploads201605GG3A0045-0a9ed03799d59508b280c14de62cf6867b2ab505.jpg)

I love that old school Silicon Valley aesthetic.

<comment><USER8> That's funny, I had no idea they had billboards.

Are those the $1M Silicon Valley homes I hear about?

<comment><USER9> Those look like mobile/manufactured, so in the $400-600k range.

<comment><USER10> Well, around $200-300K, based on checking prices on Zillow for what sure appear to be spaces in that mobile home park (around Oakland Road in San Jose, ZIP code 95131). I don't think I've ever seen a mobile home listed for a half- million even in this area, although I've seen ones the mid-$300s. (Granted, this is still nuts, given that in Sacramento or Tampa, the other places I've idly priced homes, these would be under $100K.)

<comment><USER11> What's amazing to me is that people are willing to pay high prices for a manufactured home in Silicon Valley even though the likelihood of the mobile home park's land being sold to developers is higher than anywhere else.

This has already happened in a few places in the area. In Sunnyvale there are massive developments of million-dollar condos literally next door to mobile home parks. How much longer can those places survive?

One would think that the risk would make people less likely to buy. There aren't very many places in the area for people to move their homes to if the land they are sitting on gets sold.

<comment><USER12> Why is there such a disparity in quality of life for tech workers in SV? It seems like the housing crisis there will eventually stifle productivity (no one can afford to move there for entry level roles without giving up a ton). Are there some special dynamics that cause these types of scenarios except for the fact that a lot of people got rich quickly in one place?

<comment><USER9> Entry level roles are for fresh graduates. A converted living room is a step up from college and compatible with aggressive savings on a big-co wage. Entry level engineers willing to run smaller savings rates can even afford to live alone, though it can be a stretch.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Felt pretty bad for SuperMicro after they took the huge financial hit from the story which offered no physical proof. Glad to see they mostly recovered from it.

The story was extremely interesting, but as people dug into it, it seemed like the reporters had a bunch of conversations like this:

Security Researcher: So, in theory, you can do a lot of crazy stuff! Embed a tiny chip on a motherboard, stick it in an Amazon datacenter, sniff all sorts of things...

Reporter: Are you winking right now? I swear you are winking! So you are saying this is true? OMG. Wow, what a bombshell!

Security Researcher: I was not winking.

Reporter: Suuuuuuuuuuuuure you weren't.

<comment><USER14> The only on-the-record source said that was exactly what happened to him. He assumed at first that Bloomberg had confirmed his hypothetical scenario with another source, but it now seems that the story was hypotheticals and winks all the way down.

</comment></comment><comment><USER15> There's an ongoing PR push to paint anything from China as unsecure, cheap or untrustworthy. Now I see regular pieces on Bloomberg or popular sites like theVerge, and all those pieces have no substantial facts in them. I know reporters are hungry for stories, and they would eat up a semi-prepared file with all the "facts" easily laid out for them.

This is not new. There was something very similar in the late 80s and 90s, with everyone saying that Japan was going to take over, that they copy everything by sending teams in North America to take pictures of everything.

<comment><USER16> Japan did make giant leaps... but perhaps their own success (rising wages) and failures (Sony is a shadow of its former self) got in the way. We can't use it as a model for how it'll work out for China, with a totally different government structure that so far has been very effective and competent.

<comment><USER17> > a totally different government structure that so far has been very effective > and competent.

Authoritarian regimes can look appealing (from the outside, anyway) until circumstances change. Then they falls apart spectacularly because the commercial and governmental institutions are either absent, very weak, or are unable to adapt to the change. For example, the Soviet Union.

</comment></comment></comment><comment><USER18> What I can't fathom is why Supermicro haven't sued Bloomberg? Their stock took a massive hit and so far no one has been able to independently verify Bloomberg's claims. Seems like a court case would be fairly easy to win for Supermicro.

<comment><USER19> Could be a weird variant of insider trading. Pay some "security consultants" to call up reporters and throw your own company under a fictitious bus. Then, when the stock dives, buy.

Problem with that idea is that it wouldn't just chase investors away temporarily, it would chase customers away who are a lot harder to get back.

</comment></comment><comment><USER20> from [https://www.engadget.com/2019/05/02/super-micro-move-chip- pr...](https://www.engadget.com/2019/05/02/super-micro-move-chip-production- china-spy-claims/?yptr=yahoo)

> Server maker Super Micro is moving production out of China in a bid to allay > US customer's concerns about spying, even though independent tests have > shown no evidence of cyber espionage. The company has also announced its > plans to expand its own in-house manufacturing facilities to help mitigate > any perceived risks. A spokesperson for the company said Super Micro wants > to be more self-reliant "without depending only on those outsourcing > partners whose production previously has mostly been in China."

<comment><USER21> LOL

NSA Guy: Damn, we could infiltrate that target if we could get in implant in their boards but all their systems ship directly from china.

CIA Guy: Don't worry, I've got this.

</comment></comment><comment><USER22> For those dismissing the Bloomberg reporting, what exactly is the scenario you find more believable? Did the reporters improperly extrapolate, either through ignorance or eagerness for a story? Did they unknowingly succumb to CIA disinformation? Knowingly? Something else?

[minor edit for readability]

<comment><USER14> There's only one on-the-record source, and he only discussed hypothetical scenarios with the reporters.

The other thing we know is that every time Apple, Amazon, and Supermicro told the reporters there was no such chip on the motherboards, the reporters took this as evidence of a huge coverup.

Basically, the reporters believed what they wanted to believe, spinning conspiracy theories to explain the lack of actual evidence.

</comment></comment><comment><USER23> Ok so let's say you're a small company... can you send parts to be xrayed by an analysis lab? And the big conclusion here for me is outbound firewall rules are almost universally ignored, but should be far more common.

</comment><comment><USER24> Bloomberg lied to serve US political interests because the US is terrified that China is legitimately competitive and is playing dirty. They're doing the same thing with Huawei now.

<comment><USER25> Why do that to a company based in San Jose? Much more likely it is just bad reporting, compounded by tech ignorance. The US government is very open about its critique of Huawei, why would they secretly and illegitimately attack Supermicro, Apple, and Amazon?

<comment><USER24> > _Why do that to a company based in San Jose?_

Because - as noted in the article - the practical effect of this story is that now people are worried about supply chains involving China, not that people are worried about Supermicro in particular. And selling this story on multiple fronts, official and unofficial, seems most effective.

And allowing negative side effects for domestic companies as collateral damage to harm other countries is standard practice; see e.g. visa policy. US companies can't hire the best workers, but it's okay because it helps the US government's political goals.

</comment></comment></comment><comment><USER26> > He managed to succeed in hacking the BMC with what was essentially a single > component that could replace a resistor on the board, demonstrating with his > proof of concept that it was plausible to do what Bloomberg's reporting > claimed was being done.

Whoa.

<comment><USER27> Nobody is surprised. The accusation had enough technical details that technical people generally accepted it could work on one motherboard. The logistics of pulling it off in the real world were less believable. (even then China probably could)

<comment><USER28> Lots of people were decrying it as impossible due to pin count on the supposed implant device, which looked like a passive component.

</comment></comment></comment><comment><USER29> I'm perfectly happy to believe Chinese hardware is riddled with backdoors. What didn't make sense to me is why Bloomberg was so adamant about this claim but never provided a single shred of evidence in support of it. If someone proved this to them why don't they have a compromised board they can publish pictures of and give to a third party for examination?

<comment><USER30> Because they don't have the evidence or it's unobtainable (either too sensitive or doesn't exist).

If China really has a chip that can reprogram/modify server motherboard instructions with only 3 pins all within the size of a rice grain (according to Bloomberg's story), they've already won the tech war.

</comment></comment><comment><USER31> Is that the same Trammel Hudson of Canon "Magic Lantern" firmware fame? He's one talented hardware hacker.

</comment><comment><USER32> A good thing that came out of this was raising awareness of BMC risks. Their remote features are rarely if ever robust enough to connect to the net in good conscience.

</comment><comment><USER33> "So in conclusion, no conclusion."</comment>


5 Top reasons why "webmasters" are doing Google's dirty job - <AUTHOR> http://www.ipsojobs.com/blog/2008/02/18/5-top-reasons-why-webmasters-are-doing-googles-dirty-job/

<comment><USER2> So wait, webmasters are working for Google because... Google works for them?

<comment><USER3> Maybe this post came from Soviet Russia.</comment></comment>


Show HN: Zsh plugin for lightning-fast jumping to matches - <AUTHOR> https://github.com/seletskiy/zsh-fuzzy-search-and-edit <comment><AUTHOR> You probably seen Tag ([https://news.ycombinator.com/item?id=11891269](https://news.ycombinator.com/item?id=11891269)), recently discussed on HN.

I believe that approach is highly ineffective, because you need to find match number using eyes in the output of the ag and then type that match.

Proposed solution eliminates superfluous step, instantly opening editor as soon as match is found and selected.</comment>


Chronological list of all entries in the Stanford Encyclopedia of Philosophy - <AUTHOR> https://plato.stanford.edu/published.html <comment><AUTHOR> If you go to the bottom of the list, you can see the first entries dating back to 1995, when this resource was originally created. In a sense, these are the articles that were deemed most interesting/important to write by the early contributors. I have found this to be a useful way to approach what is otherwise somewhat overwhelming in scope and size.</comment>


Rewriting m4vgalib in Rust - <AUTHOR> http://cliffle.com/blog/m4vga-in-rust/ <comment><USER2> If the author is reading this, this might be the greatest single article I've read that expresses the benefits of Rust and how minimal the trade-offs are. Wonderfully written piece, thank you!

BTW, in your bounds checking examples, I think it can be further simplified (would need to check the output to see if it's any better), this:

       fn fill_1024(array: &mut [u8], color: u8) {
         // Perform an explicit, checked, slice of the array before
         // entering the loop.
         let array = &mut array[..1024];

         for i in 0..1024 {
             array[i] = color;
         }
      }

Could be:

      fn fill_1024(array: &mut [u8], color: u8) {
         for i in &mut array[..1024] {
             *i = color;
         }
      }

Here's the playground: [https://play.rust- lang.org/?version=stable&mode=debug&editio...](https://play.rust- lang.org/?version=stable&mode=debug&edition=2018&gist=832233ec0b3319fcec86c2330be93523)

Thanks again, this is a wonderful piece.

<comment><USER3> I'm quite terrible at assembly, but it looks like both got inlined and compiled to a memset:

        leaq 8(%rsp), %rdi
        movl $1024, %edx
        movl $255, %esi
        callq *memset@GOTPCREL(%rip)

for the 0xFF fill and

        leaq 8(%rsp), %rdi
        movl $1024, %edx
        movl $238, %esi
        callq *memset@GOTPCREL(%rip)

for the 0xEE fill.

However it turns out the original also compiles to that, because the inlining means the fixed size array is visible to the optimiser.

<comment><USER4> With lower opt-level, it does not get optimized to memset, and the succinct version actually compiles better, eliding the bounds checking in the loop as well as, for some reason, needing a smaller stack.

[https://godbolt.org/z/Wvuen5](https://godbolt.org/z/Wvuen5)

This leads me to believe the shorter approach is actually better.

<comment><USER3> > With lower opt-level

Yeah but who'd do that?

OTOH I found an "issue" with the playground: the compiler realises that since only a single array is ever created the functions can only ever be called with the proper bounds, so even with inline(never) everything gets compiled down to a memset without bounds check.

And trying to defeat that by modifying buffer to be 1023, the compiler realises the assertions are always going to crash so it creates a weird-ass "bad" version (which it calls), only implements the slicing (and its error) in the base and doesn't even bother outputting code for the simpler version.

Tricksty compiler. Using rand() and slicing so it can't know whether it's getting slices of 1023 or 1024 elements _and_ generating a random fillchar (otherwise the fillchar gets moved into the functions) finally gets it to generate the expected code… and remove one of the two functions, calling the other one instead.

So yeah, at this point I will conclude your version works just as well as the article's at getting optimised.

<comment><USER5> > > With lower opt-level

> Yeah but who'd do that?

Anyone who does `cargo run`. A project I'm working on right now is slow enough in debug builds that I usually debug it with light optimizations enabled. Lean on the optimizer and you'll find it a leaky abstraction.

<comment><USER3> > Anyone who does cargo run.

The entire discussion starts from looking at getting bounds checks optimised away, not optimising seems counter-productive to this concern?

> lean on the optimiser and you'll find it a leaky abstraction.

The abstraction here is not really leaky though, observable behaviour would be as expected t'es, it's when you look at his this behaviour is achieved that things start looking odd.

<comment><USER5> > The entire discussion starts from looking at getting bounds checks optimised > away, not optimising seems counter-productive to this concern?

I'm aware of the history of the conversation, but the point where I joined concerned which idiom performs better unoptimized, a case which is relevant because everybody cargo-runs.

> The abstraction here is not really leaky though, observable behaviour would > be as expected t'es, it's when you look at his this behaviour is achieved > that things start looking odd.

In many circumstances performance is part of observable behavior.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Author also wrote "Learn Rust the dangerous way".

> In this series, I'm trying something different. Let's take a grungy, > optimized, pointer-type-punning, SSE-using, heap-eschewing, warning- > disabling C program and look at how we could create the same program in > Rust.

[http://cliffle.com/p/dangerust/0/](http://cliffle.com/p/dangerust/0/)

<comment><USER7> I dislike nitpicking, but the following is wrong:

        "In C, bodies[i] is exactly the same as *(bodies + i) — it performs pointer arithmetic and a dereference and nothing else. In particular, it assumes that you have some reason to know that i is a valid index for the array. This is the common case in C and gets a shorthand using square brackets."

In C, bodies[i] is not _(bodies + i), with the exception being char arrays. The general rule is:

        bodies[i] = *(bodies + i * sizeof(bodies[0]))

<comment><USER8> No, it's actually defined to be the same. The pointer arithmetic in C follows your intuitive understanding of array indexing.

        #include <stdio.h>

        int main() {
            int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
            printf("%d %d\n", array[4], *(array + 4));
            return 0;
        }

prints "4 4".

</comment></comment></comment><comment><USER9> This was more interesting than the average "rewrite in Rust" blog post. Specifically I thought the part about how having compiler-enforced memory safety allows for the use of patterns that would otherwise be difficult to use safely interesting.

<comment><USER10> > compiler-enforced memory safety allows for the use of patterns that would > otherwise be difficult to use safely

I have to say, this has been amazing. For context, I'm a C++ developer who has had minimal run-ins with the borrow checker because I was already used to thinking about ownership. I refactored a large-ish Rust crate I maintain to use references for a fundamental type. I would have considered it irresponsible to do that with a C++ codebase unless absolutely required. Even if I did the upfront analysis to make sure it was safe, I'd need to re-do that exercise for every architectural change, at least. Instead with Rust, I just tried it on a whim, knowing the borrow checker had my back.

<comment><USER11> In C++ you can have some help via static analysis.

Unfortunately very few care to actually use them. [https://www.bfilipek.com/2019/12/cpp- status-2019.html?m=1#wh...](https://www.bfilipek.com/2019/12/cpp- status-2019.html?m=1#what-additional-tools-do-you-use)

As I learned since Turbo Pascal days, if it isn't part of the language, it seldom gets used.

<comment><USER12> That's quite right.

But also there is a big difference between "the static checker will probably catch errors of this kind" and "the compiler will certainly catch errors of this kind". The latter is far more liberating.

</comment></comment></comment></comment><comment><USER13> [https://www.youtube.com/watch?v=HkUUJ- rOUPg](https://www.youtube.com/watch?v=HkUUJ-rOUPg) has an output of the demo, and this is indeed very impressive for hardware that isn't supposed to output video at all...

<comment><USER14> They are unbelievably performant! I think he needs to join the Android auto team and make their car software run smooth like this!

<comment><USER15> He's actually already part of the Fuchsia team, so he very well could be working on the successor to Android.

<comment><USER14> Thats great news! I really hope they improve the android auto responsiveness

</comment></comment></comment></comment><comment><USER16> I lack the knowledge of that particular piece of software but may I see that this has been extremely interesting to read!

Also, I quite love the trend of "we rewrote our software in Rust" lately. I loved the speed of C/C++ about 15 years ago but the mounting complexity and the increasingly huge game of whack-a-mole pushed me away from them.

Now I am gradually and casually learning Rust and I absolutely love what I am seeing and experiencing.

</comment><comment><USER17> This is a persuasive article, but it is still not clear whether Rust will achieve a self-sustaining mass of developers. That is, precisely: enough that each new person who masters Rust will be able to find work writing Rust. (To be clear, it would be good if this were to happen.)

The deepest observation in the article is the remark about the cognitive load imposed by need to avoid pitfalls inherent in the programming model.

I coded K&R C in the 80s, and while I never shipped an argument-type bug, avoiding them was a continual distraction. I coded C90 from 2006 to 2012, with a similar cognitive load I was happy to leave behind, although again I never shipped a bug caused by its failings. (We had bugs, but they were specification bugs: building the wrong thing.)

Writing C++ post-14 has been an increasing pleasure. The cognitive load noted is present at times, but decreasingly so as the Standard Library and other libraries get more powerful.

I am disappointed that the author found it too hard to implement a correct program with C++, but more disappointed that he chose to blame his tools for his failure.

It has become fashionable to insist that correct programs cannot be written in this or that unfashionable language, but in fact a great many correct programs have been written in all of them, not excepting octal machine code.

What varies is how much work is needed, and how many people can do it: it is certain that, for any chosen language past or future, most people cannot or will not write a correct program in it. Rust is not different in this.

Many people coding C++, and perhaps most coding C, are not writing correct code, and have over the years written a very great deal of bad code. Will those same people succeed in learning Rust, and learning to write good code in it? It appears that the people currently adopting Rust are more skilled than is typical, so it seems hard to generalize their results to more typical programmers.

C++ and Rust embody different choices in emphasis: Rust, safety; C++, library power. Stewards of C++ have decided the best way to get substantial correct programs is to enable encapsulating semantics in well-tested, well-optimized libraries that can be used without compromising performance or system architecture. Rust has chosen to emphasize making wrong low-level code hard to express, although its ability to express libraries will only increase.

It will not be clear for a long time which will have better results. Will enough people learn Rust to write the correct low-level code needed? Will enough C++ programmers learn to use libraries that make (re-)writing dangerous low-level code unnecessary?

What is clear is that the number of C++ programmers is growing faster than ever, and interest in coding to high level C++ libraries, as measured by attendance at an ever increasing number of conferences, is exploding. Even attendance at each ISO Standard meeting is quite a lot larger than at each previous one, now reliably in hundreds. The number of new C++ programmers in any unit time is still larger than the number of new Rust programmers, by a large factor.

So, the experiment is interesting and valuable. What we can be confident about, either way, is that, for every C coder, or C++ coder writing low-level, often bad code, switching to Rust or to C++ using reliable libraries will result in more good code. It matters much less which they choose.

</comment><comment><USER18> Why did rust not go with standard c syntax

<comment><USER19> I am sorry, but if you think language syntax "beauty" is something to be considered while picking the language to develop in, then you're probably bot senior enough to make decisions which one of them to use for the project.

There's only one true answer to this: "it doesn't matter at all - I'll learn it in a week@.

<comment><USER20> The obvious counterpoint to this is brainfuck. A few examples:

        ,+[-.[-]-,+]

        >>[-]<<[->>+<<]

        >++++++++[-<+++++++++>]<.>>+>-[+]++>++>+++[>[->+++<<+++>]<<]>-----.>->+++..+++.>-.<<+[>[+>+]>>]<</comment></comment></comment><comment></comment><comment>--.>>.+++.</comment><comment>.</comment><comment>--.>+.>+.

So. Now that we've established that syntax "beauty" matters in an extreme case, can we agree that people can have different opinions about where the line is?

Can we then agree that having an opinion different than your own does not make someone an inherently less senior(???) or capable developer?

<comment><USER19> No, we won't agree here because brainfuck is clear and concise. There's no duplicity in what the operator may mean depending on the context so it most perfectly fulfils this role - is it the emojis you'd like to see there?

I have a strong opinion that you should like everything. Are you going to make a point that your genetic makeup somehow prefers tabs over spaces? :)</comment></comment>


Good SEO is Just Common Sense - <AUTHOR> http://matthewlpowers.com/seo-common-sense/

<comment><AUTHOR> can you think of any other DUH! SEO suggestions?</comment>


Resque Bus - <AUTHOR> http://tech.taskrabbit.com/blog/2013/09/28/resque-bus/

<comment><USER2> One thing I really hope with Redis's PUB/SUB is that it could support a time parameter, so we could develop a cronjob replacement, could be add/delete dynamically, and broadcast, and managable with API or Web UI.

Currently all redis-based background job implementations does not support scheduled jobs.

Redis is not only a memcache replacement, but also a good data structure server, as central hub I hope it add more time-sturcture functions.

<comment><USER3> >Currently all redis-based background job implementations does not support scheduled jobs.

That has been false for 4 years.

[https://github.com/resque/resque-scheduler](https://github.com/resque/resque- scheduler)

<comment><USER2> It's polling based approach.

[https://github.com/resque/resque- scheduler/blob/master/lib/r...](https://github.com/resque/resque- scheduler/blob/master/lib/resque/scheduler.rb#L36)

[https://github.com/resque/resque- scheduler/blob/master/lib/r...](https://github.com/resque/resque- scheduler/blob/master/lib/resque_scheduler.rb#L225)

Resque will scan for set value with key prefix like "timestamps:" or "delayed:", for every five seconds, if there's any task queued it will be fired.

There's many pros/cons with this approach, e.g. in Redis SADD, SMEMBERS are O(N) operations while in theory dedicated cron algorithm could make O(log(n)).

[https://en.wikipedia.org/wiki/Cron#Multi- user_capability](https://en.wikipedia.org/wiki/Cron#Multi-user_capability)

This is is important if you have many short lived, timestamp based events need to handle. My use case is design item cool down for a mobile/web game using server side push, with millions of users. While resque could in theory solve this problem, but it's no different from a per 5 minute crontab command.

So anyway, what I hope is a native clock in Redis handling all this.

</comment></comment></comment><comment><USER4> How do you handle exceptions and errors who would require a rework of the job?

That is interesting, I was looking for something similar to an EBS for PHP time ago, but eventually I wrote myself an ad hoc solution which uses MySQL (and row locks) plus a gearman worker and cron.

<comment><AUTHOR> Resque Bus uses resque-retry and resque-scheduler to do exponential backoff. That is, it will retry immediately, 2 seconds later, 4 seconds later, and so on up to several hours. It was a little tricky to make sure it ended back in the right application queue, but it worked. If it was put in another one, it would crash because the code to process it would not line up.

</comment></comment><comment><USER5> This is truly awesome. I have been wanting this semanticto supplement my queues for a long time and was dressing adopting an operationally more complicated tool like Kafka, not to mention all the effort that would be needed to port code.

</comment><comment><USER6> Why not use AMQP?

<comment><AUTHOR> Edited a comment from the blog comments a bit...

I tried my best to explain some of the reasons we went this way instead of using things out there. I'm not claiming to have invented anything particularly novel here because it's a simple problem to move things from one list to N lists based on keys. We found value in doing it with technology that was already part of our stack and very well known amongst the team and community.

I did an implementation in RabbitMQ at the outset. I found that the simplicity of just moving the data around, clarity of persistence, and control over subscriptions was worth the relatively short time it took to implement this gem. For example, we have found value in matching on any of the or multiple published keys (specific values, regex, blank, present, not present, etc) as part of the subscription model. I could not figure this out using the routing_key and/or topic kind of stuff in RabbitMQ.

</comment></comment><comment><USER7> Check out Hutch ([https://github.com/gocardless/hutch](https://github.com/gocardless/hutch)) - a similar system built on top of RabbitMQ

<comment><AUTHOR> That is close. Thanks for the link.

The Consumer mixin is almost the same as the Subscriber one that I came up with.

Is there a way to subscribe on more than just the topic type? For example, to anything published that has { action: 'received' }

That's something that really enables some great use cases for us.

</comment></comment><comment><USER8> Good example of resque/redis ecosystem usage. It could be great to have more info about your failover and monitoring strategies.</comment>


Which programming language would you suggest? - <AUTHOR>

I have been trying pretty much every language from Java & Python to Delphi and VB6. I don't really have a particular interest in what sort of technology, be it web or desktop, etc.<p>I can't seem to stick to one language - Can you suggest me a language and why it is used? Many thanks. <comment><USER2> Any answer to this questions is dependent on your goals and current knowledge level.

Are you trying to program something specific? If so, does that platform (iOS, Android) have a specific language you need to use or can you choose the stack (web)?

Are you trying to learn how to program? You mention you don't have any specific platform interests so are you just looking for a good starter language to learn?

Here are my opinions:

Python: A really strong language to learn as your first. Powerful, good external packages. Strict syntax means you learn how to do things the right way

Java: Used everywhere and can be applied to almost any project. Verbose but has solid performance and ability to segregate tasks and concerns.

Ruby: Rails (about the only reason I can think to really use Ruby).

Javascript: Easy to pick up but also easy to falter because the language gives you so much freedom you can easily do things wrong and not realize until much later. That being said, for the initiated, JS is having a renaissance for frontend (angular,et al) and backend stacks (node, et al).

C++/C#: The father of modern OO programming languages and his sexier grandson that took the best parts of everything before and placed a Microsoft sticker on it.

PHP: Wordpress and Facebook still run on this aging server side language.

And then from this list you have a ton of variations on each like Scala and Clojure falling out of Java. Go is out there as well. Objective C became Apple's Swift.

I think the best way to start is really C++ or Java. Learn the fundamentals, data types, algorithms, performance tradeoffs, OO design and fundamentals. Take those skills and carry them over to any other language or application you want to work on. Even the ones that aren't strictly OO like JS.

<comment><USER3> _Ruby: Rails (about the only reason I can think to really use Ruby)._

Honestly you really can and should use Ruby in any situation where you would have used Perl. Ruby is a better Perl.

</comment></comment><comment><USER3> I think rather than a language, you need a project. Decide what you want to build, pick a language that has a suitable library or framework for what you want to build, and then just start building it.

I learned programming because I wanted to make a simple web app for running some reports from a database at work, and there was no one else in my office who could code. I bought a Web Programming book and used HTML/CSS, JavaScript, PHP, and SQL. At the time that was the best way for me to learn all of those languages/tools. Later I picked up Java, Python, Ruby, Clojure, etc. from working on other types of projects. But it all started from the need to make something to solve an unmet need at work.

</comment><comment><USER4> Don't choose one language!

Why constrain yourself? One thing I always try to instil into my teams, "learn to program, do not learn a language". If you focus on becoming a good engineer/architect, you'll be able to pick up any language and use it easily.

<comment><USER5> That is good advice if you already know a couple of languages well. It is terrible advice for a beginner because they end up spending most of their time on configuration/syntax/build process etc rather than learning the fundamentals of programming (it sounds like the OP is a beginner).

</comment></comment><comment><USER6> It very much depends upon your own interest if you are looking career in web development then i will suggest you to start learning frameworks instead just language for web there are plenty of frameworks my suggestion would be

\- Rails for Ruby \- Laravel for PHP \- Angular for Front End

this is all from me according to my understanding of stuff Thanks

</comment><comment><USER7> C# seems useful in many different ways (web, mobile, desktop) and it's a very complete language, so perhaps that would be a nice start.

</comment><comment><USER8> I'd say Python, it's a good multi-platform, lower learning-curve, general purpose language that works on desktop or web.

</comment><comment><USER9> Javascript

Pretty much a lot of stuff (front and backend) can be written in JS.

<comment><AUTHOR> backend as in node.js?</comment></comment>


Ask HN: When not to use Build-Measure-Learn? - <AUTHOR>

We writing hypothesis and measures for every single story... even for fixing spelling mistakes<p>I think that when to use Build-Measure-Learn is pretty well documented* but there is very little out there telling startups when Build-Measure-Learn isn't a good tool to use<p>* This discussion is more applicable after you find Product-Market-Fit <comment><USER2> I'm thinking it might be closer to Prioritize- Build(Change)-Execute(Marketing)-Measure-Learn. Where depending on where you are in the product lifecycle you might spend more time on different tasks. Less change more executing. Adding prioritize because decisions have to be made about things to change. And execute might be a simple as showing it to friends or testing it yourself.</comment>


Ask HN: Do webcam covers really work? - <AUTHOR> There's been quite a lot of buzz on online spying which gave rise to the creation of numerous webcam covers. But can they actually protect us? And are there any "stylish" ones that don't prevent laptop from closing and are also suitable for a smartphone? Because post-its don't do it for me. <comment><USER2> You can cut down a piece of electrical tape and put that over your webcam. It's not rocket science.</comment>


DOJ threatens criminal prosecution for anti-poaching agreements - <AUTHOR> http://employeeatty.blogspot.com/2018/04/employer-agreeing-not-to-poach.html <comment><USER2> This isn't new law. But the DOJ has not punished executives for it before, just companies. It isn't explicit in this article that they now will, but I think it is implied. Biggest previous case I know of: [https://www.justice.gov/opa/pr/justice-department- requires-s...](https://www.justice.gov/opa/pr/justice-department-requires-six- high-tech-companies-stop-entering-anticompetitive-employee)

I very greatly admire the famous book "The Hard Thing About Hard Things", 2014, by Ben Horowitz _except_ that it very strongly insists that you should engage in precisely this illegal behavior. The gist is in this quote, p. 116:

"A good rule of thumb is my Reflexive Principle of Employee Raiding, which states, 'If you would be shocked and horrified if Company X hired several of your employees, then you should not hire any of theirs.' "

(And he clearly expects you to be shocked and dismayed by this.)</comment>


Conflicting Advice from Entrepreneurs on Fundraising, Vision, Hiring, etc. - <AUTHOR> http://blog.500startups.com/2010/11/29/the-entrepreneurs-guide-to-conflicting-advice/

<comment><USER2> The answer to many questions an entrepreneur has is the same answer I've heard for many poker scenarios: "It depends."

Is your MVP going to cost some time and money to build? Maybe you need some angel or VC money, if it isn't maybe you don't. Companies like YC have thrived because the answer to the funding question is more often "just a little money, especially if you throw in some decent advice and maybe some press coverage" rather than "we need 3 million dollars up front" these days, at least for a lot of web apps.

Will you need a heavy sales force? Maybe you need that "balanced team" up front, maybe you just need developers.

What makes entrepreneurship (and poker) so fascinating to me is that there isn't one answer for every question, but also why there seems to be conflicting advice.

<comment><USER3> "For every piece of trite business advice, there is an equal and opposite piece of advice"

</comment></comment><comment><USER4> The person cited to support the 'ignore the competition' argument hasn't launched his product yet... Why should I even consider advice from such a person?</comment>