The Iterate-and-Mutate Programming Anti-Pattern - <AUTHOR> https://dogsnog.blog/2020/04/23/the-iterate-and-mutate-programming-anti-pattern/ <comment><USER3> Using common functional tools can be a great way to simplify code like the example here, but as with most programming techniques, it can easily backfire in real-life scenarios.

There have been a number of times I've seen junior developers who are high on functional/immutable paradigms commit mazes of mapping, filtering, rolling and unrolling, resulting in something that's hard to understand and hard to debug.

Even in the example here, while it's obvious what the replacement code _does_, it's less clear what it's _intending_. I actually had to refer back to the original code to understand that the thing we were trying to generate were IDs of some sort.

<comment><USER4> I've seen a-million-and-one junior developers screw up for-loops, too, with overly complex code that's hard to understand and debug. That's in no way unique to FP.

I would need at least 3 more pieces of data -- the other (experience_level, programming_style, bug_rate) tuples -- in order to judge whether this constitutes a pattern which is best avoided.

<comment><USER5> > I've seen a-million-and-one junior developers screw up for-loops, too, with > overly complex code that's hard to understand and debug.

Everything can be abused. I see people doing side effects in their mapper callbacks, deeply nesting ternaries and switch and if/else statements, mutating far off objects, and just generally making code way more complex than it needs to be. Usually, this is from junior devs, but not always.

In the right hands, functional programming in JS can be very powerful. It can be easier to reason about (linear data flow, declarative code), and more performant (immutable data structures, transducers). In the wrong hands, it can be even more opaque than imperative, procedural code.

</comment></comment></comment><comment><USER6> Around the middle of last decade, a significant chunk of programmers decided the following:

\- For loops are evil

\- Lambda overhead doesn't exist

\- Nor does the overhead of looping over the same thing N times

Whilst I kind of broadly agree with the article, sometimes you just need a for loop.

<comment><USER7> Stream overheads exists, but I have never understood why.

Take the example of Java:

Why are loops faster than using streams (in most cases)? Shouldn't the optimizer/jit be able to see that most streams (even chains of map, filter and reduce etc) are equivalent to simple loops and just optimize away the overhead (in the cases where loops are (obviously) faster; non-parallell, serial computing)?

<comment><USER8> That's exactly what Series does in Common Lisp.

[0] [https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node347.html](https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node347.html)

<comment><USER7> Also Lazy data structures can achieve this.

And C++ (and rust probably) compilers have no issue doing these optimizations as well.

</comment></comment></comment></comment><comment><USER9> i thought this was going to be about mutating an array that you are iterating (which i can understand calling and anti-pattern)

but this is about looping and appending to a new (already empty) array, and he calls that an anti-pattern...

im not so sure, seems more like "i like this style, so eveything else is an anti-pattern"

</comment><comment><USER10> If you have to walk over some space that is not easily mapped over (perhaps consisting of disjoint spaces), and collect/produce items according to various criteria, it doesn't necessarily match, the "prepare a bag, and collect into it" is definitely a better approach.

He's just working in wretched language without macros.

TXR Lisp:

      (build
        (each ((i (range 1 5)))
          (let ((id `car-@i`))
            (when (car-empty carid)
              (add id)))))

_build_ starts an environment for implicit procedural list construction. The local function _add_ is visible for adding an item to the bag. The macro yields the constructed list when it terminates.

The _build_ environment provides _deque_ semantics. Items can be added on both ends, and also deleted. A depth first search can be succinctly expressed using the closely related _buildn_ :

      ;; breadth-first traversal of nested list;
      (defun bf-map (tree visit-fn)
        (buildn
          (add tree)
          (whilet ((item (del)))
            (if (atom item)
              [visit-fn item]
              (each ((el item))
                (add el))))))

This example is given in the documentation: [https://www.nongnu.org/txr/txr- manpage.html#N-01346AAA](https://www.nongnu.org/txr/txr- manpage.html#N-01346AAA)

</comment><comment><USER11> Not an anti-pattern at all, especially if more complicated stuff is going on. I'm not bending over backwards to contort every for loop into the other form. Not everything needs or benefits from map/select/etc.

</comment><comment><USER12> FWIW, better than both models shown in TFA, I _much_ prefer the declarative model:

      (loop for i from 1 to 5
            for car-id = #?"car-${i}"
            when (car-is-empty car-id)
              collect car-id)

</comment><comment><USER13> Ones is more explicit and the other is more terse but I honestly can't understand the argument that one version is more likely to cause bugs than the other. Is this a simple version for illustration and if so what do the more complicated versions look like?

<comment><USER14> The point is to not modify the object that you are looping over from within the loop. It is very easy to create bugs this way.

<comment><USER15> > not modify the object that you are looping over from within the loop

That isn't happening. The loop is over an integral range (1..5 in both examples). That integer is being hashed in the example and the hash is being used for a SIDE EFFECT. Internally, the select() is doing the exact same thing, but there is no label on the value and it's being returned out of the ostensible container function.

This is not a good example of why this pattern is bad nor of why side effects are bad.

</comment></comment></comment><comment><USER16> What if car_is_empty() function is actually a heavy call to a service that needs error handling, monitoring, logging etc. E.g. log needs to contain what car was that that we omitted. It's not that easy anymore with functional programming.

<comment><USER17> You would avoid doing this in either style but instead build a query or batch.

A good argument for the second example is readability. The first one re- invents map & filter which are well known and quickly understood.

</comment></comment><comment><USER18> Let's take a look at the arguments presented here.

> Code that mutates (changes) a variable is harder to reason about, and so > easier to get wrong.

This is true when the mutation is "off the page" \- in some other scope - <USER2> there is no mutation going on in this example that is hard to understand.

> An explicit 'for' loop is another common source of bugs.

The C-style 'for', where one manipulates a control variable which nominally denotes those elements of a set which one is concerned with, is very prone to error because of this indirection, but _both_ versions of this code do this!

> The original snippet is longer because it's doing boring, low-level work. > More, boring, code is another source of bugs.

Maybe, but it is not demonstrated here. 'Boring' is an odd adjective here: how often have you seen the source code for a complete application, let alone anything larger, that you just can't put down? real-world code is about as exciting as a balance sheet, and for good reason.

> Long code with low-level operations like for loops and pushing values onto > arrays is not expressive.

Expressiveness might be a feature of a language, but it is not something programs inherit merely by being written in a particular language. Programs are not poetry, and what we want from them is clarity. Expressiveness may help with that, but this example does not demonstrate it (maybe the author should have given us an example in APL?)

> The shorter, functional version has no variables, no mutation, and no > explicit looping. It's much shorter and easy to understand, once you've seen > this style.

More of the same, with a touch of the Emperor's New Clothes thrown in to suggest that if we do not get it, we are just not sophisticated enough to understand.

Don't get me wrong: mutation _is_ the cause of a lot of problems, and I would prefer for procedural languages to have variables const/immutable by default, but this sort of article just does not make the case. There must be several thousand articles like this written every year, all pretty much the same, with the author never asking whether their example actually makes the case they are claiming (I would guess because they are so convinced that they are right, they don't ask the question, and the existence of so many prior articles of the same sort (which they are effectively plagiarising) makes it seem obvious.)

To be fair, a decade ago I was in complete agreement with the precursors to this article.

</comment><comment><USER19> I _usually_ see this pattern as a red flag, but as with anything, there aren't _zero_ legitimate use-cases for it.

One use-case is when you lack proper iterators. In JavaScript, the map()/filter() version can be an order of magnitude slower because it's creating and copying a new array at each step. This can be a worthy trade-off for readability in certain cases, but in hot paths converting to the iterate- and-mutate version is one of the most common optimizations I go in and make later on.

Another use-case is readability (sometimes). reduce(), in particular (going from a collection of values to a single value), is notorious for being hard to follow. Of course mapping and filtering are known for usually being very intuitive. But as a baseline, a step-by-step for loop is always a certain degree of _kind of_ intuitive. YMMV, but there are cases where it's the more readable option.

It's probably still worth identifying this as an anti-pattern, so long as you qualify "anti-pattern" with the fact that tradeoffs always need to be considered in context.

<comment><USER5> > This can be a worthy trade-off for readability in certain cases, but in hot > paths...

Hot paths aren't the common case. You should always default to the more readable syntax (map/filter) and then refactor once you've determined where your bottlenecks are.

Transducers are also an option to get the map/filter syntax without losing and performance, but I think most will unfortunately shy away from those.

I do agree that reduce is over used. Reducers as a pattern is really powerful (with transducers), but no one uses them right.

<comment><USER19> > You should always default to the more readable syntax (map/filter) and then > refactor once you've determined where your bottlenecks are

That's exactly what I said:

> in hot paths converting to the iterate-and-mutate version is one of the most > common optimizations I go in and make later on

> Transducers are also an option to get the map/filter syntax without losing > and performance

All you need are iterators. Python, Rust, Haskell, most languages support performing these functions with iterators. There are even iterator libraries for JS, if you don't mind an extra dependency. But vanilla JS does not support this.

</comment></comment></comment><comment><USER20> What language runtimes support simple data parallelism for `map`/`filter` with low syntax cost?

Java lambdas do have instantiation cost but I'd wager that for the majority of my code low-cost data parallelism beats that. Also, a lot of the theory here is that the JIT could kill off the instantiation and convert to just calls. Why doesn't it do that?

Rust, perhaps?

<comment><USER21> The JVM can trivially inline virtual function calls and lambdas. However, it will add a sanity check that the function/lambda you're executing matches the inlined section and if not will use an indirect jump or call as a fallback.

<comment><USER20> So if I `List.of(1,2,3,4,5,6,7).stream().parallel().map(x => x * 2)` or the equivalent, that will inline a left-shift the same way it does it here? That's pretty cool.

</comment></comment></comment><comment><USER22> It would be incredibly helpful to have tips for solving leetcode problems in a functional way. There seems to be a category of problems that are most conveniently/efficiently solved using mutation, though I'm personally not a fan.

