What are the drawbacks of Python? - <AUTHOR> http://programmers.stackexchange.com/questions/15468/what-are-the-drawbacks-of-python <comment><USER3> Quite a few poor and superficial answers in that link. The usual argument that dynamic typing does not scale for large projects is largely unfounded. There are large projects in Lisp, I don't get why people don't use the dynamic card as often there. What I have seen happened on badly engineered large projects is people blaming it on dynamic typing because there is no documentation and no structural integrity in the project. But the people behind those projects would not be able to do much in any language IMO. In a sense, it allows for poor programmers to do more.

The speed issue is a significant one, but not usually for the reasons given. The big drawback of being slow means a lots of its implementation is not written in python.

IDE/debugger is another issue, although some of it is a matter of people not knowing the tool. Especially on bad codebases, even something as simple as pyflakes running in the background is invaluable, and many people don't use this.

<comment><USER4> _What I have seen happened on badly engineered large projects is people blaming it on dynamic typing because there is no documentation and no structural integrity in the project._

This can be a problem in static languages with good type inference, too. When reading code in older static languages like C++, you'll find a bunch of variables and types declared, but powerful and concise languages such as Scala have much less use for intermediate variables, and type inference means that intermediate variables are almost never declared with a type. Field types and method return types often aren't declared either. I don't know if this is a good thing because it forces you to read a lot of code, or if it's a bad thing because it forces you to read many unrelated bits of code when you're trying to get something simple done.

<comment><USER5> That's because C and C++ are not static languages. Only people who leaned C and C++ first think they are.

<comment><USER6> They are statically typed but only weakly typed (casts, void etc.) as is Java.

Python is dynamically typed but again weakly.

ML is strongly and dynamically typed.

Anything that treats anything as a string or automatically casts from strings fills me with terror for general programming.

<comment><USER7> No, python is strongly typed.

<comment><USER8> You should avoid using those words, it merely marks you as somebody without a clue. I'm guessing your grandparent is already lost so there's no point in warning him.

<comment><USER9> C and C++ are weakly typed because you can do things like

      int x = 42;
      printf("%c\n", *(char *) &x);

that is, access the underlying bits which represent a value as if they were of some completely different type. The results are deliberately not standardized and vary with your machine. Python doesn't provide any way to do this; at worst you get a TypeError for a conversion that isn't implemented, or AttributeError for a slot that an object doesn't have.

Implicitly parsing strings to produce numbers isn't weak typing, merely reckless and prone to mistakes. Weak typing can corrupt the state of your program so severely that even correct code begins to malfunction.

<comment><USER8> > C and C++ are weakly typed

This, in and of itself, means absolutely nothing. And neither does:

> Implicitly parsing strings to produce numbers isn't weak typing

There is no such thing as a widely accepted, let alone formal, definition for a strong/weak axis, every other guy out there has his own personal definition. What the bloody hell is the point of words for which no two persons share the same definition? No point. None at all. See comment above, it merely marks you as a guy without a clue.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> Python has been my favorite language for many years, while the last few months at work I've been writing a lot of JavaScript. I've found that JS has exactly one advantage over Python, which is usable function literals. And that turns out to have a surprisingly large impact. It's convenient and natural to create "anonymous classes" that use closures to store their state, while in Python you'd have to manually create classes and manually copy the variables in __init__. I really wish Python could gain something like that while retaining its many advantages.

<comment><USER11> What do you mean by "usable function literals"? Because Python has them, even if you have to do a bit of work to get them.

        def demo (n):
            def multiplier (m):
                return n * m
            return multiplier

        x5 = demo(5);
        print x5(4)

You can do anything in the inner closure that you might want. The only surprise is scoping - if you want to modify state you need to use a mutable data type because otherwise you'll be instantiating a private variable. But that hoop is easy to handle.

        def demo ():
            counter = [0]
            def increment ():
                counter[0] += 1
            def peek ():
                return counter[0]
            return (increment, peek)

        (increment1, peek1) = demo()
        (increment2, peek2) = demo()
        increment1()
        increment1()
        increment2()
        print peek1()
        print peek2()

So there. Function literals. They work.