<comment><USER8> I've never actually looked at leetcode problems, can you give examples of ones that seem to be best done using mutation?

<comment><USER22> Off the top of my head I can only think of the one where you need to merge two linked lists in sorted order. It seems like most fall into being iterative or recursive. The iterative solutions tend to involve mutations. Doing them functionally seems like a bit of extra overhead. I'd love to be wrong about that because FP seems to be mathematically superior

</comment></comment></comment><comment><USER23> Isn't unreadable code an anti pattern?

<comment><USER24> Pipelines like this tend to come in two flavors:

1\. Long, unreadable, and undebuggable (since you can't step through them)

2\. Ones you wish could have just been a Python list comprehension:

        return [f"car-#{n}" for n in range (1,6) if car_is_empty(n)]

<comment><USER12> Your list comprehension example is incorrect: car_is_empty() takes the id string, not number.

<comment><USER24> I'm sorry, I actually didn't get what the code was trying to do. Result should have been named "empty_car_ids" to signal.

What is this "select" function, why isn't it called filter? I actually don't know how to Google this because the HTML select gets in the way.

I'd really do it in two lines, because I want to get the first half right and then the second, and be able to inspect the first half independently of the second while debugging. The pipelines don't let you do that.

        car_ids = [f"car-#{n}" for n in range (1,6)]
        empty_car_ids  = [id for id in car_ids if car_is_empty(id)]

<comment><USER23> If I were to teach a professional programming class, I'd automatically fail the most concise entries, whether they worked or not.

</comment></comment></comment></comment></comment><comment><USER15> These examples aren't in the same language. Not sure how this is a quality illustration.

<comment><USER15> Downvoted? Really? How is this article any different from:

        Why write all this async javascript? use PID ! {msg}

</comment></comment><comment><USER25> It's not an anti pattern. It's actually a zero cost abstraction. Iteration using recursion causes the stack to fill up.

You could say reduce can work but ultimately reduce needs to be implemented using recursion or a for loop. Reduce is a higher level function and therefore not part of the argument.

That being said I do know about Tail recursive optimization. Most language implementations do not support that though.</comment>


Fixing Threads in Ruby 1.8: A 2-10x performance boost - <AUTHOR> http://timetobleed.com/fixing-threads-in-ruby-18-a-2-10x-performance-boost/

<comment><USER2> Does anyone know what Ruby 1.9 does for creating threads? Does it do something similar to what the author does, or something else entirely?

<comment><USER3> Hi. Author here.

Ruby 1.9 uses libpthread which creates stacks for its threads in a similar way (mmap and a guard page).

<comment><USER2> You mean it calls pthread_create for every Ruby thread? That would mean threads are no longer green threads, since both of the widely used Pthread libraries on Linux (Linuxthreads on 2.4 versions of the kernel, and NTPL on 2.6) have a 1-to-1 mapping of POSIX threads to kernel threads.

<comment><USER3> correct. but they each take a global interpreter lock ensuring only one is executing at any given time.

</comment></comment></comment></comment><comment><USER4> wow this is a superb post. I wonder why anyone would really want to take the trouble to move to ruby 1.9 anymore...

I'd be curious to see the rest of the benchmarks.

<comment><USER5> I'm curious why someone would go through the trouble to _stay_ on 1.8?

<comment><USER6> Library compatibility. Many libraries are still not compatible with 1.9. It's good to have interim improvements for 1.8 until the ecosystem has caught up with 1.9, because 1.8 is what actually powers production systems today.

<comment><USER7> "Many libraries are still not compatible with 1.9"

It's not likely they will remain so for very long

<comment><USER4> I hope you're right. But I'd rather that the move to 1.9 be based on its merits as enhancements to the language rather than on the lack (in 1.8) of the sorts of optimizations that were made in the article.

<comment><USER7> I would gladly accept a major library breakage for proper multi-processor support in Python. A better implementation is a significant enhancement.</comment></comment></comment></comment></comment></comment>


We Don't Know How to Compute (Gerald Jay Sussman at Strangeloop 2011) - <AUTHOR> https://www.infoq.com/presentations/We-Really-Dont-Know-How-To-Compute/ <comment><AUTHOR> slides: [https://github.com/strangeloop/2011-slides/blob/master/Sussm...](https://github.com/strangeloop/2011-slides/blob/master/Sussman- WeDontKnowHowToCompute.pdf)</comment>


The secret to winning at rock, paper, scissors - <AUTHOR> http://www.telegraph.co.uk/earth/main.jhtml?xml=/earth/2007/12/19/sciscissors119.xml

<comment><USER2> Well now everyone knows that rock is the most popular (suggesting you should throw paper), meaning scissors is the best way to start, the smart money will move to throwing rock, which of course means the really smart will start with paper, so to really get the edge you throw scissors. No, wait...

Unfortunately the NS source article is paywalled, so we miss the part where they give the (probably small) improvement in odds that scissors (currently) gives.

The interesting part about RPS for me is the evolutionary/ecological/game- theoretical implications, "Some of the male lizards (call their type "rock") use force, invading the territory of fellow males to mate with females. Others ("paper") favor deception, waiting until females are unguarded and sneaking in. Still others ("scissors") work by cooperation, joining together to protect one another's females. The three types of lizard... are locked in a cyclical sort of standoff. "

[[http://www.nytimes.com/2007/12/09/magazine/09rockpaper.html?...](http://www.nytimes.com/2007/12/09/magazine/09rockpaper.html?ref=magazine)]

Also: [[http://www.sciencedaily.com/releases/2007/10/071001145022.ht...](http://www.sciencedaily.com/releases/2007/10/071001145022.htm)]

<comment><USER3> You want to check out _Game Theory Evolving_ , by Herbert Gintis, if you haven't already. It talks about exactly this kind of stuff.

<comment><USER2> Looks interesting, thanks!

</comment></comment></comment><comment><USER4> Interestingly enough, I played in the World Series of Roshambo a couple years back. In the second round I put what Gavin Smith calls the worst beat in the history of the sport on him. It was best of seven, and he got me down 3-0. On the fourth throw I balked, which is a permissible stall tactic. After that I had a feeling he was going rock, so I threw paper. The same happened for the next three throws and I moved on to the next round.

I've been told by a few people that if you look very closely, you can see me throwing paper on the ESPN coverage.

</comment><comment><USER5> I just look at my watch and take the seconds mod 3. 0:rock, 1:paper, 2:scissors. Pretty sure random play (insofar as this method is random) is best.

<comment><USER6> That's optimal only if your opponents also act randomly. (Or in the absence of any information.)

<comment><USER7> >That's optimal only if your opponents also act randomly.

By choosing the random strategy you force your opponent to do the same and you have a draw. It is optimal, in this sense.

</comment></comment></comment><comment><USER8> > Alternatively you could throw the move that would have beaten your > opponent's previous move. The logic here is that players subconsciously try > to beat their own previous move.

Wouldn't that mean you should throw the move that beats the move that would have beaten the opponents previous move?

<comment><USER9> This line of thinking happens in high level rock paper scissors. You need to predict exactly how many levels deep your opponent is going. Professional RPS players will often throw six or seven doubles in a row before someone wins.

See this 200 page guide for more info than you will ever want to read: [http://www.scribd.com/doc/924991/The-Official-Rock-Paper- Sci...](http://www.scribd.com/doc/924991/The-Official-Rock-Paper-Scissors- Strategy-Guide)

<comment><USER3> emfle is making a more straightforward point: if you anticipate your opponent will try to beat his latest move, you should not try to beat his latest move too; that would be shooting for a draw.

</comment></comment></comment><comment><USER10> "That means that your opponent is likely to choose paper, because they will expect to you to start the game with stone."

So because stone is the most likely move, paper is the most likely move? Funky logic...

<comment><USER11> I think what they meant was that most people "think" that rock is the most likely move and therefore choose paper.

</comment></comment><comment><USER12> [http://www.deepsblog.com/2007/08/29/world-war-ii-rock- paper-...](http://www.deepsblog.com/2007/08/29/world-war-ii-rock-paper- scissors/)

</comment><comment><USER13> <http://worldrps.com/>

I've personally had pretty good success with the crescendo.

</comment><comment><USER14> Man, I really hate pop science. What will those crazy scientists do next!</comment>


Ask HN: Suggested software /design/ books? - <AUTHOR> I've learnt plenty of programming languages, from C to Java to Squeak to Haskell to Lisp, but I have not made as many 'finished' programs as I'd like.
I've found, despite knowing and using plenty of programming constructs, I've not really managed complexity as well as I'd like.
The result being my programs end up being too complex to maintain, with the ultimate result being they're left to rot in some directory in my filesystem.
I've heard of 'Thinking in Java/C++' and 'The Practice of Programming'. Does HN have any recommended books on software design? <comment><USER2> Others have already listed good books. That's great, except I'd suggest spending time looking at data structures and algorithms books as well as software engineering and design books: a right data structure or algorithm can mean less code. However, I'll suggest something others only touched upon.

You already know more programming paradigms than most working programmers including those that have contributed to software you use daily. That's great and invaluable. Each of these paradigms told you something new about managing complexity (message passing in Squeak, reflection in Java, metalinguistic abstraction in Lisp). You can now apply them outside of those languages (that's what Design Patterns are about): multiple dispatch via Visitor Pattern in Java, message passing OO in Lisp[1], interfaces and implementations in C and so on.

[1] <http://okmij.org/ftp/Scheme/oop-in-fp.txt>

What you don't have is practice applying these lessons iteratively: put in effort, ship something (even with inadvertent mistakes), receive constructive criticism, find bugs and missing features, put in effort to improve design as needed to add features and fix bugs, ship an improved version and so on.

You're afraid of shipping something you're embarrassed of, or of failing to ship something that delivers on its promises. Every programmer feels that, it's perfectly natural and fine: its what motivates us to improve. Acknowledge this fear, but don't let it paralyze you.

There's a Russian proverb: eyes fear, hands do. Apply it.

</comment><comment><USER3> I might as well get all of the big names out of the way.

* Design Patterns: Elements of Reusable Object-Oriented Software

* Refactoring: Improving the Design of Existing Code

* Clean Code: A Handbook of Agile Software Craftsmanship

* Code Complete: A Practical Handbook of Software Construction

And some others:

* Working Effectively with Legacy Code

* Domain-Driven Design: Tackling Complexity in the Heart of Software

<comment><USER4> You want to manage complexity, but mention Design Patterns?

I'm not a fan of this book. I've been in too many shops where it's become gospel and the code becomes an unnavigable swamp of singletons and factory classes and who-knows-what.

[http://www.theserverside.com/tip/Evil-Design-Patterns- When-D...](http://www.theserverside.com/tip/Evil-Design-Patterns-When-Design- Patterns-Become-the-Problem)

<comment><USER5> A lot of people misunderstand that book. Design Patterns reduce complexity when used correctly. A good book to understand that is Refactoring to Patterns <http://industriallogic.com/xp/refactoring/>.

If you need your code to construct objects without knowing the type, then you need a factory (or other creation pattern). If you don't -- it's overkill. They are using a solution to a problem they don't have.

</comment></comment></comment><comment><USER6> I would agree with some of the commenters: you need experience and write more code using a single programming language of your choice.

But before you do so, here are some of my suggestions, take it with a grain of salt because it may not work for you.

1) Quit HNews.

You won't learn how to build software here. Most people rehash the same "technical" speak again and again about consumer application (web scaling, javascript, functional, anti-enterprise, etc).

2) Clear your mind

Go out. Walk in the park more. Don't think too much about programming languages. I suspect you're drawn to a distortion field of "learning programming language X will make you better at Y". Once you got that cloud away, start exploring what you wanted to do.

3) Pick a language and be good with it

Again, don't worry too much about the other programming languages unless you want to learn them for the fun of it. If your goal is to build something, stick with one.

</comment><comment><USER7> I am not sure if a book can teach you how to design large complex programs. I certainly haven't run into one that does it effectively. Perhaps a good "Design Patterns" type book would be useful on the micro-scale, but on the macro scale I can't really think of a good book.

That said it doesn't mean you can't learn this skill! I think the best place to start is _finishing_ a decently sized program. The first time I did this I was extremely unhappy with my design. However, each time it got easier and my designs started getting better.

Second, start reading some large code bases. These are often difficult to read, but they can teach some tricks and some methodology. This summer I read Tomcats source code with the aid of "How Tomcat Works: A Guide to Developing Your Own Java Servlet Container."[1] While not enjoyable (it was for my job), the experience was worth doing.

In the end, all programmers constantly struggle to make scalable, reusable, and maintainable systems. Few programmers achieve a soundly designed system but we can certainly strive to achieve perfection in our designs.

[1] by Budi Kurniawan; Paul Deck, ISBN: 978-0-9752128-0-6

</comment><comment><USER8> There is a great book called, experience, and that you cannot buy from amazon.

You feel your code is clunky because of lack of design. And lack of design comes from the fact that we usually don't know what we want to design till we design it. This is where prototypes come in handy because prototypes shed the light on problems that we didn't foresee. Rule of thumb for prototype code is to throw it away once you are done.

What I am trying to say here is that you don't need a book to learn what you are asking for, you need experience.

</comment><comment><USER9> Having to assume a timeframe, I do not think you have actually learned the languages. It usually takes years to be really good with one. That is not to say you have learned nothing (exposure to many paradigms is good), but that it takes a lot of effort, may be confusing and that you would probably be better- served by concentrating on one or two and working on actually programming first. The dual nature of languages is that they are nontrivial (at the "mastery" level) and they can profoundly affect how you program but that at the same the specific one you end up using is kind of immaterial to programming which is to say composing logic into a functioning program.

All of that is a long-winded way of introducing the suggestion that you learn to program by programming. The second-best is understanding others' programs (select well-respected, progressively larger codebases). Books, suggestions of which I hope others will provide, may give you some good ideas and thought patterns. "Software design" is a vast field with tons of completely obsolete advice, and terrible amounts of overengineering. Perhaps something like an agile workflow book, "The Pragmatic Programmer" once you can construct programs.

</comment><comment><USER10> Try reading a non-programming design book too. I'm reading 'Notes on the Synthesis of Form' by Christopher Alexander at the moment, and it has some interesting stuff on tackling problems elegantly.

I find myself taking the first solution that appears to me, which is not great. I'm trying to adopt more of a sketching approach, writing a few bits of code to see how things would interact, and working out where the complexity would bite me in a design.

</comment><comment><USER11> In his book "ANSI Common Lisp" PG gives an account of designing reusable software from the bottom up i.e. "changing the language to suit the problem. In Lisp, you don't just write your program down toward the language, you also build the language up toward your program." (as opposed to exclusively top down design) <http://www.paulgraham.com/progbot.html>

</comment><comment><USER12> Programming languages are useful tools, but their purpose is to allow designs to be expressed in an executable form and not to aid your decision process. The design pattern books (and a few others) abstract away the details of programs so that you can see the chassis and principles upon which it is built. They are sometimes helpful as you learn about systems structures. (For example, the Model-View-Control pattern is very common and useful, but it's in not always intuitive.)

Perhaps the most educational thing you can do is to choose a real project and write the user level documentation for it, and the use cases, the APIs and the unit tests: _all before you begin to code_.

Get other people to read your documentation and comment. If anyone can identify elements that are not needed, remove them. Don't worry much about implementation or optimization at this stage, worry about clarity and elegance of design.

</comment><comment><USER13> * David Hanson: C Interfaces and Implementations

* David Hanson: A Retargetable C Compiler

* John Lakos: Large-Scale C++ Software Design

* VA: Beautiful {Code, Data, Testing}

* Design pattern books maybe

* Code Complete

* Fred Brooks: The Mythical Man Month

* Fred Brooks: Design of Design

* "Best of" books like C++ Pearls or More C++ Pearls

* Michael Abrash: Grapics Programming Black Book

* Looking at John Carmack code, eg. in my github repo at <http://github.com/mtrencseni>

* In the old days they had trade magazines, which unfortunately gave way to blogs. If you're interested in C/C++, there was The C/C++ User's Journal, if you ask them they'll just send you a free DVD with all the issues, and there was the C++ Report

There are many aspects to maintaining a good project:

* knowing your tools; if you use Makefiles/svn/make/gcc/Visual Studio, buy a book on it, write some helper scripts, etc.

* knowing a comfortable subset of your language; pick 2 (at most 3) languages and be good at those, really good at one

* know the idioms of your language and framework(s)

* physical layout: putting code and resources into folders, files, including, naming, etc. in a consistent manner; eg. this is covered in Large Scale C++

* consistent naming and commenting: your code should be pleasant to look at in terms of naming, declarations, length of blocks, tabulation, etc., eg. look at John Carmack code

* DRY, KISS, etc.

* logical design, distributing code and functionality across your program: that's the tough one. Personally I don't find DPs to be generally useful; instead:

* constant refactoring: your motto wrt. refactoring must be "no fear", and you have to set aside time for this. eg. I spend weeks refactoring

* when writing a program, don't start hacking away to get something out the door, think it over, get to know your subject, flesh out its details (eg. read up on it, how have others solved it), so you can appreciate its beauties and difficulties, and if possible

* copy your predecessor's successful ideas and designs

* build yourself a nice 'lib' that you reuse and grow across your projects, but be careful not to turn it into a monster =)

* trick: you can distribute some of these among team members, eg. see the chapter on the Surgical Team in Mythical Man Month, which I subscribe to

</comment><comment><USER14> Over two decades of programming, I've read most of the books listed in this thread. Some of them contain real pearls, while others are undeservedly popular. In my opinion, each language is suited to (and perhaps designed for) certain kinds of problems. There is no 'general' software design approach. Each language has developed its own idioms and patterns, which are best learned by tracing through production code of competent programmers who are solving problems that are somewhat similar to yours. Most books actually need to be taken with a grain of salt, as they often sound more authoritative and general than they really are.

</comment><comment><USER15> I've read a lot of books and I've never found any that were good beyond the basics of a language. It's been much, much more instructive to do work on code bases that are already managing the complexity.

Find an open source project on the web that has the kind of complexity you want and start digging through the code. Better yet, start fixing bugs. It'll force you to wrap your head about how they did things. With enough of that, you'll even figure out why they did it, and that's as much as anyone else can teach you.

<comment><USER16> You've never found a book that was good beyond the basics of a language? Have you read any books at all that aren't specific to a given language? I'm a little dumbfounded that you can't come up with one that isn't language specific.

</comment></comment><comment><USER17> I'm a big fan of IEEE Software magazine. <http://www.computer.org/portal/web/software/home>

They have a lot of good authors who focus on different aspects of design and architecture.

I also enjoyed Implementation Patterns by Kent Beck. It is not so much on the architecture of the system, but focuses on the implementation of classes and routines.

</comment><comment><USER18> Try to read good code like TeX, Plan9, Arc, Lua or Tcl.

</comment><comment><USER19> _A Software Architecture Primer_</comment>


Ask HN: Review  my site -- socialreader.net - <AUTHOR> http://www.socialreader.net/

<comment><AUTHOR> I thought a lot on this application.

Can you please guide me on

1)Is this idea worth trying and to focus on? Iam relying on

        a) friendfeed API to fetch diverse content like delicious, facebook,Google Reader
        b) twitter API for twitter

2) Its sole aim is to provide interesting content for a topic (users can rely on this if he needs to keep track on a topic ),