But, you say, you really want anonymous classes? Well look up metaprogramming then. Python really has quite good support for it. There is no trouble creating anonymous classes on the fly with their own attributes, functions, and so on. They can even inherit from each other. [http://www.voidspace.org.uk/python/articles/metaclasses.shtm...](http://www.voidspace.org.uk/python/articles/metaclasses.shtml) might be a good starting place on this for you.

(Note, I do not recommend metaprogramming unless the solution you make will be reused a lot.)

<comment><USER10> _What do you mean by "usable function literals"?_

lambdas. Your example isn't a literal, it's just a declared function named "multiplier". Sure, it has equivalent functionality, in the same sense that Python could remove collection literals like [1,2,3] and you could still create lists and maps by hand. But that would be silly.

 _even if you have to do a bit of work to get them_

And that work means that useful techniques become too unwieldy to use in practice.

<comment><USER11> I am also annoyed by the omission of a truly useful lambda. But the rest of the language is compact enough that I've never found techniques relying on closures to be unwieldy in Python. _shrug_

</comment></comment></comment></comment><comment><USER12> This thread mostly contains superficial complaints (whitespace, self, the GIL) that are either explicit design decisions or not important for the kind of programming Python wants to address. Some more important problems that materially affect normal and sane use of Python:

\- Broken scoping by default (the thread does raise this)

\- Unicode is very painful in python2 (addressed very well by python3)

\- Duck typing sometimes prevents early detection of genuine programming mistakes because of overuse: False + 1 == True

\- No good isolation tools (virtualenv, the most common tool, silently fails to isolate dependencies when moved, which is obviously makes it tough to deploy using it)

\- Poor packaging tools (only a few tools than they all have serious limitations such as not being able to package c-extensions).

\- Some of the standard library is downright terrible. csv and robotsparser are good examples. This has the pernicious effect of widely-distributing libraries that have subtle but serious drawbacks.

<comment><USER13> > Poor packaging tools (only a few tools than they all have serious > limitations such as not being able to package c-extensions).

Python stdlib will let you package a C extension. I am not sure why you think the opposite. <http://docs.python.org/extending/index.html>

> No good isolation tools (virtualenv, the most common tool, silently fails to > isolate dependencies when moved)

If you mean it's not relocatable, there's a new option for this [http://www.virtualenv.org/en/latest/index.html#making- enviro...](http://www.virtualenv.org/en/latest/index.html#making-environments- relocatable)

But being not relocatable is not really an issue, as you can simply re-run virtualenv in the new place. All libs you previously installed will work without having to install them again

> Some of the standard library is downright terrible. csv and robotsparser are > good examples. This has the side effect of widely-distributing libraries > that have subtle but serious drawbacks.

Some stuff in the stdlib are not good that's true, but we have a gigantic library ecosystem at pypi.python.org will very well written piece of libs. Using Python seriously, I have never ever felt the serious drawbacks you are talking about _except_ with tarlib in python 2.4 which was seriously broken.

<comment><USER12> > Python stdlib will let you package a C extension. I am not sure why you > think the opposite. <http://docs.python.org/extending/index.html>

But c-extensions aren't put into the same package so you still have to include the shared object files yourself so it's not really a package. One of the best things about the JVM's jar is that you can pack all your other jars into one jar for deployment.

> If you mean it's not relocatable, there's a new option for this: > (--relocatable)

"In theory virtualenvs have a --relocatable flag but that one is heavily broken and conceptionally can't work properly because it uses the system Python interpreter to switch to the intended environment."

<http://lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere/>

> pypi.python.org

Yes, it's great, but I'm talking about the standard library. I really wish some of the worse parts of it would be improved or removed.

</comment></comment></comment><comment><USER14> If you learn to like Python, you will learn to hate other languages. :)

The stdlib. It has some great parts and overall is just good enough (and desire to not break everyone's code) to not cause revolt and wholesale replacement.

FTPlib is atrocious.

httplib/urlib mess -> requests

os os.path, shutil subprocess is a ridiculous mish-mash of legacy, obscurity and surprising behavior. One example. os.mkdir (but only the leaf, and exception if it exists), want mkdir -p behavior. Is that an option to os.mkdir, fuck no! We need a whole new function for such dramatically different feature. Must be called mkdirs, fuck no! That would be too easy to remember and no one every look at our beautiful docs. os.makedirs is the _obvious_ choice.

<comment><USER15> "If you learn to like Python, you will learn to hate other languages."

I think it would be more accurate to say that if you learn other languages, you'll learn not to hate Python. Python is kind of mediocre in a lot of ways, but it's the only language without any deal breakers.

<comment><USER16> Clojure also lacks deal breakers. Python was my least hated language until Clojure.

<comment><USER17> The Clojure language is great, but the dependency on the Java ecosystem and the JVM are deal breakers for me.

<comment><USER16> Why? To be honest, I used to think that, but then I actually tried it and haven't had any problems there.

<comment><USER18> If you're working on embedded code, the overhead for something like the JVM could easily be prohibitive because of the size.

And if you're working on anything that needs to do a small job quickly, such as command line tools as fauigerzigerk mentioned, the overhead for something like the JVM will almost certainly be prohibitive because of the delay at start-up.

</comment></comment></comment></comment></comment></comment><comment><USER19> The scripting languages are all really more alike than different.

The main downside of Python compared to, Ruby, for example, is that Guido made some serious mistakes in the initial design and in the process of fixing them added a lot of extra complexity to the language. Python doesn't cleanly "fit in the head" the way Ruby or JavaScript do, at least for me.

But instead of wasting time micro-optimizing in such a narrow language space, pick Python or Ruby or whatever and spend your extra cycles on something different enough to be worthwhile like Go or Haskell.

<comment><USER20> I learned python first, and I have the same complaint about ruby. When I was attempting to learn ruby, the subtle differences between blocks, procs, and proc.news, or whatever they are, seemed arbitrary and required too much thought to understand for my taste. In my brief exposure to ruby, that was symptomatic of a general trend in the language that there seemed to be many ways to accomplish a task, without a clear reason for the distinction. That's fine if you're writing code, but imo that's a feature that makes reading a language more difficult.

<comment><USER21> You don't have to learn every single way to achieve a task though. Just sticking to simple blocks will solve 95% of the issues for you. If you want to get into more detail, Ruby will grow with you. I've sincerely yet to explicitly use lambdas or Procs and I've been coding Ruby through Rails for a few years now.

<comment><USER20> Like I said, that's fine if you're only writing code. It doesn't stand up so well if you need to read code also. The author of the code could use any feature the language provides.

</comment></comment></comment></comment><comment><USER22> I have built an app of over 500k sloc in Python.

In retrospective, I feel the python as a language was a good choice, it helped us move very fast and do a lot of things :

\- One good pythonner is very productive

\- It was easier to get someone aboard, it is easy to get python and to reasonnably efficient with it.

\- there are libraries for everything.

\- going to cython or c++ was always an easy alternative for those crtical part of the code.

The only cases where python can be problematic are :

\- high reliability code like trains or planes software, because python code is not provable.

\- very high performance, where the slowness of python _in the not critical part of code_ can be a problem.

Besides, It doesn't protect you against the classic problems of a big codebase built by a different of people over a period of time. Tools like pynocle or pylint were good for this.

So, in the end, python has obvious weakness. Most of the time It seems like a solid choice (among others). Right tools for the job, etc.

</comment><comment><USER23> I never did understand why True and False are capitalized.

[EDIT: Turns out it's because all built-in constants are capitalized: [http://stackoverflow.com/questions/521476/why-true-false- is-...](http://stackoverflow.com/questions/521476/why-true-false-is- capitalized-in-python) . Learn something new every day. Still don't like it though.]

Also object-oriented programming in Python is very awkward. Then again, if I wanted OOP, I'd use C#.

<comment><USER24> How do you find OOP in python awkward? Out of curiosity.

<comment><USER25> I always found it weird that they use len([1,2,3]) rather than [1,2,3].len

(no, I don't want to call [0,1,3].__len__() . Why would I want to add all of those underscores.)

<comment><USER26> Similarly weirdly, the string join method really confuses me:

        ''.join([1, 2, 3])

<comment><USER27> That actually makes sense. Because the joining is something that a string knows how to do. Why should arbitrary lists know about string manipulation?

By the way, your example has an error, since you can't join a list of numbers. You can only join lists of strings. I.e.

        ' '.join("Hello", "World")

</comment></comment></comment></comment></comment><comment><USER28> "It's far from the metal"? No it isn't. It has _ctypes_ , which is one of the best FFIs I've worked with. I wrote a trampoline-injecting kernel debugger in it. I don't love Python, but that answer disqualifies itself.

<comment><USER29> I don't know what _trampoline-injecting_ means and my googlefu has failed me. Would you briefly explain what you mean?

<comment><USER28> Instead of implementing breakpoints with INT 3, which relies on the OS's debug event support, our debugger injected new basic blocks into the program to pause the target, perform I/O with it, and redirect it to other code paths.

You should have no trouble looking up what a "trampoline" is, but I'm abusing the term a bit.

<comment><USER30> So you made a debugger below the OS by instrumenting the target program to do debuggery things? That's pretty cool. But at what granularity did you inject the code? Presumably not around every single instruction. But if it was just on demand wherever the user set a breakpoint, how would you implement stepping?

<comment><USER28> We didn't do stepping (at least, mine didn't); instead, we tended to do things like Detours, where we'd target a broad set of bblocks in the program and either log, or snapshot the process when they were hit.

There is a pattern for single-stepping using similar techniques: "user mode single stepping".

One thing to bear in mind: it was easy for us to do this in part because crashing the target program was not a big deal for us.

</comment></comment></comment></comment></comment><comment><USER31> My biggest problem with Python is not that it's a bad language but that it isn't a great language. Why is this an issue? Simple: it's one of the most highly rated--and, frankly, _over_ rated languages today. And, try as I may, I can never seem to get away from it: at least in my circles, it's even _more_ endemic than Java!

I really wish people liked OCaml or Haskell that much instead.

<comment><USER32> Yeah. Python has an awful lot of warts, considering the way so many people fawn over it.

Really the main strength of Python is not the language at all, but the huge number of libraries written for it, and the wealth of tools and "community." Fair enough, it was in the right place, at the right time, but if history is going to throw its weight behind something, it _is_ a little annoying when that thing is rather mediocre...

</comment></comment><comment><USER33> For what python has been created for, there are really few if any drawbacks. This is still my go to language.

Something I wish python had a better support would be truly anonymous function I.e. you can't do:

      lambda x: raise "foo"

It's also very hard to write nested callback (Some pythonists like to argue that is actually a _good_ thing).

Lastly, I wish the functional paradigm part of python was more consistent.

But all in all, I love python and I find it very hard to switch to something new without missing it.

</comment><comment><USER34> While we are on the subject, I find that this answer provides with much better arguments - <http://stackoverflow.com/a/431341>

It's an interesting read - he begins with "The problem is that it is not as good as it is made out to be, in other words it suffers from a degree of hype. I'll try to argue this point."

<comment><USER35> Mostly it is the age old complaint, can't build something big in a dynamic language. The evidence is that I don't know of anything big in a dynamic language. Not exactly great points against python when the argument boils down to, "all dynamic languages are bad."

</comment></comment><comment><USER36> Nobody has mentioned the inconsistent naming conventions in the standard library, which always drove me nuts.

<comment><USER37> Could you give some examples?

<comment><USER36> It's not a secret at all, PEP 8 even acknowledges it - <USER2> <http://www.python.org/dev/peps/pep-0008/#naming-conventions> \- and of course attention to backwards compatibility is a good thing.

\- usually constants are capitalized, but math.pi and math.e aren't

\- the Decimal class has methods like is_nan(), and generally puts underscores in the method names, while the math package provides methods like isnan()

\- even within the same package, you have cases like itertools.groupby() and itertools.combinations_with_replacement()

Not a deal breaker, it's just a drag when you only work in a language once every few months, and you constantly have to look at the docs to know whether something is alllowercase, ALLCAPS, camelCased, with_underscores, etc.

</comment></comment></comment><comment><USER38> \- Multithreaded development; multiprocess is being favored (as well as event- driven) and there are some helpful modules for it

\- Unicode (at least for Python 2)

\- Debugging is a little behind other languages (pdb works)

\- removal of map/filter in place of list comprehensions (they are certainly better but not faster)

<comment><USER39> map and filter still exist. reduce was demoted into the stdlib instead of being builtin in 3.x.

list comprehensions generalize to other types (generator expressions (aka "lazy sequences"), set comprehensions, dict compresions)

Compare this syntax (using dict comprehensions in 2.7):

      {k:v for k, v in something.iteritems() if v == 3}

to this syntax using map/filter:

      dict(filter(None,
               filter(lambda x: x if x[1] == 3 else None,
               something.iteritems()))

More frustrating to me is that there isn't an imap/ifilter builtin (I understand that it's in stdlib, I'm just lazy).

<comment><USER8> > More frustrating to me is that there isn't an imap/ifilter builtin

FWIW, alongside the demotion of reduce to the stdlib Python 3 changed that, the builtin `map` and `filter` now return lazy "views" (as do e.g. `dict.items`, `dict.keys` and `dict.values`):

        # python 2
        >>> map(sys.stdout.write, ['foo', 'bar', 'baz'])
        foobarbaz[None, None, None]

        # python 3
        >>> map(sys.stdout.write, ['foo', 'bar', 'baz'])
        <map object at 0x10071cfd0>

</comment></comment></comment><comment><USER40> Speed, definitely. Although in defence Ive always found python very easy to "hack".

Writing a C extension to do computationally intensive work is fairly simple.

With its versatility and extensability I once threw together a proof of concept password cracking cluster in a week. Redis for queues/data, MySQL for data, hashing code in a C extension, flask for the web interface. Cross platform and lovely :-)

Threading is the only real let down for me.

<comment><USER8> > Writing a C extension to do computationally intensive work is fairly simple.

Even more so with Cython, which does most of the hard work for you.

<comment><USER41> Or the recent numba: <https://github.com/numba/numba>

</comment></comment></comment><comment><USER42> That thread is depressing - most of the things people are complaining about are conscious design decisions made by the python team. EG Complaining about self - explicit is better than implicit is a core property of python. I feel like `import this` would answer a lot of these.

<comment><USER10> Practicality beats purity. Python should support better function literals for the same reason that it supports the "implicit" [1,2,3] instead of making you explicitly create a list and call append. I'd say self falls into the same category, although I haven't found it as much an annoyance as some.

</comment></comment><comment><USER43> I would say that Python has a feeling of inconsistency at times compared to other scripting languages. I don't mean this as a criticism. I like and use Python a lot for work and personal projects. Here's an example of what I mean by inconsistent:

 __ _len(a_string)_ __

 __ _a_string.lower()_ __

 __ _a_string.upper()_ __

So here, there's a global, generic function len() that returns the length of the string while in the other examples, the string has methods such as .lower() .upper() etc. Why not have a_string.length()? I understand that generic functions are more efficient and even proper in OO. It just causes the feeling of inconsistency when you use the language a lot or when you are teaching a child how to program and have to explain the difference and why some things are methods while others are not.

Also, some python idioms (such as slicing) are not intuitive for many use cases. Here's an example of the traditional way in which to reverse a string in Python by slicing:

 __ _a_string[::-1]_ __

In Ruby, you type __ _a_string.reverse()_ __and that is much more intuitive to a child when compared to the slicing in Python.

Having said all of that, I love Python and use it daily and encourage others to do so as well. I

</comment><comment><USER16> My least favourite part of python (I'm overwhelmingly a fan, and it's probably my favourite language after Clojure) is the deliberately limited functional parts. Take list comprehensions, they work for simple things, but when you want to make it more complex, it wont let you break it over multiple lines, so you have to rewrite it into a for loop. Makes debugging awkward.

<comment><USER8> > it wont let you break it over multiple lines

?

        result = [
            (value, process(value), process(key, value))
            for key in generator
            for value in generate(key)
            if some_condition(key)
            if other_condition(value)
        ]

or did you mean something completely different? Maybe the problem of not being able to use _statements_ in comprehensions (or lambdas)?

<comment><USER16> Right, I meant using statements, sorry. It's been quite a few months since I wrote python, so I think I've forgotten most of the details.

</comment></comment></comment><comment><USER44> Did anyone mention the Gil? I'm hearing more and more complaints about that.

<comment><USER23> Having worked with multi-threaded applications in other languages, I'm starting to think that the GIL is more a good thing than a bad thing.

Seriously, threads are evil.

<comment><USER45> The GIL does not make threads less evil than you apparently already find them, it just makes them a lot less useful.

Threads in Python still have all the pitfalls and complications they have in other languages, it's just that they cannot use multiple cores or hardware threads. So you get all the evil bits (race conditions, deadlocks, having to protect access to shared state, etc), but you miss out on all the performance benefits threads can have on parallel hardware.

In Python, threads are only useful as an abstraction of things that have to run concurrently, even though they never do.

<comment><USER8> Not that I want to distract of your righteous rant, but threads also work without issues when doing mostly IO: C libraries and implementations are free to release the GIL (and often do). So if you want to e.g. fetch a bunch of things concurrently, those will be done concurrently. And your

> have to run concurrently, even though they never do.

is way off base.

Likewise, if you're doing CPU-heavy crunching (likely implemented in C or Cython), you can release the GIL and let the interpreter run some other bytecode at the same time.

</comment></comment></comment></comment><comment><USER46> I was a Lisp/Scheme programmer. I use Python only because Norvig wrote that it isn't so bad. But I curse out loud every time I type in 'self'. I hate the lambda limitation (only expr). The scoping rules continue to confuse me. It's a good language if you're coming from C/Java. But it's a poor language if you're coming from Lisp/Smalltalk/ML.

</comment><comment><USER47> I've written about this before here: <http://news.ycombinator.com/item?id=3580590>

Fundamentally, I believe Python's drawback is that it appears to draw heavily from the ABC history it has, and wasn't designed for power and flexibility.

I'd rather use Perl, Ruby or Lisp.

</comment><comment><USER48> To this day I still hate the fact that wrong spacing causes a compiling error.

</comment><comment><USER49> Performance and type safety which is true for any scripting language

</comment><comment><USER50> self __init__ self.__init__ self self __init__ self

</comment><comment><USER51> it doesn't wear a suit

<comment><USER52> Is this a quote from somewhere? I laughed, and now want to make a opensource project suitupy

</comment></comment><comment><USER53> My favourite critique of Python: [http://www.quora.com/What-are-the-main- weaknesses-of-Python-...](http://www.quora.com/What-are-the-main-weaknesses- of-Python-as-a-programming-language)

</comment><comment><USER54> Nice to see programmers.stackexchange.com being used for things like this. Hopefully it will put a rest to the same top comment on HN Stackoverflow stories complaining about how such questions are booted off Stackoverflow.com

</comment><comment><USER55> Mutable default arguments. 'nuff said.

<comment><USER56> Ironically, the one time where I noticed this bug was while testing a component, whose only use involved me emulating the behavior of mutable default arguments on a higher level. I still think it is a horrible system. My strong opinion on it might be because I spent hours looking at our c-extensions for the source, because the previous two 'language bugs' I ran into were both in our c-extensions, where we had a type that could not cast to it self, and someone thought it was a good idea to make ~x mean x __-1.</comment></comment>


Unrounded Twitter - <AUTHOR> https://chrome.google.com/webstore/detail/unrounded-twitter/mkphkljplnifkjpljellgggdjjjokmia <comment><AUTHOR> In case some of you were strongly averse to the new rounded look of Twitter and wanted a full blown chrome extension to help ease the tension, here you go!</comment>


HN is becoming too slow for view the user submissions - <AUTHOR>

I get a blank page with most of the leaders, when I try to see their summission page. <comment><USER2> Calling it "slow" is generous. It doesn't work. /saved is also borken.

I guess that's the price we pay for being on year 3 of the hundred-year language.</comment>


What's happened to Webnotes? - <AUTHOR>

Hi, who is using webnotes currently? I discovered their service was down since yesterday. WHY??<p>http://www.webnotes.net/ <comment><AUTHOR> It gets alive again.</comment>


Better sales presentations - <AUTHOR> http://www.b2brainmaker.com/blog/40-blog/319-10-slides-to-a-better-sales-presentation

<comment><USER2>
      > Abraham Lincoln's Gettysburg Address ... took three minutes to deliver.
      > So, why would it take anything more than 30 minutes to describe a company, ...
      > That's 15 times longer than Lincoln used at Gettysburg!

Er, so 30 divided by 3 is 15?

Slide 6:

      > "Why Should I Believe You?"

You blew it. Now I find it hard to believe anything you say.

ADDED IN EDIT: Since I got a down-vlote at least one person hasn't understood the point I'm making, or didn't like the way I made it. Let me expand somewhat to try to make it clearer.

In this hyper-critical, attention-deficit economy, it doesn't take much to lose your audience. If you're pitching for me to invest in you, you'd better know what you're talking about.

This was a fundamental error in a document that that was talking about the importance of the pitch. The document itself is a pitch, and pretty much the only figures they gave, they got wrong.

Yes, that means that I stop reading when they actually have more interesting, useful and important things to say, but it does make me worried about their attention to detail, and there are 101 other things demanding my attention.

Net result - stupid error, and they've lost my attention. Other sites are just one click away, and my time is limited.

<comment><AUTHOR> The error is the speech took approximately two minutes, not three. Thirty minutes is about 15 times longer.</comment></comment>


How social networks can create the illusion that something rare is common - <AUTHOR> http://www.technologyreview.com/view/538866/the-social-network-illusion-that-tricks-your-mind/ <comment><USER2> > This comes about because the distribution of friends on social networks > follows a power law. So while most people will have a small number of > friends, a few individuals have huge numbers of friends. And these people > skew the average.

> Here's an analogy. If you measure the height of all your male friends. > you'll find that the average is about 170 centimeters. If you are male, on > average, your friends will be about the same height as you are. Indeed, the > mathematical notion of "average" is a good way to capture the nature of this > data.

> But imagine that one of your friends was much taller than you—say, one > kilometer or 10 kilometers tall. This person would dramatically skew the > average, which would make your friends taller than you, on average. In this > case, the "average" is a poor way to capture this data set.

Based on the wikipedia article of the friendship paradox[1], the power law distribution really has nothing to do with it, and the paradox would exist even if the distribution of number of friends were completely uniform. It's instead related to the fact that people with a high number of friends are overrepresented in the lists of other peoples' friends. The rest of the author's analysis describing the new "paradox" passes the smell test, however.

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

<comment><USER3> Because of that mistake I had a hard time of understanding the actual topic. What is it that they are trying to say?

<comment><USER4> Some nodes have more connections than others. If most of these nodes send out a signal, it will seem to the other nodes that _the majority of ALL nodes_ sent the signal, even if the highly-connected nodes are actually a minority.

e.g. if the popular kids believe X, then to most people it will seem like the majority believe X, even if there are only a few popular kids.

</comment></comment></comment><comment><USER5> Any SMM manager worth her salt knows it, as it is one of the principles of the profession.

Rule number 2: persuading major influencers is hard. You should target their connections instead who are not that popular (close friends, family members etc.) Once you persuade them, they can influence your primary targets, who will spread the message to their numerous following.

Rule #3 (advanced): always draw a map of key connections (as counted in the number of interactions) in the network you are working in. This will help immensely in designing your influence strategy.

Here. With some practice, you can now beat the SMM game.

<comment><USER6> What is SMM?

<comment><USER7> Social media manager, I think.

</comment></comment></comment><comment><USER8> It also works in another way.

I for example, have a rather alternative love life, but it doesn't seem alternative to me most of the time. Because social networks are prefiltered and I feel like I'm surrounded by people like me.

So I get the feelong to do 'normal' things, only when I meet people outside my filterbubble I'm reminded That the majority is different.

It is much easier to do what you want, if you think it's nothing exceptional.

</comment><comment><USER9> Another way to state that average paradox: The majority of people have an above average number of legs.

<comment><USER10> I don't really understand how that's a paradox. It's a natural result of the mathematical properties of the average, if outliers are a problem, we use median.

<comment><USER11> I wish it were not the case but "paradox" can be used to describe apparently contradictory behaviour even when its not actually contradictory.

<comment><USER12> What other definition of paradox is there?

<comment><USER10> Yeah, a literal contradiction. The purest example would be Russel's paradox: [https://upload.wikimedia.org/math/b/e/0/be0bd5b59ed09618db93...](https://upload.wikimedia.org/math/b/e/0/be0bd5b59ed09618db939d03dbd6b22f.png)

<comment><USER13> I like this variation:

"Both of these sentences are false. The sky is not blue."

</comment></comment></comment></comment></comment></comment><comment><USER14> Won't the 'Echo Room' Facebook algorithm just enhance the "Majority illusion"?

(*the new one that shows all the things people like you post and will filter out other viewpoints)

<comment><USER15> I believe exactly this to happen. Combine this with Confirmation bias[1] and Recency effect[2] and you have the typical echo chamber effect (be it Google showing fitting results, be it FB with the algorithm or be it the partisane media. So your views will get bolstered. You will think you are talking within a big group of likeminded people, because differing strains of thoughts never reach you.

And if you combine this with a debate like in Germany, where FB is being asked to proactively delete/censor* more stuff, this might become a bigger problem.

* Not that I like the stuff to be censored particularly - definitively on the contrary. Just pointing out the effect.

[1]: [https://en.wikipedia.org/wiki/Confirmation_bias](https://en.wikipedia.org/wiki/Confirmation_bias) [2]: [https://en.wikipedia.org/wiki/Serial_position_effect#Recency...](https://en.wikipedia.org/wiki/Serial_position_effect#Recency_effect)

</comment></comment><comment><USER16> An earlier discussion citing the same paper [https://news.ycombinator.com/item?id=9826200](https://news.ycombinator.com/item?id=9826200)

</comment><comment><USER17> Combining this with virtue signalling, it might be why many people are so surprised at certain election outcomes.

</comment><comment><USER18> This must be related to how Pluralistic Ignorance [1] arises?

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

</comment><comment><USER19> I guess that explains why celebrities make millions for only being celebrities.

<comment><USER20> This is also why celebrities are very careful about what appearances they make or products they endorse -- and are downright paranoid when it comes to preparing for and executing interviews with opinion influencers.

It also means that negative opinions are to be dealt with very carefully. Ever wonder why with 10K celebrities on the planet, most all of them think most all of the rest of them are awesome? It's because with one bad word, if you hit the wrong influencer, you could start a public opinion avalanche. (I omit those celebrities using the "burn it all down!" PR strategy)

<comment><USER21> This is something that's done in offices too; negative opinions of coworkers can cause bad things to happen. There's a floor on opinions that excludes negative comments.

<comment><USER20> Absolutely, but in any office bigger than 4 or 5 people, there's also a lot of back-channel talk that goes on as well.

People in physical social groups operate in a much more nuanced way than people online.

</comment></comment></comment></comment><comment><USER22> So it functions just like news media then, where rare things are nearly all we hear about.

<comment><USER23> That was my thought when I saw this headline. News is all about what's new, novel, different from normal, otherwise it wouldn't be interesting and worth talking about.

</comment></comment><comment><USER24> It's opposite is probably also true, how very common things are made to look rare and exceptional e.g. blood moons.

</comment><comment><USER25> Is this anything more than the insight that your perception of 'average' is calculated from the distribution of what you observe, not from the true distribution? Or am I missing something

</comment><comment><USER26> It's all a pipe dream unless you are able to identify and _persuade_ relevant influencers.

</comment><comment><USER27> I believe this was already known. This may be a different mathematical analysis of it, though.</comment>


Myths Over Miami (1997) - <AUTHOR> http://www.miaminewtimes.com/news/myths-over-miami-6393117 <comment><USER2> This has kind of popped up on the internet every so often, and while I loved the story at first, I've become skeptical. How come nobody else has studied/recorded/referenced these myths? We have one singular article, but nothing else.

I hate to suck the magic out of the room, but something tells me that the author took the imagination of children and wrote about it in a way to make it more of a social phenomenon than a set of individual ones.

<comment><USER3> At one point Disney acquired the movie rights to "Myths of Miami" for Clive Barker who was going to make a "Bloody Mary" movie out it similar to his "Candyman" movies, so presumably it is a work of fiction. But like how "Candyman" highlighted the real horrors of housing projects in addition to the supernatural elements, the movie presumably would have highlighted the real problem of homeless children.

</comment></comment><comment><USER4> Yeah, does anyone know of any follow-up to this article? It's ancient.

</comment><comment><USER5> This should have a [1997] tag

</comment><comment><USER6> Title should be changed to something more descriptive. Maybe "Homeless childrens' mythos in Miami"?

But the content is fascinating, hopeful, and sad all at once.</comment>


Why the future is Not RESTful - <AUTHOR> http://z.caudate.me/why-the-future-is-not-restful/?utm_source=dlvr.it&utm_medium=facebook

<comment><USER2> I think caching is still a big deal. It massively increases the responsiveness of web applications, and probably also improves access for mobile clients who are on poor data connections. Not to mention the 2/3rds of the world who don't have a fast or stable internet connection.

I think the future is actually more REST. Most REST on the web at the moment only really reaches the first 2 levels of the Richardson Maturity Model, but it's level 3 (the final one) that gives you many of the benefits over alternatives.

The big issue in the future is not enabling the developer to write more 'live' services with things like Meteor, it's enabling computers to figure most of it out themselves. A REST client should be able to consume a REST web service with very little involvement, and few design-time decisions by the developer. It should be able to discover resources, and adapt to API changes by itself. This makes making clients for services much easier, and is far more 'client focused' than Meteor, which at the moment is a bit of a black box for clients that aren't Meteor web pages.

I think additional ideas like Rocket ([http://rocket.github.io/](http://rocket.github.io/)) could be integrated into the conventions for a nicer interface to the data, but generally I think REST is a good way to go.

<comment><USER3> Thanks for the link to Rocket. It will definitely be interesting to see how everything plays out =)

</comment></comment><comment><USER4> Caching doesn't only happen in proxies. Clients can do it too and your app is a client and should cache what it can.

But the real problem with REST is round trip times and that is an artifact of REST being build on top of an RPC protocol. The future is EVENTful and I am not talking about websockets or any specific implementation of events. Fire and forget messaging is the way of the future.</comment>


TinyChat - <AUTHOR> http://tiny.chat <comment><USER2> So, no details, no screenshots, no explanation, no description, and no product.

Actually, I'm flagging this. HN needs more actual content and less of this "let's see if anyone is interested" crap. If you want to gauge interest, write something with content.

<comment><AUTHOR> There is a screenshot on product hunt page.

[http://www.producthunt.com/tech/tinychat](http://www.producthunt.com/tech/tinychat)

Actually we have made some different design, we don't want it to get copied before we launch.

And trust me from the sign up for pre launch, I can tell you people are Interested.

</comment></comment><comment><USER3> There is already a tinychat (and the existing tinychat are scumbags) so a name change might be useful.

<comment><AUTHOR> We tried a lot of names , but this name TinyChat fits us best.

True, existing Tinychat is bad . And Names get confused.

But we still love the domain [http://tiny.chat](http://tiny.chat)</comment></comment>


Password protection for static pages - <AUTHOR> https://github.com/matteobrusa/Password-protection-for-static-pages/blob/master/README.md <comment><USER2> So, how many possible hashes in a 32 characters hash using letters, symbols and numbers? I am trying to guesstimate the number of page requests before brute force breaks it.

Do services like AWS S3 charge for 404's? If so, under brute force the monthly bill could get really big, no?</comment>


My strange aversion to vacations - <AUTHOR> http://42floors.com/blog/my-strange-aversion-to-vacations#.UXf24kORsvc.twitter <comment><USER2> This might seem strange, but I felt a similar passion towards vacations ever since I was in elementary school. There was always a lot of pressure to succeed in school, sports, and social life. Just when I thought I'd have free time to catch up things where I was falling behind (in any of these categories), I would usually get yanked away for a trip somewhere like skiing, or to spend time with family out of state. I don't mean to sound ungrateful as I realize I have been very fortunate to do many of the things that I have done, and these activities were definitely amazing the first couple times around, but I believe they ended up being more detrimental to my development and work in the long run.

</comment><comment><USER3> "What this means is that when you get a job offer from us, you'll pick a start date....And that's the day you leave for vacation."

My experience over the decades has been new employers love to hear that you need 3, maybe 4 weeks to help transition your replacement, but your old employer likes to escort you out the door and change all the passwords the moment you slap a resignation letter on the bosses desk. I was actually kind of pissed at my last job when they made me sit around for two weeks instead of the escort out treatment. So I've taken 2-4 weeks off between each job. On the wife's health insurance. I'm not hand-to-mouth enough that I really notice a missing check or two.

What I don't do is exotic or stressful travel. No idea if I'll end up hating the new job so need to be prepared to take off and sending $5K to a resort is no way financially to start a job search. If you don't love your life, fix it so you do, don't just fly to tahiti and come back still hating it.</comment>


Ask HN: should we be publishing screenshots? - <AUTHOR>

Our company has a personal health records platform that we are proud of because it is user friendly and powerful. It is built on top of open source software and the company that created that software wanted to feature us as one of their partners. I am pleased by this vote of confidence and was trying to decide what screenshots to share with them.
However, in the last week, two CEOs of different start-ups that I was interviewing for a book I am writing refused to provide me with screenshots of their products to publish in the book. Both said their user interface is a trade secret that they did not want to share.
I cannot figure out if they are being naive (for missing out on an advertising opportunity) or I am being naive (for being ready to give away my own company's "trade secrets").
Any advice on what I should do? <comment><USER2> Definitely, yes. The first thing I take a look at when browsing for a new web based application is the screenshots (yes, before the screencast).

Do not hide what you are trying to sell.

</comment><comment><USER3> Makes you wonder how they will respond when actual users are looking at those screens. Do they have to sign an NDA too ?

<comment><USER4> Better solution is to post fake data</comment></comment>


Bram Cohen: "Lawyers can't tell you you can't do something" - <AUTHOR> http://venturehacks.com/articles/bram-cohen-lawyers <comment><USER2> Lawyers can be and often are invaluable advisors to startups.

On the other hand, bum lawyering can come in all shapes and sizes. Some examples to watch out for:

1\. Insecure (and particularly green) lawyers who are so bound to doing things by the book that no hint of common sense can be found in their advice or in their actions. They will tell you all you ever wanted to know about what the "tax law says" or what "judges do" but they have no idea how to give you custom advice that is practical for your situation. They will tell you they need to "look it up" only to bill you for many hours of research time that you had no idea you would be expected to pay for.

2\. Arrogant lawyers who have become so imbued with a sense of their own self- importance that they actually presume to become actual decision-makers for their corporate clients (yes, this does happen, much to the chagrin of the clients involved). This is the point noted in the title of this post. I would say most principals will no longer put up with such nonsense but it still happens where lawyers with dominant personalities deal with deferential-type clients, sometimes from cultures where extreme deference can be common (e.g., Japanese clients).

3\. Tin-ear lawyers who have no sense for a deal. This differs from #1 above in that the lawyers are secure in their abilities, as opposed to green young lawyers, yet they are so rigid on how something must be done that they effectively impede (or, in extreme cases, destroy) the deal they are supposed to be facilitating. This is the type of lawyering that tries to impose a 50-page contract upon a deal when a short and simple contract would do. Why? Because it "covers all the risks." Of course, most of these risks have no practical significance for the size or scope of the deal, and the contract itself, being unduly complex, causes the parties to run up large costs and to incur significant delays, all to the detriment of the parties involved.

4\. Disputatious lawyers who have an insatiable need to "win" at every turn even when this is off-putting and alienating to all concerned. Some principals think this is a good thing, to have a lawyer who concedes nothing in doing a deal. In reality, this tends to be a disaster, either killing the deal or causing the other side to close with such a bitter sense about it that future harmony between the parties is not possible.

I love my profession, and love what I do in practicing law, but the abuses and shortcomings in this field are enough to make one scream.

<comment><USER3> > I love my profession . . . but the abuses and shortcomings in this field are > enough to make one scream.

There, edited and I believe it likely applies to everyone who's held a job here on HN. I felt similarly working as a reviewer, similarly when I worked as an electrician. I've heard of an entire house's lighting been wired with _speaker wire_. I'm amazed the place didn't burn down, it's a testament to the quality of speaker wire and the ineptitude of some people. I didn't work the job personally, so I don't know if the wire had been "professionally" installed or not. However, I have many horror stories from jobs that I know have been wired by an alleged professional.

Abuses and shortcomings are rampant in any field. As long as you do the best job you can, as long as you're doing the best for your client, you're making your profession better.

</comment></comment><comment><USER4> This is true for any advisor, your expectation should be that they will make you aware of the likely consequences--some of which you may not have foreseen --for a course of action that you are contemplating. But they cannot make the decision for you.

There was a great quote in a 2006 Fortune profile of Larry Sonsini (the Sonsini in Wilson Sonsini) when they asked TJ Rogers why he valued Sonsini's advice:

"I don't take orders well," says T.J. Rodgers, the founder, chairman and CEO of Cypress Semiconductor. "But taking advice from Larry Sonsini is easy. He's professorial. He's nonjudgmental. 'You can choose to do this, you can choose to do that, and these will be the consequences.' So you realize you're not being forced or pushed into anything. He explains to us why the sometimes frustrating, arcane and inefficient system we have makes sense, or at least made sense at one time, and therefore should be followed."

The full profile is here: [http://money.cnn.com/magazines/fortune/fortune_archive/2006/...](http://money.cnn.com/magazines/fortune/fortune_archive/2006/11/27/8394382/index.htm)

I blogged about it here [http://www.skmurphy.com/blog/2006/11/30/larry- sonsini-profil...](http://www.skmurphy.com/blog/2006/11/30/larry-sonsini- profiled-in-fortune-nov-27-06/)

Three related take-aways for entrepreneurs:

1\. The best attorneys present options and make you aware of the likely and potential consequences of different courses of action, but understand that the business decision still rests with the client.

2\. If you allow an attorney to invest (and then re-capture his dollars in (possibly deferred) fees) you may find it difficult to fire or replace the attorney. Make sure it's someone you want a long term relationship with: there is no such things as "free legal advice."

3\. Work with advisors who are willing to be transparent about their fees. If you were a prospective WSGR client, the answers that they gave here should be unacceptable. Understand why the code of ethics for accountants prohibit similar fee arrangements.

<comment><USER5> This comment is copied from the OP comments.

<comment><USER6> Not "copied" exactly - skmurphy posted the same comment in both places. (I do this sometimes too, especially if the comment is in a moderation queue at the original site.)

</comment></comment></comment><comment><USER7> I'm not a lawyer but I've seen, and paid for, my share of it, and one thing I know is that if you don't want your lawyers charging you don't fire off emails like; "Hey, if you know X off the top of your head, can you left me know about it?". You either need a legal answer, or you don't, otherwise you're wasting the lawyers time and your money. The law is complicated and convoluted and even things that seem simple can actually require lots of research.

If you're a young start-up, don't hire on WSGR, Orrick or their ilk - I know they're a status symbol, but they'll cost dearly (remember: deferred fees are still fees that need to be paid eventually). Most start-ups need some corporate, a little employment and maybe some patent/ip work. There are lots of small firms that specialize in that, especially in the tech hubs. If you need more specialized work, hire in a firm that specializes in that. Smaller firms usually offer better service, at lower prices - you'll pay a lot less and work with experienced partners rather than 1st year associates.

Finally, your lawyer is not an employee, firing them off an "urgent" email at 4pm on Friday means that you probably won't get a response until Monday, and probably won't get an answer until Tuesday. Just because you work on the weekends doesn't mean that they do. Don't leave important legal questions until the last minute and you'll have a much better experience.

</comment><comment><USER8> Hm. I can't find the quote by Phil Zimmerman, of PGP fame. He said something along the lines of "If your lawyer says 'you can't do that,' they're useless. Look for one who can say, 'you can do _that,_ if you do _this first.'"_

</comment><comment><USER9> I think Bram's comments and the comments below are solid. This is why I wrote the post "Top ten reasons entrepreneurs hate lawyers" (<http://bit.ly/53SB5a>): to promote this kind of discussion and to educate entrepreneurs. Let's face it, the legal profession is broken. On the one hand, entrepreneurs and their companies are getting killed on fees; and, on the other hand, lawyers are being laid-off in waves and lots of law school grads can't find jobs. On top of that, most lawyers don't like that they are doing and service generally sucks. It's time for a new kind of law firm.

<comment><USER10> I work with three different law firms in the Netherlands and one in Michigan (each with their own specialisms) and my experiences are completely the opposite of the 10 points you describe in your post. Our company is a bootstrapped software startup, so a lot of what's being said here applies to us as well.

I get clear answers, all of our lawyers are up-front about their billable hours, and most importantly, understand that we ultimately decide, they're hired to provide expertise and to help us understand what kind of risks we're taking and what our options are.

Maybe I'm just lucky, but I think the real problem is that many startup founders consider dealing with lawyers and legal stuff in general a chore and a hassle. Something to get out of the way as quickly as possible.

If however, you find the right person for the job – ask around for references – and take an interest in the work you do with them, it doesn't have to be that way. A new kind of law firm, as you call it, or simply a good law firm, as I call it, already exists. In my experience there are actually quite a few out there, you just have to take an effort to find and evaluate them.

</comment></comment><comment><USER11> I hope Bram shares his gripes about sysadmins and HR directors "of dubious ethics"!

<comment><USER12> I imagine sysadmins can read anyone's e-mail, and HR can hire without much accountability.

</comment></comment><comment><USER13> The bit about "when all that was really wanted was the answer _if_ the lawyer knew it off the top of their head" reminds me of people who want an ebay clone for a couple of hundred dollars.

<comment><USER14> I think he means he would like a boolean response to "Do you know what this is?" not, "please give me whatever information you have in your cache".

Although I can see it the latter way, as well, and it's reasonable to ask for an ebay clone if you can poop one out for $200. There's a lot of stuff I'd buy for $200 if it could be had. But just because I'd buy it at $200 doesn't imply that I'm willing to pay several times that to have one hand crafted, which appears to have been the outcome with the billable time.

</comment></comment><comment><USER15> I especially like the notion of only hiring partners. It's a perfect example of measuring OUTPUTS like "total job cost" and "time to get it done" vs measuring INPUTS like "hourly rate"

</comment><comment><USER16> Cohen's comment about lawyers not grasping The Business side, and generally being overcautious rings true even for those of us who work for Giant Immoral MegaCorps.

A lot of what Giant Immoral MegaCorps _don't_ do is because of over cautious lawyerly advice, as near as I can tell. Or at least its due to what mid-level managers and directors think the lawyers will tell them.</comment>


Will Your Driverless Car Kill You So That Others May Live? - <AUTHOR> http://schwitzsplinters.blogspot.com/2015/12/will-your-driverless-car-kill-you-so.html <comment><USER2> Well, if I get a driverless car, I'm hoping the car's a deontologist rather than a utilitarian, so this sort of thing doesn't happen.</comment>


The mobile adblocking apocalypse hasn't arrived - <AUTHOR> http://www.niemanlab.org/2015/12/the-mobile-ad-blocking-apocalypse-hasnt-arrived-at-least-not-yet/ <comment><USER2> I run an Alexa top 10K website with an ad-based revenue model. iOS content blocking has not materially impacted overall revenue because

1\. Even though mobile accounts for about 50% of traffic, it only accounts for 25% of revenue anyway.

2\. iOS devices, for some reason, monetize way lower than Android. 25% mobile revenue breaks out into 10% iOS and 15% Android. Could be because the site uses Adsense and Google knows much more about Android users so can target ads better.

3\. Most mobile users don't download apps. I'm too lazy to dig up the research right now but IIRC the number of people who only use stock apps is about 50%. So people just haven't bothered to download content blocking apps; because they don't bother to download any apps.

So while the mobile _adblocking_ apocalypse is a nonevent, the fact that mobile monetizes way lower anyway means that over the last few years -- as mobile share of traffic has grown -- revenue per user has slowly eroded. That slow-moving apocalypse has already occurred. Adblocking on iOS hasn't done much to make things worse.

Adblocking on desktop continues to hurt, and has a much bigger impact.

<comment><USER3> I'm curious what you use for analytics? Many of the adblockers on both desktop and mobile are blocking analytics tracking making good numbers hard to come by.

<comment><USER2> Google Analytics for now but I'm thinking about running a secondary homegrown system for some basic telemetry.

</comment></comment></comment><comment><USER4> The problem is that there aren't good adblockers for mobile, in my experience.

On Android, Chrome doesn't support extensions so standard extensions are out. However, you can get Firefox Mobile for it, which is actually my favourite browser on Android, and it supports standard extensions so you can load ublock Origin for it. App-type adblockers seem to require rooting.

On iOS, I have yet to see a trustworthy/good blocker. I know of Purify, but the author is Chris Aljoudi and after the ublock thing, I'm never touching any of his code. Then there's the Adblock Plus browser thing, but I don't want to use a separate browser - plus, they soured me with the "acceptable ads" stuff. So basically what I want is ublock for iOS.

<comment><USER5> Focus by Firefox seems pretty good and (IMHO) is trustworthy: [https://support.mozilla.org/kb/focus](https://support.mozilla.org/kb/focus)

<comment><USER4> I got the impression it only blocks trackers, not ads, is that not so? Then it could be great.

</comment></comment></comment><comment><USER6> I've always been puzzled as to why everyone suddenly thought that the adblocking apocalypse was about to happen.

I mean, adblockers have been around for many years. Every browser that supports third-party extensions has adblockers available. Which, until this year, has effectively meant all browsers except mobile Safari.

So the one last holdout browser finally gains adblocker support, and this is going to be the tipping point that kills ads as a revenue source for web publishers? Does mobile Safari really have that big a majority of usage among all browsers? And even if it does, is such a huge majority of mobile Safari users going to install adblockers?

Though techical people tend to forget this, the internet is now mainstream, and the vast majority of web users are non-technical people. These are people who just use whatever software is built comes with their device, never change defaults, and never install any software whose installation/configuration is any more difficult than pressing "Buy" on the app store.

So, again, it always seemed strange to me that mobile Safari in iOS 9 (finally) getting adblocker support resulted in all this panic about the adblocking apocalypse being upon us.

<comment><USER7> One good reason, which I think may still have an impact in long-run is bandwidth.

At office or home on your cable/DSL/whatever you really don't care about bandwidth.

However on mobile, blocking ads has a bigger impact beyond aesthetics and basic UX

      * Pages load much much faster

      * Mobile users typically have data-plans with limits

I have an old unlimited plan with AT&T. I've just installed the ad-blocker from Mozilla. Previously when I had Peace I say my data usage drop by 30% (that I can account for. It may be higher). I typically use 3.2GB a month. It was down to 1.8GB (again, there are other factors)

<comment><USER8> You're definitely right to point at bandwidth, particularly since at least in the United States the major carriers have been pushing customers back to paid plans.

A closely-related issue is the nature of the content: it would be one thing if ads/trackers were just image content but a lot of them ship huge amounts of poorly-written JavaScript and CSS, usually marked as uncacheable or with a short TTL. I'm not talking about fly-by-night operators, either, but places like Google, Twitter, Facebook, etc. which have good web performance teams who are apparently strictly prohibited from talking to the ad / tracking / widget groups.

All of that extra bloat has a huge performance impact to begin with but it also dramatically amplifies any network delays. That means that most of the people who read a piece about blockers and try one are likely to notice a big performance win and that initial impression will stick with them for a long time.

</comment></comment></comment><comment><USER9> My preferred solution is to pay a middleman, or middlemen to provide metered access to nag-free content. The only thing keeping me from subscribing to NYT, WSJ, The Economist is that they're all expecting me to pay magazine subscription rates when the only articles I'm reading are links from aggregators like HN. I have zero desire to pour enough time into any one outlet to make the friction of managing yet another login worth it.

I don't want to see fucking pop ups asking me to subscribe, I don't want to see bitching about my adblocker, no, I'm not giving it up. Hell, even Wikipedia's yearly donation drive is getting annoying. Donating does not stop the nagging. I'm very close to finding a way to block that too, Wikipedia does not seem to offer a yearly donation option, so I need the nag to remind me to donate. I just wish I could switch it off.

Just quit fucking bugging me and let me read in peace. How much money do you need to make that happen?

<comment><USER10> I donate monthly automatically, and Wikipedia still nags me. Oh well, that's what Stylish is for.

</comment></comment><comment><USER11> What's interesting is that of the vendors interviewed in the article, only The Deck seems to be taking the approach of "Maybe they'll stop blocking us if we make less intrusive ads." Everyone else has seemingly flocked to the "Harasss, circumvent, or stonewall the adblockers" strategy.

<comment><USER12> I'm the guy quoted in the last segment from Slate, and I beg to differ!

"We're improving page load time, removing intrusive ads, and working toward fewer ads, but for those that stay we want them to be more impactful," Stern said. "We want the kinds of ads that people who read fashion magazines — that's not me — but the kinds of ads that people say are part of the experience of reading the magazine."

</comment></comment><comment><USER13> The barrier to entry to installing a mobile ad blocker (and then dealing with managing whitelists when shit doesn't appear correctly) is a lot higher than an ad blocker on desktop. I think that has a lot to do with the disconnect.

I also think that mobile ad blocking was something the industry feared -- and that the more in-touch tech community cared about -- but regular users simply don't think about as much. That said -- if mobile ads continue to get worse and if the process of managing a whitelist/using a mobile ad blocker can get easier, then maybe this will switch again.

The worst part of this to me -- and I say this as someone who makes my income basically b/c I'm a journalist who works for a publication who relies on advertising -- is that if the ad industry sees this as being much ado about nothing, the ad industry won't actually start trying to force better ad practices/blacklisting awful ad exchanges. And then we all lose.

</comment><comment><USER14> The current situation where mobile users have to pay to download ads, and potentially pay _much_ more than the ad displayer recieves, is a good target for consumer rights advocacy.

We've already persuaded the EU to clobber unfair roaming. The next step is to forbid mobile carriers from charging for ad downloads and permit them to block them instead (using their existing pornfilters).

(Mobile carriers are the one group that might be able to make micropayment- for-view work, but are too greedy to actually do it in a way beneficial for all parties)

</comment><comment><USER15> Owner of Ars Technica says something to the extent that people have installed adblockers because some sites they visit are too aggressive.

Hmm what sites are those ...pirated content streaming sites or bit torrent sites?

<comment><USER16> > Hmm what sites are those

My local newspaper is pretty bad. ABP blocks 16 items on this page: [http://www.gloucestershireecho.co.uk/](http://www.gloucestershireecho.co.uk/)

On mobile those 16 items really suck. They use energy which means I need to recharge sooner; they use expensive bandwidth; they use processor power on my underpowered phone. And all I want to do is to read the article (And I'm happy to pay to do that. There's currently no way for me to pay and have the ads turned off.)</comment></comment>


Show HN: Cron Color: Color Tool and Contrast Checker for Web Design - <AUTHOR> http://croncolor.com <comment><AUTHOR> I am primarily an angular dev and back in September I decided to learn some React. I have often used multiple websites for color conversions like HEX to RGB or RGB to HEX as well as for darkening/lightening shades etc so I thought it would be a good opportunity to combine all the features across the different sites I use into one convenient place instead of jumping around from site to site.

So the Cron Color Tool was born! The initial iteration wasn't so great so a couple weeks ago when I got some more free time I rebuilt the app (First time using redux too!) and added a contrast tool as well (feature request from coworker! :D)

The heavy lifting relies on ChromaJS and TinyColor2. The github is sort of a mess right now but I linked it in another comment if anyone is interested.

Would be interested in any feedback or suggestions on the UI (I usually work with a design team and find it hard to design on my own). As well as any suggestions anyone has for more tools to add onto this.

<comment><USER2> I really like the simultaneous views of all variations and complementary colors in all the modes.

Since you're asking about tools, What I also like about my current go-to, [http://paletton.com](http://paletton.com) is the URL dynamically changes the #hash to match the settings so you can just bookmark the page when you have things dialed in instead of clicking save. Also, you can vary the angles in the various complementary color modes.

<comment><AUTHOR> Oooh that's a good idea for the URL's!

Also Paletton is really cool!

</comment></comment></comment><comment><USER3> It looks very nice indeed. Is this open source, and if so, is there a link to where I can see it?

<comment><AUTHOR> I hadn't planned on sharing my github until I had a chance to clean up the project (it's super messy since I am just learning React)

But since you asked --> [https://github.com/JCron245/croncolortool](https://github.com/JCron245/croncolortool)

Be gentle :D

All the heavy lifting (color conversions etc) are done by ChromaJS and TinyColor 2

</comment></comment><comment><USER4> It's fast, looks cool, definitely bookmarked for future uses!

<comment><AUTHOR> Awesome I am glad you like it!</comment></comment>