3)What parts of the application requires an improvement?

Thanks

<comment><USER2> The only danger in relying on friendfeed is that it was bought.

Otherwise I'm curious of what algorithms or measures you used to score shares?

I am working with another developer on a semantic/social processin application. We use external trending sites for search a well as Twitter search API with JavaScript. I think value comes from helping to make new connections, or raising interesting content from friends that may have been missed.

Check VictusMedia.com if you're curious (next patch is adding some groovy features once bug smashing phase is cleared).

<comment><AUTHOR> yeah exactly iam bit worried as i am relying on friendfeed platform .As they are acquired by Facebook i donot for how much time will they support their API.

For scoring/shares i used the following simple algorithm like

1)Number of people shared this link

2)Blog popularity (i.e) If the blog is popular more shares has to happen for it to appear on appropriate topic popular page.

Any other ideas on improving the algorithm?

<comment><USER2> That sounds great as a first cut.

At VictusMedia we used Topsy as a measure of recent trending links related to categories.

</comment></comment></comment></comment><comment><USER3> I like the idea of having some transparency into google reader, its like the last place where good stats aren't readily available, but I am having a hard time understand what I can you use your site for other then, top 10 lists. Is that all its going to be? I signed up created a topic and then didn't get any content on that topic.

I use google reader all the time, its my main source of reading news. I have two years worth of shared, and stared, and noted data. Is there anyway for you to look at that and figure out what I am already reading?

Does friendfeed aggregate all of google reader, or only the google reader accounts that have been linked to friend feed accounts?

</comment><comment><USER4> From a design point of view, I would put your two columns inside a fixed with div centered in the page. On my 1920x1080 monitor, there's a huge pile of whitespace between the two. I would replace all the detail with how it works with some actual content. Nobody cares how it works. I look at it for a second and go OK, why wouldn't I just go to alltop? not trying to be critical just my first impression and why I'm not looking at it further.

</comment><comment><USER5> Is this meant to be used in lieu of a feed reader, or in complement? At some point you should work on nice error pages, by the way: <http://www.socialreader.net/blah/></comment>


How the Body's Trillions of Clocks Keep Time - <AUTHOR> https://www.quantamagazine.org/20150915-circadian-clocks/ <comment><USER2> Wow! They initially couldn't reproduce the study because the researcher and the postdoc were doing the experiment at different times in the day.

"It's now known that every day, this transcription factor's levels start at almost nothing, making it impossible to detect in the morning, and then rise 300-fold, making it easy for the postdoc to find in the middle of the day."

Now that's a tough bug

<comment><USER3> Now think about how many studies have only ever been done at a single time point and wonder how much we are missing.

</comment></comment><comment><USER4> Huh. I wonder if mutations in these genes are responsible for DSPD [https://en.wikipedia.org/wiki/Delayed_sleep_phase_disorder](https://en.wikipedia.org/wiki/Delayed_sleep_phase_disorder) and other "night owl" vs "morning lark" phenotypes.

<comment><USER5> The Genetic Basis of Sleep and Sleep Disorders is a collection of papers on the subject, which has a chapter specifically on DSPD. Short story is, there are definitely genetic mutations which influence DSPD. In fact, DSPD seems to be influenced by a larger number of genes than it's cousin disorder, Advanced Sleep Phase Disorder.

I have DSPD, so I've been going to my local university library to study from this book.

</comment></comment><comment><USER6> Working in the that lab right now. We can now follow the oscillations of these proteins inside the mouse without kills. Wawesome.

</comment><comment><USER7> How does the Human Body know when it's time for puberty ?

Some people say the hypothalamus secretes a chemical , but how does it figure it out ?

<comment><USER8> I guess you just grow up to a point, then some part does the foobar when its size reaches a critical point and baz zip nip.</comment></comment>


Incudine – Real-Time Audio/DSP Programming in Common Lisp - <AUTHOR> http://incudine.sourceforge.net/

<comment><USER2> Any plans to move away from Sourceforge?

<comment><USER3> Agreed. Is there a mirror somewhere? Anyone running uBlock probably won't be looking at this project.

<comment><AUTHOR> It's a git repo and it's GPL so I might move it over to GitHub when I get a chance.

</comment></comment></comment><comment><AUTHOR> Here's a quick (ambient) sample I did with it last night with abridged source code in the song comment:

        https://soundcloud.com/kruhft/incudine1

</comment><comment><USER4> This is pretty much what I was hoping for. I couldn't get Extempore running correctly, so I was using Taube's Grace all-in-one executable for my Windows machine. Any chance this compiles on Windows, or are too many Linux library dependencies? My ideal is this with a gsl environment like shadertoy. I know Overtone has Shadertone, but I am not a clojure fan; I prefer CL.</comment>


Oral history interview with George H. Heilmeier (1991) - <AUTHOR> https://conservancy.umn.edu/handle/11299/107352 <comment><AUTHOR> This is a fairly intimate interview with the man who developed the Heilmeier Catechism, the foundation of DARPA's proposal evaluation process. Regardless of your opinion of the DoD, you would benefit from learning about this process.</comment>


Parker Conrad Steps Down as Zenefits CEO - <AUTHOR> http://www.buzzfeed.com/williamalden/zenefits-ceo-parker-conrad-steps-down-after-compliance-failu#.isdWP3KWDR <comment><USER4> This is one of the worst management announcements I have ever read. While on the one hand, I can appreciate the forward-looking nature of making the company better in the future and an acknowledgement of some of its shortcomings (which every company has).

But the worst crime of all is announcing Conrad's resignation and providing zero credit, thanks, or goodwill towards him for being the birther of the company which wouldn't exist in the first place if not for him. Even if he had recently run into trouble setting the company straight or other problems, it's outright shameful to simply skip right over his contribution to making the company what it is and for being responsible for making it happen from day 1.

This crime wouldn't be so awful if it had come from someone who wasn't already a previous entrepreneur himself.

This is pretty sad... Parker probably would have gotten a nicer goodbye announcement had he died.

<comment><USER5> You are massively underestimating the magnitude of this screw up. You seem to be implying that this was a mistake and changes had to be made, but it's time to move on. Non-compliance can put everyone under you at risk of going to jail. "Compliance" is short for "compliance with the law" and "non-compliance" is short for "breaking the law".

I'm not exaggerating here, Sacks is making a deliberate decision not to mention Conrad and act as if he's taking this as seriously as possible. It seems that nobody was hurt by this non-compliance so I hope deeply that nobody goes to jail for this - but that is what is on the line, make no mistake.

<comment><USER6> From the earlier post about unlicensed deals in Washington state:

> Washington law is particularly severe when it comes to the unlicensed sale > of insurance. Under the law, anyone who knowingly sells, solicits, or > negotiates insurance without the proper state license can be punished with a > prison sentence of up to 10 years, as well as a civil penalty of up to > $25,000 for each violation.

[http://www.buzzfeed.com/williamalden/80-of-zenefits-deals- in...](http://www.buzzfeed.com/williamalden/80-of-zenefits-deals-in- washington-state-done-by-unlicensed#.qwk7J5MMz)

<comment><USER7> Out of interest, do Credit Default Swaps fall into that category of "insurance"?

<comment><USER8> No

</comment></comment></comment></comment></comment><comment><USER9> I read somewhere that if the new guy writes the memo, it means the old one was fired. If the old guy writes a goodbye, it means he's actually stepping down.

It seems Parker was fired, and not 'stepping down'.

<comment><USER10> Even if he resigned, he resigned under duress. This wasn't an "I'm spending time with my family and kids" resignation/firing; it was a "oh shit we're screwed, we need to mitigate the damage and throw Parker under the bus to save the company". It's very likely he was a big part of the resignation discussions.

<comment><USER11> Doesn't "throw[ing someone] under the bus" imply they're not completely at fault? This was not an honest mistake or some above-board disruption of an existing industry.

This was someone willfully, knowingly committing many (hundreds? thousands?) of felonies in the interest of making money and growing the company.

<comment><USER12> It can also mean (and, IME, usually means) that the person recieving the blame was at fault but that the people doing the blaming are also substantially at fault for the same offense, and are deflecting the blame to a particular target as a scapegoat.

</comment></comment></comment></comment><comment><USER13> I love the way Conrad gets all the blame and is thrown under the bus...

'The fact is that many of our internal processes, controls, and actions around compliance have been inadequate, and some decisions have just been plain wrong. As a result, Parker has resigned.'

Not much subtlety there. Presumably as COO he had nothing to do with 'internal processes, controls, and actions around compliance' which seems a little odd to me. So what was he doing all day then?

I also like how the company values are instantly changed...

'Effective immediately, this company's values are: ...'

Which is interesting because most companies spend ages coming up with the correct values for the company and it usually involves feedback from employees.

<comment><USER14> Does anybody think that writing down company values has any effect on anything ever? This is what people do to go through the motions of leadership when they have no clue what their employees actually do.

<comment><USER15> If the employees see the execs not just paying lip service, but living those values every day, then yes, absolutely.

<comment><USER16> Maybe I'm unlucky, but I've never seen a company where this is true, if they are > 5 people. And those were non-profits where growth wasn't really a concern.

<comment><USER17> TBH, I knew a number of folks within Google Search who took "Don't be evil" very seriously. I dunno about the top-level execs, but there were plenty of folks with mid-level VP or Director titles who cared deeply about the user experience and doing right by users.

</comment></comment></comment></comment></comment><comment><USER18> Context on some of the compliance failures: [http://www.buzzfeed.com/williamalden/80-of-zenefits-deals- in...](http://www.buzzfeed.com/williamalden/80-of-zenefits-deals-in- washington-state-done-by-unlicensed)

<comment><USER19> oh wow. Hopefully zenefits stands behind their employees, because this looks scary:

       In Washington state [...] 83% of the insurance policies sold or serviced by
       the company through August 2015 were peddled by employees without necessary
       state licenses [...]

       [...]

       Washington law is particularly severe when it comes to the unlicensed sale
       of insurance. Under the law, anyone who knowingly sells, solicits, or
       negotiates insurance without the proper state license can be punished with a
       prison sentence of up to 10 years, as well as a civil penalty of up to
       $25,000 for each violation.

[http://www.buzzfeed.com/williamalden/80-of-zenefits-deals- in...](http://www.buzzfeed.com/williamalden/80-of-zenefits-deals-in- washington-state-done-by-unlicensed)

<comment><USER20> A large part of the insurance industry does not like the Zenefits business model (free software to be your broker), so I'd bet regulators are presumably getting a lot of pressure from the insurance lobby to do something quick.

<comment><USER21> Except when "being your broker" means "some random sales dude with no training nor experience is handling your company's health insurance."

It's not particularly hard to get licensed (usually around $100, a training course of 40-100 hours (which they are large enough, they could set up inhouse), and possibly fingerprinting). Is it a hassle to get licenses in multiple states? Yeah--though most states honor other state's licenses, and just require the fee then.

In any case, this is table stakes--and if they can't get this basic aspect right (after being warned for years!) how well do you think they manage the tricky stuff? And why aren't they hiring experienced health brokers in the first place?

(The stuff about illegal rebates because they give away their software is garbage though. I'm 100% on their side for that.)

<comment><USER22> I don't disagree that it's super easy to get a license and should be done regardless – but, geez, why is that a requirement? What's so special about selling health insurance that you should go to jail for up to 10 years if you're not licensed in it?

I'm curious because there must be something obvious I'm missing.

<comment><USER23> Because this is people's health you're talking about.

Do you feel drivers should have to get a drivers licenses? I hope you don't think Uber should just hire people off the street and put them in cars without proper licenses.

A simple health example off the top of my head - you sell health insurance to someone without understanding the product because you're so keen to 'make the sale'. Meanwhile you promised the buyer it would cover that heart condition he has when in fact you have no idea that it doesn't. A couple years later he needs heart surgery and finds out the plan he's been paying into doesn't cover his condition and now he cannot work to provide for his family, nor can he get treatment to get better.

<comment><USER24> > Because this is people's health you're talking about.

That argument is about as valuable as "think of the children."

> Do you feel drivers should have to get a drivers licenses?

That's not the right analogy. The equivalent would be requiring special licenses for all car dealership employees, which is not required. Salespeople aren't themselves doing anything medical and there's no reason they should have additional requirements beyond normal salespeople. We already have laws covering both (a) fraud, (b) minimum requirements of healthcare plans.

> A simple health example off the top of my head

Existing consumer protection laws would cover this. You can't sell a product and claim it has a feature which it doesn't — that's fraud.

Nothing about health insurance should mean that salespeople should require licensing. It's pure rent-seeking. There are plenty of other dangerous things which are sold by salespeople without licenses.

<comment><USER23> Perhaps a specific Zenefits example of employee incompetence is of use here.

The lady in this example is clearly not competent, and should not be selling products that people depend on for their health.

Not sure why you feel having gone through the hoops to demonstrate competence, learn about the various products, and how to advise clients of their options is merely 'rent seeking'.

\---

"I made like $15,000 in the time I was there, just on commissions. And I never got my license," said an insurance salesperson who left Zenefits this summer. She estimated she had more than 100 conversations with different customers about insurance. "I took my test three times in a row, and I failed. They still let me work."

Without her license, she had to improvise on calls with customers.

When faced with a tricky question, "I would just google it," she said. She would tell the customer, "Hold on one second, let me email the expert, he's on the line, hold on one second, I'll get back to you." But in reality, "I would pick one of the first three links and I would just go off of that."

[http://www.buzzfeed.com/williamalden/zenefits-under- scrutiny...](http://www.buzzfeed.com/williamalden/zenefits-under-scrutiny-for- flouting-insurance-laws#.bhVQBA63G)

<comment><USER24> I'm not disputing that she's incompetent.

I deal with incompetence on a daily basis. Everyone from banks to airlines have incompetent employees, and we're not demanding that all customer support agents undergo licensing requirements. We live in a free market and the best way to deal with incompetence is the market. (Ex. I switched my bank after getting frustrated with incompetent tellers.)

Once again: the worst that an insurance salesperson can do is sell you bad insurance. They're not actually involved in medical procedures, so any harm they can do is financial. And if that harm is due to fraud (misrepresenting a product to you), you have legal remedies. Bank customer support people have just as much potential to cause financial harm, but we don't require them to be licensed.

Even more to the point: I can personally sign up for insurance directly on the internet, without talking to any licensed salesperson. If licenses salespeople are so essential to insurance, why can I buy insurance without interacting with one?

As far as I'm concerned, the only professions which should require government licensing are those where tort is insufficient to correct wrongs. (ie. someone can die: doctors, civil engineers, etc.)

<comment><USER25> > _Once again: the worst that an insurance salesperson can do is sell you bad > insurance. They 're not actually involved in medical procedures, so any harm > they can do is financial._

That's it, huh? Just financial? Only, you might get stuck holding the bag for a bunch of medical bills that aren't covered by some insurance policy you bought, so you get to spend your sick days fighting a legal battle against a company you might never be able to recover a cent from.

> _" Bank customer support people have just as much"_

Completely ignorant.

<comment><USER24> > you might get stuck holding the bag for a bunch of medical bills

What part of that is not financial?

> Completely ignorant.

Is there a licensing requirement for bank CS representatives that I'm somehow not aware of?

Ad hominem attacks are not an acceptable form of argument on HN.

<comment><USER26> As someone in the industry but not in the US, I'd say this is a case where your ignorance (and you are clearly ignorant here) is more of a hindrance than a benefit.

Providing insurance advice is the same as financial planning, mortgages, investments and any of a number of professions that are all licenced by the state. The reason for these licences is because not having them creates a wealth of misinformation that can (and historically has) resulted in massive amount of fraud and theft from consumers, because - like you - they generally aren't knowledgeable enough to be able to discern a difference of professional opinion from someone selling snake oil.

A licence is a minimum requirement to show to everyone that you have grasped the basic concepts and rules surrounding the product you are _advising others_ on. It does some other things as well, like ensure you have proper E&O insurance and stay up to date with changing legislation, but that isn't its primary purpose.

Licencing is a form of consumer protection. End of story. Arguing that it isn't necessary and/or consumers in these industries don't need protection to counter their ignorance (which is the entire reason they are buying advice in the first place) is naive almost to the point of being moronic.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> Excellent. I hope this is the first of several CEOs to lose their jobs over a lackadaisical approach to following the law. I cannot stand the attitude that several of the most "successful" startups follow that laws are just barriers to profit, and I think more CEOs (and investors) should be held accountable for blatantly ignoring these laws on their way to many billions of dollars.

Uber, Airbnb and Theranos come to mind first. As much as I want to see the daily fantasy sports put out of business, they at least had the foresight to punch a legal hole in the system to try to create a business (and not to mention they seem to be in the death throes anyhow).

It bothers me that investors seem to be so nonchalant about investing in a business that is in very questionable legal circumstances. I don't really know how to solve it, but it feels like investors do their due diligence (I hope!), but figure that the legal system is slow so there's a good chance that they can exit before any legal ramifications kick in.

<comment><USER28> I dunno - I think of it as testing the law. If they didn't try, nothing would change.

And selling insurance without a license? If it was just flouting protectionist laws I'm all in favor. So many regulations are about keeping some lobby profitable, and not protecting the public.

<comment><USER27> Is the place to test the law in the marketplace, or in court? It's fairly easy for startups to argue the case that "the government is keeping you down", especially when their very existence depends on that argument. But there is also generally a flip-side to the argument as well. In Airbnb's case, zoning laws, insurance requirements and such are all in place not to protect the interests of Marriott (at least not entirely); they exist because populations as a whole want them to exist.

</comment></comment></comment><comment><USER29> This was the guy that publicly rescinded a job offer on Quora, right? What a colossal dick he sounds like.

<comment><USER30> Indeed it was: [https://www.quora.com/What-is-the-best-way-to-start-my- caree...](https://www.quora.com/What-is-the-best-way-to-start-my-career-Uber- or-Zenefits?share=1)

A pretty big clue, of the "writing in the sky with fire" variety.

</comment></comment><comment><USER31> This must be a really rough thing to go through, but I am sure Parker is doing what is best for the company at this time (whether it was forced on him or voluntary). Zenefits is the greatest thing to happen to SMB's in years, and I am excited to see it continue to grow.

Maybe Parker will make a triumphant Jack Dorsey-like return when the time is right. Or maybe he'll disrupt another multi-billion dollar industry. Whatever it is, smart people will follow him.

* disclaimer: I am a very happy Zenefits customer

<comment><USER32> _" Zenefits is the greatest thing to happen to SMB's in years"_

Not sure about that. We tried working with Zenefits for our benefits and their agents screwed up so many times while trying to onboard our small team that we got alarmed and went with another provider (who ended up being a lot cheaper too).

<comment><USER33> Curious, who would that provider be? We are a smallish company too

<comment><USER32> Trinet.

<comment><USER34> It is my understanding that in order to get those lower price Trinet becomes the employer to your employees, therefore they can get a huge discount on group rates. However, your employees technically now work for Trinet, not your company. While perhaps ok at a small scale, as you grow, that's not exactly a great position to be in.

<comment><USER35> I have something useful!

Previous company had the following in their contract:

        TriNet Group, Inc. ("TriNet"): The Company's payroll and other human resource management services are provided through TriNet, a
        professional employer organization. This arrangement between the Company and TriNet means that TriNet will be considered your
        employer of record for payroll and human resource management purposes and your managers here at the Company will be responsible for
        directing your work, reviewing your performance, setting your schedule, and otherwise directing your work at the Company. This means
        that the Company and TriNet are co-employers, and you are technically a "co-employee". As a "co-employee" of TriNet, you will be
        required to accept the policies and procedures set forth in TriNet's Terms and Conditions Agreement ("TCA").

More or less: income came from TriNet, insurance/benifits all came from TriNet, but I technically worked for $company.

<comment><USER34> However they spin it, technically you worked for TriNet. TriNet probably has some professional services agreement with your company that pays what it costs to employ you (salary, taxes, benefits), but your W2 says TriNet.

<comment><USER24> I don't see what the actual problem is with that. Until you reach scale (hundreds of employees), there's not a problem.

<comment><USER36> Yeah, and at that point you probably won't be using TriNet anymore.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER37> It kind of sounds like Zenefits is looking at some heavy (multi million dollar) fines, and they're trying to drive the narrative before fines and regulatory actions are announced.

</comment><comment><USER38> Super conspiracy theory but I wonder if Sacks saw this coming from a mile out. From Paypal he has heaps of experience with what puts you on a regulators radar. Maybe he saw a naive CEO who would land in trouble soon enough.

Zenefits is a weird mix of wall street sales types and ex Yammer employees, the former might be out the door pretty soon.

<comment><USER20> Didn't Sacks make a ton of money from the Yammer deal though? I'm surprised he even took another job; thought he'd go the mostly full time angel/VC route. A COO for any company is not a cakewalk.

<comment><USER39> And Elon made a ton of money from PayPal, yet he founded and is running two companies that are a lot more impressive than an enterprise SaaS provider. Not everyone is content to sit on the sidelines after they've hit it big.

</comment></comment></comment><comment><USER40> Anyone notice the top 3 posts on HN are about CXOs stepping down? [http://imgur.com/TUKnHpU](http://imgur.com/TUKnHpU)

</comment><comment><AUTHOR> I predict that Parker will join YC as a part-time partner. This may shed him in a negative light, but it does not erase the things he has accomplished in the last few years. Zenefits became a billion-dollar company that scaled its sales efforts at a record-breaking pace. Startups can learn a lot from him about building a sales machine.

<comment><USER41> That sounds like even more of a mistake than inviting the guy who sold Loopt for $43M to some random prepaid credit card company after raising $39M of investment money to be a part-time partner at YC.

<comment><USER42> What a crap comment. Do you also spit on the walls of the houses of your friends when you visit?

Knowing when to sell and when to hold is a very tricky decision, plenty of people don't know what call to make and end up riding their companies all the way into the abyss. If you've done considerably better then maybe it's time you told the story, if you didn't admit you're jealous and get over it.

<comment><USER41> It's funny that pointing out that someone made 10% RoI is spitting on walls. It's not a fantastic return, but it's certainly not a failure.

But that goes to the original problem: YC participation is advertised as a way to make money beyond your wildest dreams, but the only people who can actually _expect_ to do that are investors. So many good and competent founders fail that even a modest success is enough qualification to lead YC; at the same time, the fact that so many good and competent founders fail is so taboo that pointing out that YC's president was _only_ modestly successful looks like an insult.

And, to bring this back on topic, it is more-or-less this taboo that compels companies like Zenefits to prioritize stupendous growth over complying with the law. They could have grown cautiously and still made well over a 10% RoI, but they wanted to gamble harder.

<comment><USER17> I know plenty of YC founders (and even an early employee or two) that have ended up financially independent because of it.

Investing in, founding, and leading a company are three different skillsets. The best founding CEOs usually are not venture capitalists; you don't see Larry Page, Elon Musk, or Steve Jobs wishing they were investors. Similarly, it's possible to be a good _founder_ and terrible _leader_ (eg. Parker Conrad, Pierre Omidyar), or a good _leader_ but incapable of founding something (Eric Schmidt, Sheryl Sandberg) or a mediocre founder but excellent investor (Sam Altman, Paul Graham, Eugene Kleiner, Don Valentine).

</comment></comment></comment></comment></comment><comment><USER43> A classic coup d'état. This is the danger of taking VC and hiring a COO that clearly wants to be CEO.

1\. Wait for a misstep by the current leader.

2\. Play it up as a huge problem that could threaten the company.

3\. Suggest that maybe someone else could do better.

<comment><USER44> > 2\. Play it up as a huge problem that could threaten the company.

It absolutely was a HUGE problem. Even if he was set up, Conrad created a toxic culture that had to change.

Parker never seemed to understand that he could not flout laws & regulations like Uber; Uber has leverage because consumers love their product, and is able to put pressure on the incumbents and regulators; in contrast, NOBODY would stand up to defend Zenefits, and regulators will shut them down unless they clean up their act asap.

Edit: fixed typo (thanks @gingerrr)

<comment><USER45> as a counter point Zenefits already won against the state of Utah when they tried banning them so yes people have already stood up to defend them

[http://fortune.com/2015/04/13/zenefits-utah-ban- insurance/](http://fortune.com/2015/04/13/zenefits-utah-ban-insurance/)

<comment><USER46> FYI: The laws of the State of Utah and those of Washington are not interchangeable at your convenience.

</comment></comment></comment></comment><comment><USER47> "Effective immediately, this company's values are: #1 Operate with integrity. #2 Put the customer first. #3 Make this a great place to work for employees."

Ummm… what were the values before the switch?!?

<comment><USER48> #2 should be #1

<comment><USER49> er no, #1 should be #1

<comment><USER50> It's a joke on saying "Put the customer first" as the second item in your priorities. "Put the customer after integrity, but before all that other stuff" doesn't roll off the tongue as well.

</comment></comment></comment></comment><comment><USER51> That is a well written email announcing the change. I liked the emphasis on vision, culture and focus.

<comment><USER52> Which part is good? Sounds like the usual legalese. Rough times, change of culture, some tough decisions. Usual fare.

<comment><USER44> Do you work in a larger company? This is crystal clear (if you know what to look for) vs. the usual generic communication that happens in larger companies around these types of changes...

<comment><USER33> This was rather clumsily written. Even if your company messed up, shoving your CEO with a boot up his ass is bad for morale. The reason why most communiques are generic is because there's very little upside to being abrupt publicly.

<comment><USER44> <<The reason why most communiques are generic is because there's very little upside to being abrupt publicly.>>

You are quite wrong, if anything, employees appreciate openness and decisiveness, vs. sweeping changes under the rug with generic language. There is actually a ton of upside to creating honest communication, but it's much harder than hiding behind empty phrases, which then builds a culture of speculation (of what "really happened"), politics, and distrust.

I have no idea what really happened behind the scenes and why exactly the new CEO used this language, but I can assure you that any email from David Sacks will not be clumsy, but very deliberate and written to achieve a specific purpose. (There is some speculation on earlier threads around of why it might have been written this way).

<comment><USER33> Not talking about employees. You can release whatever message you want internally. It's the external message where upside downside needs to be a consideration. By which I mean whatever you say in email can be printed and quoted. Disseminate the message not email

<comment><USER44> I both appreciate and agree with your point, but in this case I think the issues was that their new CEO had to assume that, given the high visibility of the company, whatever message he was going to send out to his internal team was also going to get leaked to the press.

If you are in that type of situation, you have to chose between your employees and external parties, and looks like he decided that creating a trusted relationships with his employees was more important...

<comment><USER33> Maybe that was how he was thinking about it. Hope it works out for them. Cheers.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER53> Trying to operate an Uber/AirBnB style ignoring of regulations can work when you're dealing with hundreds of small time, underfunded municipal governments. But when your regulators are federal and state level you have to straighten the ship real quick if the eye of Sauron looks your way.

<comment><USER54> True, but that's taking a very "realpolitik" attitude toward it.

What about the fact that breaking the law is (often) morally wrong in its own right? Even if you disagree with the law, I don't want to live in a place where laws are toothless and optionally followed; the side effects of such lawlessness would be horrible, and huge.

This whole thing really got me thinking about how we in SV/SF think about laws and their enforcement. It might sound a little mean, but I almost hope they make an example out of Parker Conrad and Zenefits to nudge the pendulum of VC- funded companies a bit back toward respect for laws and compliance, rather than this "fuck it, they won't enforce it and if they do, we'll just have our well-connected VC partner make an off-record call to the governor/senator/regulator and magic it away" that seems so common today. All in the name of GROWTH.

<comment><USER55> Laws need to evolve with society. Often, that means that they are challenged due to a edge case in a changing society.

</comment></comment></comment><comment><USER56> _" Our culture and tone have been inappropriate for a highly regulated company"_

That might not be a bad thing. It could be precisely because it was inappropriate that Zenefits got ahead.

<comment><USER12> > That might not be a bad thing. It could be precisely because it was > inappropriate that Zenefits got ahead.

...for now. But if the end result is massive fines, plus a bunch of their sales staff (and maybe their superiors) getting thrown in prison under Washington's criminal laws relating to selling insurance without a brokers license, plus ruining the company's relationship with customers and with the insurers whose products it sells (and possible breach-of-contract actions from those insurers).

Well, then, getting ahead for a little while before the whole thing caught up to them isn't going to seem like a big advantage.

</comment></comment><comment><USER6> > Our culture and tone have been inappropriate for a highly regulated company.

> Effective immediately, this company's values are...

Translation: This will no longer be an enjoyable place to work.

<comment><USER15> Making "Move fast and break things" be an axiom of your development process is not a prerequisite for having fun at the office.

</comment></comment><comment><USER57> What's with these new values?

Effective immediately, this company's values are:

#1 Operate with integrity.

#2 Put the customer first.

#3 Make this a great place to work for employees.

Did these not exist prior to Conrad stepping down? If they did, and this still happened, they're clearly bad values to hold.

For one, they're unspecific and don't have a clear opposite. No one is going to take the opposite on these, meaning they can't really be values.

No one will proudly state that

#1 Don't operate with integrity.

#2 Put ourselves first.

#3 Make Zenefits at least a mediocre place to work.

Are good values, so the values the new CEO espoused aren't really actionable or value-able in any way.

Anyone have a different take that I might be missing?

<comment><USER58> I agree that they're not particularly specific, but I don't think that a value has to be controversial - ie that its opposite could also be a reasonable value - in order to be useful. By selecting certain things as key values and excluding others, and possibly by ordering the values by priority, you still give some direction.

<comment><USER57> Maybe not have a complete opposite that could also be valid, but at least state some sort of preference or be able to be used to make a real decision.

He goes on to say that he wants to push decision making ability down in the company, but if you're looking at those 3 values, it seems hard to make clear decisions based on them.

</comment></comment></comment><comment><USER59> What happens to founder equity in high-profile cases like this? If he's given up his position at the company as well as on the board, did he keep much of his equity? This has to be a difficult time for Parker.

<comment><USER60> They keep it. He is a shareholder like any other.

<comment><USER60> to the downvoters: is the deposed CEO not a common shareholder like any other common shareholder?

</comment></comment></comment><comment><USER61> YC, you might want to slow down your own growth. Your unicorns aren't fairing well. Gotta keep your game tight.

-says someone who doesn't know much but can spot obvious trends.

<comment><USER41> Ohhhh I would be fascinated to see a RICO case against YC for every startup they've funded that's broken laws. That seems entirely in the spirit of RICO, the more I think about it: it's specifically about organizations that make money off of other people breaking the law at their direction, and who might otherwise avoid liability because they themselves didn't break the law.

<comment><USER62> RICO cases are limited to a small number of serious crimes, like kidnapping, extortion, arson, drug trafficking, and so on. They don't cover breaking insurance regulations.

[https://en.wikipedia.org/wiki/Racketeer_Influenced_and_Corru...](https://en.wikipedia.org/wiki/Racketeer_Influenced_and_Corrupt_Organizations_Act#RICO_predicate_offenses)

<comment><USER63> _" kidnapping, extortion, arson, drug trafficking, ..."_

Interestingly, "criminal copyright infringement" also somehow got on the list of RICO predicate offenses. Guess someone had a good lobbyist...

<comment><USER17> Also, apparently holding Magic: The Gathering tournaments where ante is allowed falls under RICO. Sponsoring underage gambling. I recall that being used as the reason why none of the major tournaments used the ante rule - <USER2> were all afraid of being prosecuted as racketeers.

</comment></comment></comment></comment></comment><comment><AUTHOR> Confirmed by multiple sources:

USA Today reporter > [https://twitter.com/jguynn/status/696847880921833473](https://twitter.com/jguynn/status/696847880921833473)

Fortune reporter > [https://twitter.com/eringriffith/status/696847400456097792](https://twitter.com/eringriffith/status/696847400456097792)

</comment><comment><USER64> Move fast and break things (laws included).

</comment><comment><USER65> The wording around values is odd. What were the previous values if one of the new values has to do with integrity?

<comment><USER41> It says that two paragraphs earlier:

> _Zenefits' company values were forged at a time when the emphasis was on > discovering a new market, and the company did that brilliantly. Now we have > moved into a new phase of delivering at scale and needing to win the trust > of customers, regulators, and other stakeholders._

i.e., they valued growth over integrity and following the letter of the law. That evidently works for some startups some of the time, but this seems like a bad industry to try that approach in.

</comment></comment><comment><USER66> Why do those laws exist in this case? What's the danger that they protect against?

<comment><USER18> Scams are rather common in the insurance industry. The consequences of a bad insurance policy are why regulation is important.

</comment></comment><comment><USER67> That internal audit must be a doozy.

</comment><comment><USER68> Poor zenpayroll had to change their name to gusto. Now it looks like a good move. Distance yourself from the unicorn.

</comment><comment><USER69> Looking forward to hearing Parker's side of the story one day. The one thing you can't deny is he built an amazing business, absolutely agree that it needs to manage the regulatory hurdles, but that wouldn't even have been an issue if he hadn't gotten them this far.

Probably not the last we'll hear from him.

</comment><comment><USER5> Zenefits is lucky to have David Sacks for CEO.

But this is an important reminder to Fintech companies: compliance is your life.

</comment><comment><USER70> This is kind of like Uber firing Travis with a "we operate in a highly regulatory space. Compliance is our oxygen and so Travis, who has constantly flouted regulations, is gone"

</comment><comment><USER71> _Our culture and tone have been inappropriate for a highly regulated company._

This might not be a bad thing. It could be precisely because it was inappropriate that Zenefits got where it is today.

</comment><comment><USER72> Growth of Zenefits is a dream for many entrepreneurs. Instead of working with legacy compliance related issues, Parker would have chosen to deal with them latter, to focus on the growth. Parker would have driven by excitement of hyper growth. If he had chosen to work with compliance related stuff, not sure they would have gotten this far, this quickly. Is the compliance issue a mistake (or) Is it a crime?. If compliance issue is a crime, did he even aware of that?.

<comment><USER64> It is unquestionably a crime. One could argue that it was worth it (I doubt it) but there's absolutely no question that what happened was criminal.

</comment></comment><comment><USER73> Conrad stepped down from the board as well. Here's hoping new leadership can bring the company in compliance and turn the trajectory of the company around.

<comment><USER6> He was removed involuntarily.

> Zenefits also removed Conrad from its board of directors, while adding three > prominent investors, according to an announcement on Monday.

</comment></comment><comment><USER74> I think the regulations for selling insurance are reasonable and necessary, but it looks like both Zenefits and Conrad will have benefited more from flouting them and getting caught than they would have if they followed the law from the beginning.

It doesn't bode well for regulation and our society in general when flouting the law has a higher return than following the law, _even if you get caught_.

<comment><USER11> I get what you're saying and I agree with you, but what's the alternative? It's hard to justify a $5,000,000 fine or a multi-decade prison sentence for selling someone insurance without a license.

<comment><USER75> The fine is pretty easy to justify and is all that can be assessed against Zenefits the corporation. And since it's well funded, multi-million dollars would be warranted so the fine is substantial enough.

It would be a lot more suprising to see them go after employees or look at prison unless there were agravating factors like actually defrauding the buyers with regards to the nature of the coverage.

</comment></comment></comment><comment> cat-dev-null First, Zenifits business model was novel for a double-ended marketplace... get suppliers (insurance companies, etc.) to sustain the business.

How do Zenifits compare to Paychex (the old standby of payroll processing) and Workly? What are folks using right now to expedite/automate employee provisioning (& termination) around HR things?

</comment><comment><USER76> Theranos should take this as a clear sign of what they need to prepare for if they can't clearly explain the shenanigans they've been accused of, some of which are similarly brazen flaunts of well-established agency/industry regulation.

</comment><comment><USER77> From the Zenefits homepage: "Payroll, benefits, time, _compliance_ , and more"

And the article: "Parker Conrad has resigned as CEO of Zenefits, following a number of regulatory _compliance_ failures"

The irony..

</comment><comment><USER78> What's wrong with 2016? Too many resigns.

</comment><comment><USER45> no surprise they jumped on the first chance they could to get rid of Conrad

</comment><comment><USER79> We changed the url from [https://twitter.com/williamalden/status/696847841294024704](https://twitter.com/williamalden/status/696847841294024704) to this one, which gives more info. We can change it again if anyone suggests a more substantive URL.

<comment><USER80> Honestly, the Buzzfeed story has more information in it than the Venturebeat article linked, which basically just has the announcement text:

[http://www.buzzfeed.com/williamalden/80-of-zenefits-deals- in...](http://www.buzzfeed.com/williamalden/80-of-zenefits-deals-in- washington-state-done-by-unlicensed#.fw6y2R1Z)

<comment><USER79> It has more information on the leadup for sure, but given the current announcement, the text of Sacks' email seems even more relevant. I wouldn't normally say that about a corporate communication but it is an unusual one.

Eventually we'll have some system to aggregate related urls that isn't so all- or-nothing.

<comment><USER81> They just posted their own story, with a copy of the email: [http://www.buzzfeed.com/williamalden/zenefits-ceo-parker- con...](http://www.buzzfeed.com/williamalden/zenefits-ceo-parker-conrad-steps- down-after-compliance-failu)

<comment><USER79> Ok, we've changed the URL to that from [http://venturebeat.com/2016/02/08/zenefits-ceo-parker- conrad...](http://venturebeat.com/2016/02/08/zenefits-ceo-parker-conrad- resigns-coo-david-sacks-takes-over/). Thanks!

</comment></comment></comment></comment></comment><comment><USER24> Kindly review the HN guidelines: [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

If you would like to engage in a polite debate over the extent to which it's appropriate for governments to regulate the economy for consumer protection, I'm happy to do so.

I will not, however, engage with ad hominem insults.

<comment><USER26> There's nothing ad hominem in pointing out that your argument is based on ignorance because you lack specific knowledge of this area of expertise. Sorry, but pretending you are on some equal footing with people much more experience in a particular industry is the only logical fallacy here - <USER3> Balance.

If I argued - as a non-doctor - that anyone should be able provide medical advice to people without being an MD, or that Joe Shmo should be able to provide legal advice without being admitted to the Bar, you'd rightly call that attitude ignorant and naive. The same holds true with your argument. It simply comes from a place too far removed from the topic at hand to be considered even remotely viable.

Don't take it as an attack on you, it isn't. Do take it to mean that you are clearly out of your element, and that with a little bit of research on your part, you'll understand why this is so.

<comment><USER79> What you posted was against the HN guidelines not because it was an ad hominem but because it called names ("you are clearly ignorant", "naive almost to the point of being moronic"). It's particularly uncivil to say things like that and then add "don't take it as an attack on you", as if you hadn't added to the problem.

You clearly have experience and knowledge. There was no need to make this personal. If someone is ignorant, show them that by responding factually and stop there. Don't rub their face in it.

<comment><USER26> 1\. You are ignorant on this topic. This doesn't mean the same thing as "You are stupid", it means precisely: "You lack key knowledge about this particular topic." That's how I used it.

2\. I provided a few paragraphs telling why these conditions exist, and why arguing against them is not something someone educated in the topic would consider even attempting.

3\. When you continue - over the course of several comments - to progress with your argument from a position of clear ignorance, it does indeed require increased naivety to the point of absurdity.

If you are going to take a stance on a subject you know little about, and then continue to assert that opinion, you can't get upset when people use more and more direct means to communicate with you. Don't assert a position that is based from a position of ignorance; seek to learn instead.

Also: I'd just like to point out the ironic nature of asserting meaningless comments are against 'guidelines' while at the same time suggesting guidelines are irrelevant for a much more important human concern.

<comment><USER79> "You lack key knowledge" is already an order of magnitude less name-calley than "You are ignorant", because it doesn't take the form "You are X". But why diminish the other person at all? Build them up by increasing their knowledge.

The distinction here is simple. Factual comments about insurance and licensing: great for HN. Comments about people's knowledge levels and getting tangled in personal bickering: bad for HN.

</comment></comment></comment></comment></comment><comment><USER82> "The Zenefits spreadsheet covers 132 unique insurance policies sold or serviced from November 2013 through August 2015."

Is that really all they sold? Utah had pretty dismissal numbers as well. How did they get to multiple billion valuation?

<comment><USER83> I assumed that meant "products", as in 132 unique insurance products, rather than 132 belly buttons insured (phraseology in the health insurance industry).

<comment><USER21> No, they probably mean group health plans (companies covered) sold. Probably average a dozen lives per policy maybe.

They "signed up" 10,000 companies as of a year ago[1]...but I'm not sure how many of those they sold health insurance to!

[1] [http://www.siliconbeat.com/2015/01/15/zenefits-releases- grow...](http://www.siliconbeat.com/2015/01/15/zenefits-releases-growth- numbers-headed-for-100m-in-revenue/)

</comment></comment></comment><comment><USER84> Good riddance. Zenefits is the most bug-ridden piece of software I've ever used. It's completely unusable at times.

</comment><comment><USER85> I see this as a case of a brilliant entrepreneur (Parker) tackling the world of health care and winning. I don't view these horrible crimes he's accused of as anything other than tatics from the status-quo and his competition. It wasn't possible to get from point A to point N (where Parker took the company) without breaking these "rules" but he didn't actually break any rules because this is all new territory. Any new business "distrupting" an existing one will anger the people losing money. And they will use their lawyers and try and fight for every last dollar by claiming this "distruption" isn't legal for reason x,y,or z. David is now taking the company from point N to point Z because Parker is tainted. That's fine. I think this was always the plan. And as a shareholder I think Parker is very happy David is now CEO moving to step Z.

<comment><USER86> Winning? The company is a giant mess, and the shit has not even hit the fan yet, this is just the start.

Parker didn't accomplish anything positive as CEO of Zenefits, ever. There's a ton of companies using Zenefits services who aren't happy. They haven't left because switching is a major pain in the ass. You think it's by accident that Parker chose to disrupt three of the industries with the highest customer retention rates. This board knows damn well that it's not because the (industry) solutions are awesome, it is because switching is painful and costly. Zenefits overall customer satisfaction sucks, as does feedback from employees and overall morale, check GlassDoor.

Parker found a way to piss off not just one highly regulated industry (health insurance) but three. He told a "journalist" from BI that the CEO of ADP "threatened him like Dirty Harry" in true SF/SV tabloid fashion. You think Warren Buffet ever did something like that?

From day one, on stage at TC Disrupt, he acted like a cocky spoiled brat, which is precisely what he is.

He managed to create enemies with many of the companies Zenefits originally did business with, and then relished in it when it made headlines, ala "project nutshot".

Zenefits is a company that is not only on track to lose hundreds of millions of its investors money, but it literally put its employees freedom at stake. People could be facing jail time because of how blatantly Zenefits ignored the law. More than 80% of sales in WA were by unlicensed reps. Tip of the iceberg.

Had Zenefits reached a $60M run rate without breaking the law, without requiring over $500M in VC, without requiring a near $100M burn rate, without Parker being abusive and unprofessional, well I'd have no choice but to congratulate Parker on his accomplishments.

All this guy did was burn through a ton of money, make a fool out of his investors and mismanage this company to the point where the massive fundraising at a $4.5B valuation, and all but inevitable write down, have sent every employees shares into a watery grave.

Learn from this. Don't try to romanticize the Zenefits story. If you look beyond the PR machine, you'll find a company that has done almost everything wrong under the helm of someone who was more interested in accomplishing something for himself, "proving people wrong", because of the self-described chip on his shoulder.

Just be glad you're not David Sacks, because unwinding this mess is going to be nearly impossible, and investors are going to be brutal. I wouldn't want to have to answer to Jordan Catalano.

<comment><USER85> And Travis at Uber? Also "proving people wrong", because of a chip on his shoulder? Did Uber flaunt the law? Or did they end up changing the laws because people like Uber so much? I'm pretty sure this is how every big disruption goes. It's messy. People get super pissed. And it comes down to political views on were the regluations even needed in the first place.

<comment><USER86> By messy, do you mean like creating a working environment that encourages people to commit felonies in order to accelerate sales? Because usually employees get screwed out of stock in hyper-growth start-ups that raise hundreds of millions at unsustainable valuations, not go to jail. No one typically has to worry about breaking the law in order to meet absurd sales goals. You think maybe just maybe Parker kind of painted the company into a corner by telling investors like Fidelity and TPG that Zenefits could become a $100 Billion market cap company and that they're leaving money on the table. Zenefits fall from grace will become the cautionary tale from this technology boom. Disrupt an industry all you want, just don't put your employees freedom, or your own, at risk.

Also, invoking TK is pointless and shows that you can't distinguish apples from oranges.</comment></comment></comment></comment>


Canonical to take 75% of Banshee Amazon Sales - <AUTHOR> http://gburt.blogspot.com/2011/02/canonicals-new-plan-for-banshee.html <comment><USER2> I don't have a problem with this. They're lucky that Canonical is giving them anything. As with anything else in free software, an individual is free to get in there and change the Amazon affiliate code and redistribute the modified software, and there's no obligation to give any part of that revenue to any other party, including the original author of the software.

Canonical would be losing a significant stream of revenue by switching to Banshee as the default music player in Ubuntu without doing something to recuperate the revenue they've heretofore derived from their stores in Rhythmbox. Banshee is going to end up making more out of this anyway as Ubuntu's new default player, and if you don't like the cash going to Canonical, you can download a build elsewhere or patch the source yourself so that the original affiliate code is restored.

People have to have money to function, even in free software.

<comment><USER3> I agree Canonical's behavior doesn't seem out-of-line.

The difference between this and Apple's App store policy is that anyone create an alternative and anyone can load an alternative once they get distribution.

The comment section certainly gave me pause - it seems someone has a lot of bad feelings towards Ubuntu.

As I understand, Red Hat is larger, profitable business that has paid for a lot Gnome development (Wikipedia say Red Hat: 87.25 million net income, 3,200 employees, Canonical: $30 million net income, 350+ employees, pretty exactly one _tenth_ the side of Red Hat).

Great but somehow the integration effort put into Canonical's distribution creates a considerably more usable system that has a good deal more traction. If, hypothetically, Canonical is "leaching", then it should really, really easy to put together a superior distribution to Ubuntu. Somehow no one has done that.

<comment><USER4> The packaging for most mono based packages are community driven. I bet that they didn't pay a dime to get a readily packaged software. There's no integration effort (except for maybe their 'branding' efforts, see their tries to differentiate in some places of the desktop, e.g. the notification area). None at all.

Comparing Apple (asking for a share of the profit! people make on their platform) with a company picking a product that donates to a non-profit foundation and changing the rules (for that product, btw. We're talking about a single decision, for a single product. No 'It's always been part of the terms of use' discussion, no 'It's the same for everyone' treatment) is kinda sad.

There's no AppStore(tm) here. Apple's not even remotely connected to this change.

</comment></comment></comment><comment><USER5> Canonical should leave the Amazon store alone, and give users the freedom to decide whether to buy their music using UbuntuOne (donating to Canonical) or Amazon (Donating to Gnome). Even better, under System/Preferences make the donation preferences configurable (I'd like to see a donation control panel allowing you to allocate a donation to different FOSS projects based upon your usage of them, or according to some user defined ratios).

<comment><USER6> I already have an Amazon account. Why would I go out of my way to get a different account just so a few pennies of my purchase can go somewhere different?

I don't think the "leave it to the users" option really works here. A lot of people will choose the least-work path.

</comment></comment><comment><USER7> Canonical don't get 75% of the sale, they get 75% of the affiliate bonus. I don't know how much it is, but I guess its low (anyone know?)

<comment><USER8> Looks like 10%[1], so Canonical gets 7.5% of the sale. For comparison Apple takes $0.29 per $0.99 song.

[1] [https://affiliate- program.amazon.com/gp/associates/join/comp...](https://affiliate- program.amazon.com/gp/associates/join/compensation.html)

<comment><USER9> Apple processes the Credit Card and provides the distribution.

So not quite a fair comparison.

</comment></comment></comment><comment><USER10> Banshee might want to consider getting a trademark on their name, and then only allow other people to use it if they keep the affiliate code that goes to the GNOME Foundation.

<comment><USER11> It would probably be a net negative for the Banshee project. Ubuntu wants Banshee to be the default player because of the quality of the software, not the name. I don't think they'd mind being forced to rename it UbuntuTunes.</comment></comment>


A woman was jailed for 3 months because police thought her cotton candy was meth - <AUTHOR> https://www.cnn.com/2018/11/27/us/cotton-candy-meth-dasha-fincher-trnd/index.html <comment><USER2> Most drug testing kits are garbage in the hands of an untrained officer. They require the tester to actually understand what the test is doing. Blue cotton candy turned blue in a solution? What a freaking surprise officer derp.

It's obvious the root cause of this was the way we treat drug crimes, or the fact that drugs are considered criminal. Here we have an instance of excessive bail, lack of due process, no speedy trial, and blatant incompetence. I hope she rakes them over the coals.

</comment><comment><USER3> That's sad, but there doesn't appear to be any wrongdoing on the part of the officers.

<comment><AUTHOR> The arresting officers may not have been at fault but there's clearly something wrong with a system that keeps someone in jail for 3 months because of an inability to expeditiously conduct what amounts to some pretty basic chemical testing. Also, it is inexcusable to keep someone imprisoned for 2 weeks after the test in question reveals that the substance in question was not actually meth. Somewhere along the line there were clearly multiple failures with either the police and/or the prosecutor's office.</comment></comment>


Keep Gaming Forever to Save Your Brain, Scientists Say - <AUTHOR> https://www.inverse.com/article/39109-video-games-senior-mental-health <comment><USER2> This might be the most offensive website with regards to layout and ad density. At least five ads, including one massive top-bar wanted to sell me on some TV show called "Happy". This website is terrible.

<comment><USER3> Firefox's Reader View is great for sites like these. Works on mobile too...</comment></comment>