Guido on Python - vezzy-fnord https://lwn.net/Articles/651967/ <comment><AUTHOR> I've been using Python 3.4 (and now 3.5) for development and couldn't been any happier. The async features, specifically, are amazing.

When starting a new project from scratch, I see no reason NOT to use python 3. Maybe if a few libs you depend heavily on are still not ported.

Even in that case, though, it might be a good idea to start on Python 3. First because most libraries are already ported[1], and second, you could try porting that specific lib, or maybe running it as a separate service using python 2.

I guess the problem remains about maintaining big, Python 2-based programs.

[1] - [https://python3wos.appspot.com/](https://python3wos.appspot.com/)

<comment><USER2> """When starting a new project from scratch, I see no reason NOT to use python 3. Maybe if a few libs you depend heavily on are still not ported."""

wxPython comes to mind... :-/ Also PyGame, although it seems that there are now development releases for 3.x.

<comment><USER3> wxPython largely[1] supports Python 3.

PyGame has worked on Python 3 for ages. Looking at [2] suggests it's from at least since the start of 2012.

[1]: [http://wxpython.org/Phoenix/docs/html/classic_vs_phoenix.htm...](http://wxpython.org/Phoenix/docs/html/classic_vs_phoenix.html)

[2]: [https://aur.archlinux.org/packages/python-pygame- hg/](https://aur.archlinux.org/packages/python-pygame-hg/)

<comment><USER4> Pygame supports Python 3 in development releases. If you try to grab releases from their site they're something like 6 years old.

</comment></comment></comment></comment><comment><USER5> Two quick notes, probably well-known in the Python community, maybe less so outside:

1\. The biggest hurdle to overcome when moving existing code bases to Python 3 (affectionally known as py3k) is third-party libraries. This is the main reason why there is some pressure on library authors to move their libraries to Python 3. Cf. [https://python3wos.appspot.com/](https://python3wos.appspot.com/) for some (very encouraging, IMHO) results.

2\. It's possible, in many cases, and without two much effort, to write (or refactor) code that is compatible with both Python 2 and Python 3. One great tool for this is the python-future project:

[http://python-future.org/](http://python-future.org/)

Cf. in particular: [http://python- future.org/compatible_idioms.html](http://python- future.org/compatible_idioms.html)

In some cases, it's even simpler. Flask, for instance, achieves it with a small 55 LOC module: [https://github.com/mitsuhiko/flask/blob/master/flask/_compat...](https://github.com/mitsuhiko/flask/blob/master/flask/_compat.py)

One last great resource is Lennart Regebro's book: [http://python3porting.com/](http://python3porting.com/)

</comment><comment><USER6> "If you were to design a new language today, he said, you would make it without mutable (changeable) objects, or with limited mutability."

<comment><USER7> In other words you'd make it slow without the ability to allow it to be fast.

<comment><USER8> > without the ability to allow it to be fast

Practically speaking, Python is still slower than a lot of languages that use predominantly immutable data structures. I think you'd want to go to a systems programming language for raw speed anyway.

<comment><USER7> Imagine immutable dict. How many programs in Python you know would still work?

<comment><USER9> Modern radix trees[1] can be as fast as the hash maps you'd find in a language's standard library while providing additional capabilities (ie fast ordered traversal). Making them immutable and persistent[2] is easy and only adds a bit of performance overhead.

Obviously programs that rely on communicating by mutating parts of a dictionary would have to be rewritten to use an immutable, persistent map—but they could still maintain similar performance.

[1]: Namely "adaptive radix trees" as described in "The adaptive radix tree: Artful indexing for main-memory databases" by V. Leis, A. Kemper, and T. Neumann <[http://www3.informatik.tu- muenchen.de/~leis/papers/ART.pdf>](http://www3.informatik.tu- muenchen.de/~leis/papers/ART.pdf>)

[2]: A persistent adaptive radix tree in Java: [https://github.com/ankurdave/part](https://github.com/ankurdave/part)

<comment><USER7> Thanks for the radix tree reference!

On the other hand, stating "they could still maintain similar performance" for immutable dictionaries is misleading at best (you are right for dictionary sizes approaching 0). Anyone can look up benchmarks on the Internet showing real-world performance of immutable data structures and make their mind up if they actually can deliver in their particular use cases.

Mutability could be _always_ used to boost performance on Von Neumann architecture if you know what you are doing. It's just becoming impractical due to increased complexity, pervasive security paranoia and the fact that there are very few people that can get things done right. If you want to contribute to advance your case, please create a competing computer architecture as fast as Von Neumann's, physically possible, but based on immutability.

<comment> semi-extrinsic > Mutability could be always used to boost performance (...)

For the extreme case, see the EQUIVALENCE statement in old Fortran.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> From the article: Von Rossum is still running Python 2.7 in production at his day job at Dropbox.

<comment><USER11> His commentary starts at 12.38 in the video; it's really very thoughtful.

Here are some choice quotes:

        ...and why should you switch?
        and ultimately, I'm not saying that you should switch.
        I would like you to switch... but I also recognize that it's difficult to
        switch, and it feels like a lot of hard work that you could also spend
        instead on say, improving the design of your website, or adding features
        to your application.

but...

        So... python 3 is just a better language and it is getting better
        over time.

        Python 2 on the other hand, is a fine language, and it will remain
        exactly what it is.

        Yeah, we'll fix the occasional bug, but its asymptotically approaching
        2.7 perfect, and its never going anywhere beyond there.

        So, that's why you should switch to python 3, because the only way
        to benefit from the good work the core contributors do, is by switching.

Seems reasonable to me.

Don't yell at people for using python 2; they have jobs and real like commitments to do things like running a company that pays people.

...but if you _can_ use python 3, you _should_ because it's only ever going to get better, while python 2 won't.

(and my apologies if I've transcribed that incorrectly, I did my best to capture exactly what he said)

<comment><USER12> Why did you edit in the implication that Python 3 is not applicable for people who have jobs and real life commitments to do things like running a company that pays people? That is your opinion, not Guido's. Python 3 is already being used in companies and it's plenty good enough for that. Including library support. Dropbox using 2.7 is no different from Dropbox avoiding PyPy, they are evidently ultra-conservative (and probably have a lot of old code they don't want to port).

<comment><USER11> That is my opinion, my Guido's. That's why it's not...

        In Quotes

I'm not saying python 3 isn't suitable for production.

I'm saying (and this is _my_ opinion): If you have to use python 2, then do. If you can use python 3, then do.

 _THIS_ is Guido's opinion:

        I would like you to switch... but I also recognize that it's difficult to
        switch, and it feels like a lot of hard work that you could also spend
        instead on say, improving the design of your website, or adding features
        to your application.

...at least, I have to assume so, because _that 's what he actually said at the keynote_.

So, take what you want from that, but don't accuse me of 'editing in' some implication.

If you're happy using python 3; then be happy.

...but, if you shout at someone for using python 2, I think you're a douche, because there are real life reasons some people keep using python 2.

...and I. And..., clearly, Guido, acknowledge that.

You don't have to. You can have your own opinion all you like... I honestly couldn't care less.

</comment></comment></comment></comment><comment><USER13> > There are also bugs that are feature proposals that do have patches > attached, but there is a general hesitation to accept changes like that > because there is concern that they aren't useful, won't mesh with other > similar language features, or that they will cause backward > incompatibilities. It is hard to take patches without breaking things all > the time.

Obligatory: [https://xkcd.com/1172/](https://xkcd.com/1172/)

</comment><comment><USER14> I agree with Guido that the thing I hate the most in Python is packaging in general. I find Ruby's _gems_ , _bundler_ and _Gemfile.lock_ to be a much more elegant solution.

On the other hand, I really like the explicit imports (when used properly). Less magic that makes code navigation way easier.

<comment><USER15> As a distro packager, I find Python's packages to be much better and easier to integrate than Ruby gems. I've had no shortage of troubles with Ruby gems: requiring on the git binary to build the gem (even in a release tarball), test suites not being included in the gem releases on rubygems.org, rampant circular dependencies, etc. Python's PyPI has caused me no such issues.

</comment></comment><comment><USER11> Why take someones word for it?

Watch the video and you can see what he actually said yourself; [https://youtu.be/yCg3EMf9EYI?t=8m36s](https://youtu.be/yCg3EMf9EYI?t=8m36s)

<comment><USER16> It takes much less time to read an article. AFAIK LWN does a great job. Still, thanks.

</comment></comment><comment><USER17> _" Dropbox has a lot of third-party dependencies, some of which cannot even be rebuilt from the sources that it has. That is generally true of any company that has millions of lines of Python in production; he also saw it at Google. That also makes switching hard."_

Why can't these dependencies be built from the source _they have_ presumably the same version as the currently build binary? Is it because other components of the build chain have changed or what?

As a civilian, I found this situation mildly disturbing.

<comment><USER18> At least in my experience, it's very common for vendors to provide you with the source (through a licensed agreement) but deliberately limit your ability to build it. Sometimes this is through licensing, sometimes it's by excluding some key portions of the build chain (e.g. internal libraries that don't directly relate the the functionality of the software).

At any rate, at my current employer, we have lots of things where we have the source as well as the libraries and headers, but don't have the capability to build those libraries from source.

It sounds silly, but it's still vastly better than having no source access whatsoever. At least for us, we often need to understand an implementation detail of a proprietary library, but being able to actually build things is secondary.

<comment><USER17> Good heavens - 'ransom strips'[1] in software. I had no idea.

Best of luck with it all...

[1] [http://www.rics.org/uk/knowledge/glossary/ransom- strips/](http://www.rics.org/uk/knowledge/glossary/ransom-strips/)

</comment></comment></comment><comment><USER19> I never understood what kind of changes Guido made from 2.7 to 3.0 that kept everyone off.

<comment><USER20> There are both syntactic as well as behavioural changes.

A simple example is the print statement, in Python 2 you could do:

        print "Hello World!"

Whereas in Python 3 you have to do:

        print("Hello World!")

Now obviously, you can easily change this programmatically. Things get harder when you use more advanced print statements, for example adding a "," at the end to prevent a newline, printing to different targets, new ways of using placeholders, et cetera.

Then there is the fact that strings are no more in Python 3, but they are Unicode. Again for average strings that's not really a problem, but when you start using bytes, special characters, et cetera.

There is a tool to translate programs from Python 2 to Python 3, but it does not catch everything, and you still have to fix stuff manually.

<comment><USER16> Most of the common 2.x programs don't depend on the change in Unicode semantics or whatever, but they really don't work simply because really unnecessary changes in the way print and formatting must be written in 3.x. It was technically possible to make much more programs still work while still introducing the more convenient syntax and it was in my opinion bad judgement not to do so.

In my view, those that made the decision took to seriously "there's only one way to do it." Zen of Python actually says: "There should be one-- and preferably only one --obvious way to do it." Even if the obvious way for 3.x can be different from 2.x, I can't imagine any real-life effects from allowing the alternative syntax for formatting and printing except for a few special- case branches somewhere in the source. Yes, then the people would continue to write it with the "wrong syntax" in the new programs too, so what?

<comment><USER21> In Python3 print is now a function, and no longer a keyword. The syntax got strictly simpler that way, and semantics, too.

You could try to make the interpreter guess when you want to use print as a function and when as a keyword. But that would be horribly complicated, and is bound to go wrong.

<comment><USER16> > But that would be horribly complicated

No it wouldn't. There would be some corner cases, but mostly it would just work for the existing code whereas, from the perspective of the 2.x users, now it just doesn't. I know, I write compilers for living. The maintenance cost from the point of view of the compiler maintainer would almost invisibly increase (there are much less trivial things to worry about) the benefit for the current users would be significant. The reason it wasn't done is much more "political" ("just one way to do it") than technical.

Specifically: once it's declared that _print_ is a function, you don't need to treat the string print as keyword. Then you can notice comparing _print expression_ and _print( expression )_ that _if you know_ that _print_ is a function the braces aren't giving you any new information. So the difference is do you want to encode the knowledge "print is a function" in the compiler or not. That encoding is trivial, and even if it can be called "a special case" isn't anything that anybody would spend any significant energy maintaining. It obviously appears to be "less elegant" to describe your compiler having "a special knowledge that print is a function" but there are even ways out of that: you can generalize such constructs (function calls without using the return value). But then "there would be more than one way to do it."

But orders of magnitude more 2.x Python programs would "just work" when started under a such 3.x. Of course, once you accept that the transition should be less painful, you'd need provide the way for libraries to also have the "newer" and the "older" ways to do it. "More than one way" is potentially contagious. But, sometimes "worse is better."

<comment><USER21> OK, as a litmut test, how would your proposed compromise Python variant deal with the following program

        print

As Python 3, this program does nothing. As Python 2 it prints a newline.

I do agree that Python could have adopted the ML/Haskell syntax for calling functions that does away with most parens. But I don't think anyone in Python land would have swallowed that.

<comment><USER16> It's clear, in Python 3 that would have to behave as in Python 2 if our goal were to have most of existing Python 2 programs "still working" when people give them to Python 3.

</comment></comment></comment></comment></comment></comment></comment><comment><USER22> > Python 3 is a "much better language" than Python 2, for one thing. It is > much easier to teach.

[citation needed]

I find it much easier to teach language, where range(5) _is_ a list [0,1,2,3,4] rather than an iterator. Same thing for .keys() and .items(). For people learning their first language iterators are not simple.

That said, right now I am teaching Python 3 rather than Python 2 (mostly due to unicode and division). Though, I have mixed filling towards Py2/Py3 transition (it's not all web dev, where all serious projects are getting ported; some projects are written only once and therefore changing to Py3 means letting them die).

<comment><USER23>
        I find it much easier to teach language, where range(5) _is_ a list [0,1,2,3,4]

I thought so too at first but I think it was because I dislike change. When I really began to use Python 3 in earnest I came to like the idea because I've almost never taken the value of range. And teaching loops without intermediate variables is much easier.

For example I would never teach this in Python:

        for i in range(10):
            print mylist[i]

I would always teach this:

        for i in mylist:
            print(i)

Which is clearer and easier to read? Did I have to teach you the Iterator protocol in order to understand that? No. It almost never comes up until you're an advanced Python user.

In the rare case where I do need to take the value of range it becomes much more explicit:

        nums = list(range(10))

If you're an old-time Python 2 user you might ask why you have to pass range to the list constructor when it returns a list itself. But if you're a new Python programmer learning Python 3 you don't have those expectations: range is something you loop over and list is happy to do that for you. You could also write it out long-hand:

        nums = [i for i in range(10)]

Which could be nicer if you wanted to transform the numbers or add some conditional filters.

Over all I find Python 3 to be much more _consistent_ in its design than Python 2 and thus _easier_ to teach.

<comment><USER22> The problem is that:

\- object castings are not nice (for code brevity/clarity - things, which Python aims to bee good at),

\- if objects are similar, it's pain to explain the difference (it's not a thought - it's a thing I had to deal with many times).

In particular, if one is advanced programmer in general, or at least has a firm grasp of Python basics, iterators are nice. But for newbies, they are harder. (And it's even harder to hand-wave that they are "somethings, which can be casted into lists".)

As a side note I dislike possibility of using tuples as iterables. It breaks "There should be one-- and preferably only one --obvious way to do it." i.e. using tuples in place where one (conceptually) should use a list.

And again, explaining difference to newbies is painful ("tuple is a handicapped list").

<comment><USER23> I think the real problem here is pedagogy.

I don't begin teaching someone programming by explaining objects and types.

I generally start by introducing three fundamental concepts: _variables_ , _conditionals_ , and _loops_. And I keep it simple to begin with:

        a = 1
        print(a) # 1
        a = 2
        print(a) # can you guess what it will print?

Then I add conditionals:

        if a == 2:
            print("it is two!")
        else:
            print("it is not two...")

And I only really cover 'for' at first:

        groceries = ["ham", "cheese", "eggs"]
        for item in groceries:
            print(item)

Along the way I explain some of the primitive data types: string, integer, float; and containers such as list and dictionary. And that is usually enough to get started with simple tasks. I tend to elide what functions are and just call them "commands" until later on so that I can demonstrate why looping is so cool:

        import turtle

        turtle.setup()

        for amount in range(100):
            turtle.forward(amount)
            turtle.left(75)

And that usually drives home the point: grouping commands together to repeat them as many times as we wish using loops; variables hold data; and conditionals let us do different things depending on whether something is True or False.

I haven't had much trouble with this approach for years. I don't even get to explain iterables to newbies most of the time! Once in a while someone tries something like:

        a = "foo"
        a + 1

And they get TypeError or they pass in an object of the wrong type to a function and get ValueError. Early on this usually isn't a problem because some things just don't make sense like adding numbers and strings. However it can get confusing when learning how to look up functions and use them because we can only informally document what kinds of things a given function will take in its signature... it's an advantage and disadvantage of the duck-typing philosophy. It's a wart but one that I haven't really encountered with anyone I've taught until they're pretty far along and able to help themselves.

</comment></comment></comment></comment><comment><USER24> Feels like people will be urged to move to Python 3 due to the new features... And yet I'm thinking that Python 4 will happen before many have been able to move to Python 3. :-P

<comment><USER25> Because Python 4 will be only "whatever comes after the last 3.x", with no backwards-incompatible changes, it won't matter: porting to "python 4" will require the same effort as porting to 3. So start now ;)

</comment></comment><comment><USER26> I would really love to ask Guido what he thinks of the Nim programming language.

<comment><USER27> Well, he's on Twitter and G+.

</comment></comment><comment><USER28> python needs her alan cox!</comment>


Using OpenX? Time to upgrade - Serious vulnerability found - <AUTHOR> http://blog.sucuri.net/2010/09/openx-users-time-to-upgrade.html

<comment><USER2> I got bitten by this too, and when I discovered why I was livid.

[https://svn.openx.org/openx/tags/2.8/openx-2.8.6/plugins_rep...](https://svn.openx.org/openx/tags/2.8/openx-2.8.6/plugins_repo/openXVideoAds/www/admin/plugins/videoReport/lib/ofc2/ofc_upload_image.php)

This third party plugin is automatically installed and enabled by the installer. No admin authentication, wide open access to upload and run PHP.

More details can be found at [http://www.kreativrauschen.com/blog/2010/09/09/critical- vuln...](http://www.kreativrauschen.com/blog/2010/09/09/critical- vulnerability-in-openx-286-open-flash-chart-2/) and if _www/admin/plugins/videoReport/lib/tmp-upload-images/_ exists, it's likely your server has been compromised.

<comment><USER3> Dude, if u need a decent ad server as an alternative to OpenX, I'll suggest. Trafficspaces.

I designed it and it's one of my proudest pieces of work (if I may say so myself) :)

Warning: its a premium service

<http://www.trafficspaces.com/tour/>

<comment><USER4> Looks neat but $99/month for 1M impressions ain't much. Overpriced IMHO.

Assuming $1 CPM, a site will be making $1000 off of that. Your taking a 10% cut.

$100 should get you 50,000,000 impressions, at minimum.

<comment><USER3> Think about it this way, if you can segment your traffic into valuable niches (e.g females, 18-30 in NYC, who are searching for shoes), you can sell your traffic at a far higher CPM.

That's where Trafficspaces excels - ad targeting.

All impressions aren't equal so you shouldn't treat them as such. The key is being able to unlock the value.

</comment></comment></comment></comment><comment><USER5> Even if i had a limited experience with it this doesn't surprise me, i still don't understand how big site can use or have used (list on openx site) this script to manage their own ad network.

Lots of issues with the db and with the upgrade procedure, sometimes has weird issues hard to identify and solve(i.e. things that stop working without any apparent reason)... Maybe i'm too critic, but i felt it was just another crappy php app.

<comment><USER6> Notwithstanding that the code is a maze to find your way through.

</comment></comment><comment><USER7> This is particularly bad news when you couple it with the Flash vulnerability that's gonna be open for a few weeks.

You exploit a couple big OpenX installs, put some Flash ads in there and infect a whole lot of users.

On a sidenote, are there any less complex, preferably open-source, alternatives to OpenX?

<comment><USER8> As far as I know, there really isn't much out there when it comes to open- source. There is OASIS (<http://oasis.sourceforge.net/>), but I don't think it is in active development.

Personally, I'll be moving a couple of openx installs to Google DFP (<http://www.google.com/dfp/info/sb/index.html>) in the next few days. I've heard some good things about AdButler (<http://www.adbutler.com/>) but I have yet to use it myself.

<comment><USER9> Never heard of Google DFP. I wonder if the data lag is similair to Adwords.

The nice thing about OpenX was installing it on your own hardware.

Thanks for the links.

<comment><USER10> We use DFP at VBM after switching from a hosted OpenX install. DFP suffers from the lag, but in my experience, OpenX also exhibited lag (though not to the same level.) It takes roughly 30 minutes to traffic ads, which is enough time to be a pain in the rear... especially if you mess up the ad code.

<comment><USER9> Good to know. Thank you.

</comment></comment></comment></comment></comment><comment><USER4> It's amazing to me that OpenX is trying to be looked at as a 'leader' in this space and they even do hosted ads, but they can't keep their servers up for a security patch release.

<comment><USER5> As someone said below, alternatives are really limited, guess that's the result of inexistent competition.

<comment><USER3> There are alternatives. Google 'em

[http://www.google.com/search?client=ms- rim&hl=en&q=s...](http://www.google.com/search?client=ms- rim&hl=en&q=self%20service%20ad%20manager&ie=UTF-8&oe=UTF-8&channel=browser)

</comment></comment></comment><comment><AUTHOR> Really bad, specially considering that openx.org has been offline for a while and we are seeing many attacks in the wild.

<comment><USER11> OpenX is being DDOS'ed, that's why the site is down.

</comment></comment><comment><USER9> Has OpenX been suffering from security vulnerabilities for awhile now?

<comment><USER12> Yes, it seems that over the past 6-12 months it has been one security vulnerability after another with OpenX -- which is why I switched to Google DFP 2 weeks ago.

</comment></comment><comment><USER9> What would be needed to create a secure equivelent of OpenX in terms of architecture and performance?

Is it more than a glorified image/snippet server and counter?

<comment><USER2> It's slightly more complicated than that, and you'd probably have to work in advertising to understand why.

Ad zones, campaign weighting, frequency caps, companion positioning, exclusive campaigns, delivery limitations (language, user-agent, geographic targeting, time of day, section), probability calculation, detailed statistics, and the ability to give a client a login to view their own stats. These are just a few of the features.

If all you need is a glorified image/snippet server and counter, you could probably just write one.

<comment><USER3> I feel you bro. It is definitely complicated. I've got a few gray strands to prove it whilst developing Trafficspaces (a SaaS ad manager).

It started as a hobby but once I got into it, I got sucked in by the challenge of simplifying all that complexity.

For most people, the adserver is just the UI. The complex calculations, ad targeting, and scalability issues are just abstracted away into the abyss. Then there are those heidenbugs that occur at a frequency of 1 in a billion transactions, which can consume your entire weekend! Grrrh!

I kinda feel sorry for OpenX though. Their codebase is probably unmanagable by now. I'm sure their devs wish they could just throw it all away and start afresh.

</comment></comment></comment><comment><USER13> Their main site is down. Anyone want to enlighten the rest of us about what OpenX is? Something about ads, it seems; can anyone be more specific?

<comment><USER14> It's an open source ad server.

<comment><USER13> Fair enough; in that case, why would I use it instead of (say) nginx? Is it an optimization thing or a logging thing?

<comment><USER15> Slight misunderstanding. It's a PHP webapp that is an ad server. Not a web server. Having seen the codebase... it's evil.

</comment></comment></comment></comment><comment><USER4> It's an adserver. Pretty simple.</comment>


Thirteen planets and counting - <AUTHOR> https://blogs.egu.eu/divisions/gd/2018/07/25/thirteen-planets-and-counting/ <comment><USER2> I like the term "world" to denote a roughly spherical body with evidence of interesting dynamics happening, or at least having happened. It's poetic and evocative—but not excessively so. Emily Lakdawalla of Planetary Society fame uses it in that sense.

</comment><comment><USER3> Although this is explicitly at odds with the author's intentions, I don't think there should be an overlap of any kind between "moon" and "planet." So I'd modify his definition of "A planet is a sub-stellar mass body that has never undergone nuclear fusion and that has sufficient self-gravitation to assume a spheroidal shape adequately described by a triaxial ellipsoid regardless of its orbital parameters" to add: "excluding any object that orbits a point located within a planet." Thus our Moon would remain a moon but Pluto-Charon could be a double planet because the point they revolve around is not within either body.

<comment><USER4> It's a weird issue because really it's all vaguely arbitrary distinctions.

There's nothing really different between the various celestial bodies and at the same time they're all so vastly different from each other. You have planetary satellites larger than some planets. A couple of planets that are pretty much failed stars.

Even things like comets and asteroids, they're really just defined by behavior. I mean the definition of asteroid is basically "not a planet or comet".

It's basically all "stuff in space".

<comment><USER5> > arbitrary distinctions.

Exactly, the current definition of planet is not that useful. If a moon happens to exist in the goldilocks zone it could easily support life even if it's sitting next to a Jupiter sized planet that does not.</comment></comment></comment>


How PEP-572 would change the standard library - <AUTHOR> https://github.com/python/cpython/pull/8122/files <comment><USER2> It's going to look quite alien at first, but this is a great demonstration of how this will actually help the language. The regexp examples are a common one always felt overly verbose when I do that. The risk is that it makes it very easy to write overly terse code, I don't think I'm the only dev who's ever written a "clever" list comprehension only to come back to it later and struggle to get my head round it.

<comment><USER3> Seeing this in action, I think I kind of hate it. One of the basic aspects of idiomatic Python that I like the most is the fact that doing multiple things at once is discouraged. Multiple assignment (x,y = a,b) is possible but not typically done except where it conveys special intent.

This seems to be replacing

        foo = check_foo()
        if foo:
            do_foo()

with

        if (foo := check_foo()):
            do_foo()

which goes against that idea.

<comment><USER4> This _can_ replace that, sure, but I think it's more meant to be replacing things like:

        foo = check_foo()
        while foo:
            do_foo()
            foo = check_foo()

With

        while foo := check_foo():
            do_foo()

which is a case that hasn't had an elegant solution in the past. Another, if example, where you want to call a function based on the result of a check, but don't want to make that check more than once:

        foo = check_foo()
        if foo:
            do_foo(foo)
        else:
            other_foo = check_other_foo()
            if other_foo:
                do_other_foo(other_foo)
            else:
                # Continue

with

        if foo := check_foo():
            do_foo(foo)
        elif other_foo := check_other_foo()
            do_other_foo(other_foo)
        elif .....:

Yes, all of this has been possible and there are other ways to do it, but this expresses the problem very concisely and has less nesting at the cost of a slightly more complicated syntax. I find these rewritten examples easier to parse than the originals.

Pulling things out of comprehensions is pretty neat too.

Other than a few cases (e.g. these) I don't see this suited or intended for extremely wide usage, but no worse than any other complex idiom that people can overuse.

<comment><USER5> I agree the check_foo() duplication was bad, but was this workaround really so bad?

        while 1:
            foo = check_foo()
            if not foo: break
            do_foo(foo)

Its only downside was taking 2 extra lines, not actual understandability.

<comment><USER6> It makes the intent of the loop less clear, since now the condition is tucked away somewhere in the middle of the body, even though it's really a precondition.

<comment><USER5> I'm torn on this, because although it's easy to say that for a toy example like this, when these "preconditions" evolve over time, you get things like:

        while 1:
            now = time()
            if now > prev_time + UPDATE_TIME: report_progress()
            foo = check_foo()
            if not foo: break
            if foo < 0: print_error(); break
            do_foo(foo)
            prev_time = now

Now, was it really dictating a precondition? Or was it actually dictating a postcondition? Or both or neither? Would you really want these responses to dictate the locations of the condition in the _syntax_? Because it seems to me that forcing yourself to put these conditions in the loop condition just makes the code extremely ugly and difficult to evolve (requiring you to duplicate code or have very convoluted expressions with assignments).

</comment></comment></comment></comment></comment></comment><comment><USER5> This looks awful. It was an _upside_ of Python that it had simple syntax, so that it had less cognitive overload. Without at least adding proper scoping and variable declarations to at least add functionality, having two assignment syntaxes seems worse than not having it at all.

</comment><comment><USER7> This is so ugly, especially the C-like parens. I wish they had gone with the pythonic _as_ syntax:

       if rawdata.count("\n", i, j) as nlines:
          self.lineno = self.lineno + nlines
          ...

<comment><USER8> Using 'as' is prettier, but a pain to read, as your eyes have to go all the way to the end of the line

You can still use the old way if you think this new one is ugly, but to be honest I think it's going to be an improvement.

<comment><USER9> I don't understan what you mean that you have to "go all the way to the end".

with

        if my_data := my_function():
            do_stuff(my_data)

the left-hand side of the assignment is completely irrelevant to the if statement. Here you have to go "all the way to the end" just to see what that clause of the if-statement is.

With the _as_ -syntax, the if-statement and the clause are placed together.

However, I do find the if-as sentence kinda weird, when trying to understand it using normal english.

<comment><USER5> > the left-hand side of the assignment is completely irrelevant to the if > statement

I guess is subjective? To me, that's the first thing I want to know about an assignment -- what is being assigned to? Especially if you try to keep your programs reasonably functional, then it's in fact _the_ thing that matters, since the right-hand side would be side-effect-free.

Another way I see it is that an assignment expression is like solving a problem: first you'd ask "what did they solve for?", then you ask "how did they solve for it?" \-- not the other way around.

</comment></comment></comment></comment><comment><USER10> Note that this doesn't actually encompass all the possible usages of the PEP-572 operator in the standard library, of which there appear to be 312 more candidates (and a further 100 in the rest of CPython):

      root@8d88e1e678b0:/cpython# astpath -A 1 "//Assign[(targets/Name/@id = following-sibling::*[1][name(.) = 'If']/test/Name/@id)]" > pep-572.txt
      root@8d88e1e678b0:/cpython# grep "Lib" pep-572.txt | head -20
      ./Lib/argparse.py:284   >        help = self._root_section.format_help()
      ./Lib/argparse.py:285            if help:
      ./Lib/argparse.py:2275  >        a = [action for action in positionals
      ./Lib/argparse.py:2276                if action.nargs in [PARSER, REMAINDER]]
      ./Lib/cmd.py:300        >                    doc=getattr(self, 'do_' + arg).__doc__
      ./Lib/cmd.py:301                             if doc:
      ./Lib/cmd.py:356        >        nonstrings = [i for i in range(len(list))
      ./Lib/cmd.py:357                                 if not isinstance(list[i], str)]
      ./Lib/compileall.py:123 >        mo = rx.search(fullname)
      ./Lib/compileall.py:124          if mo:
      ./Lib/dis.py:386        >    show_lineno = linestarts is not None
      ./Lib/dis.py:387             if show_lineno:
      ./Lib/dis.py:403        >        new_source_line = (show_lineno and
      ./Lib/dis.py:404                                    instr.starts_line is not None and
      ./Lib/enum.py:86        >                already = set(value) & set(self._member_names)
      ./Lib/enum.py:87                         if already:
      ./Lib/enum.py:153       >        invalid_names = set(enum_members) & {'mro', }
      ./Lib/enum.py:154                if invalid_names:
      ./Lib/enum.py:848       >    negative = value < 0
      ./Lib/enum.py:849            # issue29167: wrap accesses to _value2member_map_ in a list to avoid race
      root@8d88e1e678b0:/cpython# grep -E "\.py\:[^w]+>" pep-572.txt | wc -l
      412
      root@8d88e1e678b0:/cpython# grep -E "/Lib/.+\.py\:[^w]+>" pep-572.txt | wc -l
      312

</comment><comment><USER11> For some reason the opposition on this matter is really vocal. I'll make the controversial but extremely low risk prediction that this feature won't be the death of Python and that most will come to find it relatively harmless like fstrings once the pundits are done milking it.

<comment><USER12> I think a large part of it is that if you've read thousands of lines of python code and have all the syntax in your head, it's painful and annoying to suddenly be reading python code that is and looks different. I found this commit really grating to read somehow but I reckon in 3 months it'll be natural.

</comment></comment><comment><USER13> Very nice, although I would hate to be the one to review that patch. A large number of small "fiddly" changes, it's easy to be afraid that copy/paste occurred and that some error snuck in.

<comment><USER14> That patch is not meant to be applied. It has been created to demonstrate the difference that the new syntax would make on code actually used in production.

</comment></comment><comment><USER9> As someone who is not very good with grammars of programming languages, what is wrong with having

        if a = b():
           foo(a)

I know it doesn't work, but why couldn't it?

<comment><USER4> This is addressed in the PEP: [https://www.python.org/dev/peps/pep-0572/#why- not-just-turn-...](https://www.python.org/dev/peps/pep-0572/#why-not-just- turn-existing-assignment-into-an-expression). Their argument seems to be that 'if a = b()' is too similar to 'if a == b():' and thus doing that would cause more mistakes, whereas at the moment (?) they are caught by the parser.

<comment><USER15> Yes. This mistake is very common in C. So much so that it's considered good practice to put the constant first when doing equality comparisons:

        if (10 == x)

This way accidentally missing a "=" triggers a compiler error instead of quietly doing the wrong thing.

<comment><USER16> Called Yoda conditions.

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

</comment></comment></comment></comment><comment><USER17> Am I wrong to assume there was nothing wrong with the previous code and these changes are gratuitous (e.g. just because we can)?

<comment><USER18> Decorators, context managers, list comprehensions, multiple assignments, keyword arguments are all gratuitous. Should we remove them?

<comment><USER17> Which ones are you referring to?

<comment><USER18> These are all merely syntactic sugar that replicate functionality available in Python that would otherwise be done in a more awkward way. This PEP is doing the same thing.

<comment><USER17> My question is about the value of this particular patch-set not about usefulness of the PEP.

"The point of this PR is just to open discuss on coding style: discuss when assignment expressions are appropriate or not."

There is no new code and the author's intention seems to be more than a "let's see how it would look like" patch. (Discussing where to use new syntax on existing code is a waste of time unless the intent is to apply the changes)

</comment></comment></comment></comment></comment><comment><USER19> `do while` loops are (effectively) coming to Python. Yay!

<comment><USER20> I was going to say - its application in this while loop is really nice I think:

[https://github.com/python/cpython/pull/8122/files#diff-0ad86...](https://github.com/python/cpython/pull/8122/files#diff-0ad86c44e7866421ecaa5ad2c0edb0e2L946)

<comment><USER5> Unfortunately it's also directly at odds with Python's own EAFP [1] philosophy, which is to raise exceptions rather than return special values (StopIteration etc.). It's no longer clear to me which one the proper Python coding style is. Are we supposed to switch to returning special values instead of raising exceptions now?

[1] [https://docs.quantifiedcode.com/python-anti- patterns/readabi...](https://docs.quantifiedcode.com/python-anti- patterns/readability/asking_for_permission_instead_of_forgiveness_when_working_with_files.html)

<comment><USER21> Where do you see it returning special values? While loops have always stopped on a falsy value.

<comment><USER5> The issue is the readBlah() methods. What should they do when they can't read anything? They can return either 0 or an empty result (non-special falsy value), return -1 (special truthy value), return None (special falsy value), or raise an exception. In this case it seems they chose the first option, but this is at odds with something like next(iterator), which similar but raises an exception. It's not clear to me which is the proper pattern anymore, now that they're encouraging assignment.

</comment></comment></comment></comment></comment><comment><USER22> Awful syntax. If then =?, not =: which already is the pascal assignment and perl binding operator.

<comment><USER23> Welcome to Python, where proponents will proudly claim that the language is easy to read and intuitive.

I was reading the discussion above, where they argue whether a statement like

      if (foo := check_foo()):
            do_foo()

is readable. The entire time I'm thinking Willis. Tango. Foxtrot! This is the kind of stuff us C / AWK programmers do all of the time precisely because it's concise, elegant and intuitive (not to mention well understood), and these guys are struggling since it turned into a huge discussion. Made me wonder if we're in a programming kindergarten here or what?

<comment><USER6> This is also the kind of stuff that you C programmers write bugs with all the time, by mistaking = with ==; to the point where most C compilers these days would just flag something like if(a=1) as a warning with default settings.

Really, all this mess is the legacy of poor choice of = and == as operators back in C (or rather, B). Pascal really had it right with the assignment being very distinct from comparison, such that it's pretty much impossible to confuse the two. The sole reason for that design decision in C, so far as I know, was that assignments occur slightly more often than comparisons, and so they wanted it to be a single character. But I seriously doubt that it was worth all the bugs.

<comment><USER23> "This is also the kind of stuff that you C programmers write bugs with all the time, by mistaking = with ==; to the point where most C compilers these days would just flag something like if(a=1) as a warning with default settings."

No it isn't; we're not beginners.

I learned Pascal before I learned C. Hated the retarded := as superflous.

<comment><USER24> If that were true, exist Yoda conditions would not.

</comment></comment></comment></comment></comment><comment><USER25> Didn't read this pep, but have they considered C-like assignment, like:

        if (foo = func()) is not None:
            ...

I find this more readable and uniform than using := construct.

<comment><USER26> Because it's easy to accidentally type foo = func() when you meant foo == func(). That mistake happens so often in C that modern compilers warn you unless you put an extra set of parentheses around it.

It would also cause ambiguity with keyword arguments. You'd have to write foo((x = 3)) because foo(x = 3) already has a meaning. I think foo(x := 3) is clearer.

Maybe it would have been best to use := for all assignment. But it's too late for that.</comment></comment>


ADHD, Texting, and Driving - <AUTHOR> http://www.latimes.com/news/science/sciencenow/la-sci-adhd-texting-driving-20130812,0,6290321.story

<comment><AUTHOR> Flash the lights on a car whenever a text message is sent from a phone inside of it.</comment>


Did the White House Declare War on Russia? – The Nation - <AUTHOR> https://www.thenation.com/article/did-the-white-house-declare-war-on-russia/ <comment><USER2> Clickbait title, article is mostly speculation. The US did not make any act of aggression or declare war. Joe Biden (spelled блядь сука in Russian I think ;)) said some dumb shit about sending Putin a "message".

The article leads with subtitle "Vice President Biden announces a forthcoming covert strike against Russian president Putin..."

1) We don't announce covert operations. 2) It's personal now? US vs. Putin himself? lol 3) The author declares "presumably in the form of some kind of cyber-attack" without citing where this comes from at all. You get the idea... I could go on and on.

Please don't post this drivel here, articles with journalistic integrity and facts are preferred.

</comment><comment><USER3> I agree that the article title is click bait, but there is useful information in the article: there is no way to know who exactly performs these hacks if they are done competently, and the news media concentrating on civilian deaths in one war zone while ignoring them in others, where the deaths are inconvenient truths to the narrative our media is pushing on us.

</comment><comment><USER4> "No."

Saved you a click.</comment>


The Russian - <AUTHOR> http://www.hemispheregames.com/2010/12/18/the-russian/

<comment><USER2> _But a few weeks later, when we were almost ready to submit Osmos (for iPhone) we tried the submission process again and - lo and behold - the name Osmos was available! We're not sure what happened actually, but we suspect we owe someone at Apple a thank you._

I'm pretty sure it's because of this rule in the system that exists to prevent name squatting (from the iTunes Connect Developer guide pg.70):

"Once you have created your app, and it is in the state Prepare For Upload or Waiting For Upload, you will have 120 days (4 months) from your creation date in iTunes Connect, to deliver a binary to Apple. If you do not deliver a binary before the 120-day deadline, your app will be deleted from iTunes Connect. As a result of this deletion, your app name will be able to be used by another developer and you cannot reuse the app name, SKU or Bundle ID."

</comment><comment><USER3> When I got to the end of the email, I kind of figured the Osmos development team might have felt some compassion. The bottom line is there is a presumption of guilt here when this guy could have been entirely honest. He even offered to take it down if they showed documented evidence that they owned the name. I didn't find his request for compensation to be in line with what a squatter would request. Perhaps I don't the know the full extent of the squatting issue for apple.

</comment><comment><USER2> So at what point is someone "cybersquatting" if they reserve a name in advance of developing a product? It doesn't sound like "The Russian" set out to squat on the name solely hoping to get someone to pay up but did take advantage of the situation once it presented itself.

<comment><USER4> They said they began development before an iOS version of Osmos was announced, but if they were aware of the original game (and it sounds like they may been), a reasonable person would probably have concluded it wiser to choose a new name. Even if they weren't aware, I can't imagine settling on a product name without searching for it. Furthermore, instead of costs to rebrand their work (which would have been questionable enough), they asked for full development costs plus anticipated sales, which would suggest they had no intention of releasing anything.

</comment></comment><comment><USER5> How this piece would sound if you replace "The Russian" by "The Jew", "The Black", or "The Lady"

<comment><USER6> You know, most people I've met don't mind being called by their nationality or hearing a joke involving nationalities. Now, granted, I've met many more Russians than any other nationality, but I think we're more like the rest of the world in this regard than Europe or USA where political correctness gets insane. And what the hell could possibly wrong with "The Lady", let alone the other two, if that's the way she calls herself?

<comment><USER7> I think the point is more that it is reinforcing a negative stereotype, that all Russians pirate software, squat on names, etc.

<comment><USER8> Ok, this will sound bad, but who really acted to reinforce that stereotype?

<comment><USER7> How do we even know s/he is Russian?

<comment><USER9> by that я in his email. :)

no-one can put я and sign as The Russian except Russians.

(this would be a name squatting)

<comment><USER10> Ahem... Ukrainians, Belarusians and Tatars?

<comment><USER7> I think fedd was kidding... don't forget Bulgarians and Tuvans.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> As a site note: Make sure you spend the (roughly) $500 bucks to get your trademark on file with the USPTO. While this doesn't grant you rights to your name or make it yours, it does get your use of the name and start date on record with the USPTO - which is very important if you ever end up in a dispute like this one.

<comment><USER12> Disagree.

Trademark nothing until it matters.

No investment, no profit, no trademark.

</comment></comment><comment><USER13> I never got the point of cyber squatting on the App Store. Is it just to be an ass? You can't transfer names between accounts, so unless you buy an account for each name, you can't sell it.

<comment><USER2> "You can't transfer names between accounts, so unless you buy an account for each name, you can't sell it."

What you _can_ do is delete your app, which will then release the name for use by others.

</comment></comment><comment><USER14> maybe apple should just start charging those who reserve names. A real developer would be willing to pay $50/mo to keep their name reserved during the time it takes to release the app. A cyber squatter will go broke reserving 500 different names.

<comment><USER15> And you would also pay 50$/mo for Android, the each of the hundreds of Android Markets, Blackberry, Ovi, Facebook, Twitter and so on? It could get expensive...

</comment></comment><comment><USER16> _> Now everyone knows that you're more likely to get the information you need by searching for "milk" in Google, rather than hope that Milk.com has the information you're looking for. _

Exactly. This is why non-tech people type "hotmail.com" into google. Links are a horrible UI for most everyone.</comment>


Ask HN: Why does YouTube have no competition? - <AUTHOR> I know of the existence of Netflix and others, but I meant a site where everyone can upload videos like on YouTube. <comment><USER2> The hosting costs would be astronomical for a startup to offer free HD video hosting in the modern era. Google had deep pockets to buy them and pay for servers for all of the years YouTube was not profitable. A viral video like Gangnam style which currently has 3.6B views probably cost in the millions to serve. Luckily Google has the ad muscle to recoup that, but not many others could. If someone were applying to YC or approaching VCs with a YouTube competitor, the big questions that I'm sure would come up are, "what have you figured out that YouTube hasn't that will make users flock to you" and the obvious followup if you have a clever answer to that: "why couldn't Google beat you by just doing that first or better?"

EDIT: thinking about it further, the company most suited to offer it would be Amazon, which obviously has the storage space and hosting infrastructure, but not the advertising network to make revenue on it. It would be interesting if they could tie into Prime Video to allow users to monetize their content via a revenue split with Amazon.

<comment><USER3> Amazon is already running something similar with Prime Video Direct by allowing independent filmmakers to upload content (including a revenue split with Amazon).

> For each title, you can choose to earn royalties based on hours streamed by > Prime members, a revenue share for rentals, purchases, monthly channels, or > ad impressions—or any combination of these options. > ([https://videodirect.amazon.com/home/landing](https://videodirect.amazon.com/home/landing))

<comment><USER2> Thanks for linking to the Prime Video Direct site...I was unaware of this program, and it seems pretty promising. It is not as greenfield as YouTube

</comment></comment></comment><comment><USER4> They seem to do discovery very well, as in finding creators an audience. And, they actually pay content creators. That's let them build a lot of inertia. You'd have to steal away both the viewer base and the creators, and that's not trivial. Twitch and tiktok are competing by creating new categories to compete in, but in terms of just upload a video and go viral land, even Facebook hasn't been able to really replicate the value YouTube provides.

</comment><comment><USER3> I wouldn't say that they have no competition, just that they control a high majority of their market and are much larger than their competitors.

Vimeo and Dailymotion are YouTube's largest mainstream competitors. PeerTube and D.tube are also two decentralized alternatives.

</comment><comment><USER5> It does, at least in other countries, e.g. in China there is bilibili.</comment>


Shaken Beliefs: Seismic Lessons from Japan's Tohoku Earthquake - <AUTHOR> http://www.newyorker.com/tech/elements/shaken-beliefs-seismic-lessons-from-japans-tohoku-earthquake <comment><USER2> I wonder what kind of person could have felt _that_ quake, at closer proximity than I felt it in Tokyo, heard the sirens, been exposed to tsunami risk yet _still_ ignored warnings because data were underreported. Contrary to the article, I suspect more accurate on time warnings would not have altered behaviors significantly.

<comment><USER3> I was in Shizuoka prefecture (another 200km away than you). I remember talking to my colleague and casually asking where the epicenter was. "Tohoku", was the reply. My jaw dropped because I knew what that meant. You don't feel Tohoku earthquakes in Shizuoka.

I stayed at work until 2am that day because my supervisor would not let me go home until the all clear was given for tsunami. Where I lived, I think we got a 30 cm swell. In contrast, I heard the bad news that one of the people on the same teaching programme I was in had died. She lived in the affected area and went home to check on her apartment in the 17 minutes between when the earthquake hit and the tsunami struck. Had she stayed at work, she would have survived.

Why was there a difference between the actions of my supervisor and hers? I live in Shizuoka which is 50 years overdue for the Tokai earthquake. It has been said that there is an 85% likelihood that it will hit in my lifetime. I also live in one of the most dangerous areas (on the western coast of Suruga bay). Everybody knows that a devastating earthquake will hit and there is constant training. This is key.

I think you are absolutely correct. Warnings are useful to an extent. However, training is critical. My supervisor had absolutely no qualms about keeping me at work (which is also the designated evacuation center for the area) simply because this was obviously a very unusual event. Nobody really expected a tsunami of any size to hit Suruga bay, but it didn't matter. I could go on for quite a long time about the training that we get here because of the impending Tokai earthquake.

On of the good things to come out of the Tohoku disaster is that I have heard that similar training measures have been taken up by the whole country.

<comment><USER4> > However, training is critical.

After the Great Alaska quake of 1964 two people died in Crescent City. After the first wave hit they went back to check on things and then got caught by a second wave.

Crescent City, CA is 2400km from Anchorage AK.</comment></comment></comment>


/r/IAmA traffic traffic during President Obama's IAmA  - <AUTHOR> http://www.reddit.com/r/drunken_economist/comments/z26f5/riama_traffic_traffic_during_president_obamas_iama/?sort=confidence

<comment><USER2> Uniques by the hour chart is pretty interesting, massive amount of constant load: <http://i.imgur.com/Zx7a0.png></comment>


Is technological progress a thing of the past? - <AUTHOR> http://www.voxeu.org/article/technological-progress-thing-past?utm_source=dlvr.it&utm_medium=twitter <comment><USER2> This is a fascinating subject.

While technological progress seems certain, the direction of that progress will be surprising. We have iPads, but not flying cars. We have Facebook, but no moon bases. No one would have expected that fifty years ago. And I'm not saying I'd rather have a flying car than an iPad, but building things "people want" will probably lead to an unexpected world.</comment>


I would pay $X for Y (June 2018) - <AUTHOR> I would pay $4/month to input a URL to news stories and write my response to the article.
I would pay $20 for (real, authentic) reviews of the top 30 online only Financial Engineering programs.
I would pay $2/month to have an app calculate tax withholdings for Robinhood profits/winnings. <comment><USER2> I would pay $50/month for a service that would map out all REITs in my country(Brazil) and analyze their respective management companies, quality of assets(vs price), revenue and financial vacancy.

I wrote some scripts but it's a pain in the butt to maintain as most of the data provided by the stock exchange isn't formatted. So somebody who provides would have both the data processed, and possibly worked upon afterwards by humans. Which I'm kind of lazy to do all by myself.

I thought about automating this and selling the service, but it's kind of hard to reach people to buy it, or to even sell this at all. I currently have already a good income that would hardly make the service be worth for me to build at all.

With this... I could buy the best for this investment window(bear market) of the next 2 years and retire before the end of the bull market.

</comment><comment><USER3> I would pay $10 per month for someone to receive my receipts etc via email/photos and input them into a tax program.

<comment><USER4> A bit more than $10, but: [https://www.shoeboxed.com/](https://www.shoeboxed.com/)

</comment></comment><comment><USER5> I would pay $10/month for a service that I could repackage and charge $100/month for it

<comment><USER6> I'd pay $90/month if the repackaging could be automated and sold at scale ;-P

</comment></comment><comment><USER7> I would pay $20/month for a churn coach

A what?

A churn coach. Helps me swim through the sea of gadgets and entertainment, helps put old stuff on Craigslist or upcycle or recycle properly and every month or so brings some product or service I'll love.

It may seem like a rehash of gift boxes for X Geekery, but the difference here is the cycling at the end and the very low volume.

I've found that for my ultimate convenience and entertainment it's a bit of homework to find the best of the best (movie, laptop, book, kitchen gadget, etc...) A Churn coach would help do that with a smile and a high five, this is truly the golden age.

(๑•̀ㅂ•́)و

</comment><comment><USER8> The problem with the tax withholdings is that it might only be worth $2/month to you (as it saves you using your excel or whatever) but to the provider they kind of have to provide a very robust calculator and probably assume some liability. So they'd want much more than $2 I would assume. They'd need 2k-10k users to make a living, thats a lot of support also!

</comment><comment><USER9> I would pay $50 to know the best place to rent a property and make a profit using airbnb.

</comment><comment><USER3> I would pay $1000 for a bootstrap landing page for my site. Not a theme, but someone who actually collects the benefits etc and rolls it into something that looks great.

I would pay $100 a month for someone who can write technical articles in the blockchain space.

<comment><USER10> I can create production-ready material/bootstrap best landing page with SEO provisions in $1200.

I am a technical writer on medium. Ping me if needed.

</comment></comment><comment><AUTHOR> What would you pay for?</comment>


Help me stress test my server - <AUTHOR> http://hasjamesmurdochbeenarrestedyet.com/

<comment><AUTHOR> This is my idea of a natural stress test site. My last attempt (hasrebekahbrooksbeenarrestedyet.com) got to a sustained 3 hits per second.

(please no Denial-of-service-style hits though :) I can run ab by myself)</comment>


Developing a symbolic-math library. Derivation, Simplification, Equation solving - <AUTHOR> https://habr.com/ru/post/486496/ <comment><AUTHOR> That's my article about writing a lib for solving problems analytically. E. g. it can find derivative, solve some equations, etc. Project is open-source and located here [https://github.com/asc-community/MathS](https://github.com/asc- community/MathS)

</comment><comment><USER2> Nice write up

I toyed with something like this in Scala: [https://github.com/cascala/galileo](https://github.com/cascala/galileo)

<comment><AUTHOR> That's cool. So you kinda wrote your own language for that? I mean, afaik that's a classic approach for that. Im planning to do something like Jupyter for that.

<comment><USER2> FYI I built a Jupyter plugin as well: [https://github.com/cascala/igalileo](https://github.com/cascala/igalileo)

<comment><AUTHOR> Lol, that's cool. I'll check it out for sure. Thanks!</comment></comment></comment></comment>


2019 HackerRank Developer Skills Report - <AUTHOR> https://research.hackerrank.com/developer-skills/2019 <comment><USER2> The immigration questions are pretty skewed. There was apparently no allowed response for workers who were put out of work by h1b and other policies. Example: Disney

[https://www.computerworld.com/article/2915904/it- outsourcing...](https://www.computerworld.com/article/2915904/it- outsourcing/fury-rises-at-disney-over-use-of-foreign-workers.html)</comment>


Don't Take Medical Advice From the New York Times Magazine - <AUTHOR> http://www.slate.com/articles/health_and_science/medical_examiner/2013/02/curing_chemophobia_don_t_buy_the_alternative_medicine_in_the_boy_with_a.html <comment><AUTHOR> From the article: "We are a chemophobic culture. Chemical has become a synonym for something artificial, adulterated, hazardous, or toxic. Chemicals are bad—for you, for your children, for the environment. But whatever chemophobics would like to think, there is no avoiding chemicals, no way to create chemical-free zones. Absolutely everything is made of atoms and molecules; it's all chemistry." This was striking to me, as I had seen an example just recently elsewhere in cyberspace of reasoning that "chemicals" are bad ingredients to have in a food, even though all foods are materials made up of, um, chemicals. I have seen similar comments earlier here on Hacker News.

Matter is made up of atoms, and those atoms form various chemical elements or compounds or mixtures. We breath chemicals, we eat chemicals, we touch chemicals every day. Just because some foodstuffs have listed ingredients, with names that are sometimes difficult to read out loud (I have no trouble with the names, but then again I grew up with a parent who majored in chemistry) doesn't mean that those foods are dangerous. Whatever kind of food you think is perfectly safe surely contains some compounds with chemical names that are hard to spell or pronounce, but are nevertheless perfectly "natural," and usually not listed on an ingredients label. Don't worry about it.

<comment><USER2> Never heard the term "chemophobic" before, but now that I think about it I have some chemophobic friends. Their argument is always something like this:

"Humans evolved consuming only organic material from their very beginnings up until about 100 years ago. Humans just haven't evolved to tolerate synthesised chemicals in a mere 100 years."

(that's obviously paraphrased but you get the point) But when it's said like that, I tend to agree with them. When they're called "chemophobic" in articles like this, I tend _not_ to agree with them. I've no clue which to agree with.

<comment><USER3> Considering you can synthesize organic material, life can produce inorganic compounds, and plenty of organic material is toxic as shit, I'm not sure I agree with that line of thinking.

I can't speak for everyone, but I am of the opinion that glucose synthesized in a lab requires no special evolution on the part of humans to process.

<comment><USER4> What you are saying is disingenuous. Clearly the pills made for pharmaceutical are incredibly dangerous, even when taken as per the instructions. That is why they are prescribed.

Avoiding taking prescription drugs unless you really have to (ie are going to die), as I do, is not a bad way to live. Just because natural things will kill you, does not mean we should not avoid man made things. So I do not take pills for headaches, for sleeping, etc...

You thinking is because you can die by a bear, you should not look before crossing the road.

<comment><USER5> Paracetamol (acetaminophen) is a very safe drug if you do not take too much.

Being in pain when there is a simple, cheap, safe, effective medication is a bad way to live.

<comment><USER4> The problem I have with it is that it lowers the bodies natural ways of dealing with pain. You become more reliant on it, rather than just handling the pain yourself.

This works for non extreme pain, of course.

<comment><USER5> People in pain tense their muscles, they walk in a different way, they stop exercising, they stop moving around so much.

All of these things help keep pain going on longer.

For long term pain with no worrying cause you should carefully take pain killers and keep moving. Things like lower back pain (which can have serious causes, so get it checked) get much worse if you stop exercising, but get better if you get appropriate exercise.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> In the same breath you should also not assume any doctor is an impartial scientist.

Doctors are humans and are therefore also subject to being lazy, greedy, ignorant, etc.

Just because they seem to have more knowledge and use something of a scientific method doesn't mean they aren't locked into their ways, always giving the same kind of diagnosis for certain symptoms without questioning their limited knowledge.

They also face pressure from insurance and government agencies to behave in certain manners.

As many of us are coders, let me put it this way - have you ever looked up to another coder because they seemed to know so much more than you? Then after some years you surpassed them in your knowledge and looked back on their code and realized it was a "bit cr*p" in parts?

Yeah well your doctor is like that too. If they aren't constantly learning and researching, they are set in their ways and being moved by forces that may not make the best decisions for your health.

<comment><USER7> At the same time, consider that anyone peddling herbal remedies and the like is almost guaranteed not to be an impartial scientist.

</comment></comment><comment><USER8> So many people earnestly want to tell me how if I just drink the right cherry juice, or do acupuncture, I will magically be fixed. It is very annoying. Rather than take someone's anecdotes and try them one after another it seems more sensible to look over the last 20 years or so of research papers and decide on treatment based on that.

Also, 6 weeks on methotrexate is not a very long trial.

<comment><USER9> You could do worse than just not get "fixed". You could be harmed. Natural and safe are fairly independent concepts.

</comment></comment><comment><USER10> "Another common chemical name for methotrexate is amethopterin, which comes from the roots meth, Greek for wine, which I might stretch to spirits, and pterin, Greek for feathers."

Except for it's ameth, which would mean lack of intoxication, a la 'amethyst'.

In fact the whole article is complete BS as it doesn't even remotely align with the views the author presents in the original article -- nowhere does the author say that she is 'chemophobic', nor is this even hinted at beyond her saying that her husband has always been "more comfortable with pharmaceuticals, more trusting in general." And of course naturopathic medicine is going to seem like pure evil if you're willfully blinding yourself to the arguments in its favor and only seeing the (legitimate) weaknesses, as will anything else for that matter.

<comment><USER11> Except the NYT magazine article author makes it quite clear that she is chemophobic, with repeated statements about her fear. Here's a direct quote: _"It reinforced an image of Shepherd as sick, forever dependent on a drug I felt afraid of, however unreasonable a doctor might tell me that fear was."_ Similarly, when a doctor suggests increasing the dose of methotrexate she panics.

<comment><USER10> I guess I still don't see anything there that could be construed as 'chemophobia'. She doesn't want her kid to self-identify as sick or to die of liver failure. I don't see how either of these concerns are crazy or anti- technology or whatever. Especially since in the beginning she says she was excited about the diagnosis because it meant they could try different drugs.

</comment></comment></comment><comment><USER12> My sister is a recently turned vegetarian. As her meat-eater engineer older brother, it's my insolent duty to explain to her that carbon chains like protein are all the same, come it from a bean or a cow. Chickens are no more than organic machines that turn molecules around so they taste rich, especially when deep fried and extra crusty.

Needless to say, that won't do anything to change her mind -- not that she has to, it's just me being a pain in the butt gaucho. She is a vegetarian for a myriad of subjective reasons that I could never even start to debase or crack. I've never heard of chemophobia (and the Chrome spell-checker hasn't either), but I think that turning a desperate quest by a mother into a bunch of molecules and atoms is an oversimplification of a complex, subjective choice made by complex, subjective minds.

</comment><comment><USER13> Here's the thing, if you're taking medical advice from someone who isn't a practising doctor, you're probably an idiot. All those natural herbs and old wives tale remedies? Scientists actually have checked those and turned them into _actual medicines_ where they worked. Everything else is a load of crap.

<comment><USER14> Like aspirin, for example.

</comment></comment><comment><USER15> _When Meadows' husband has serious reservations about her desire to ditch the advice of not one, but two, pediatric rheumatologists, Meadows implies he was the poorly informed one: "I was nervous about keeping Shepherd on methotrexate, but Darin didn't share my squeamishness. He has always been more comfortable with pharmaceuticals, more trusting in general."_

If you read the original article, you'll see that she didn't "ditch" the advice. She kept giving her son the prescribed medication. She discussed "Walker's Regimen" with Dr. Kahn who approved it in conjunction with methotrexate. Dr. Immundo gave her the number of a complementary practitioner.

The parents agreed that they would wait 6 weeks without increasing the dosage. They did that, their kid got better.

Seems like a perfectly sensible course of action to me. I think even though Michelle M. Francl (author of the OP) touts her self as a "scientist" her article is just as influenced by emotion as the original article she's referencing.

The only valid point she makes is that Susannah Meadows refers to the use of "four-miracles powder" as a "drug free" solution. Cool, that's inaccurate and pointing out that chemicals in "magically named" complementary medicines are just chemicals the same as any other is a valuable discussion to have.

But she allows a really derisive and dismissive attitude to creep into her writing which has no place in scientific discourse.

I realise that Meadows' article is just as emotive, but at no point does she try and take the intellectual high ground.

TL;DR: we sought advice from everyone, tried everything, and our son got better as a result. Win.

</comment><comment><USER16> This is true, but totally misses the point of the NYT Magazine article. The 'four marvels' powder was mentioned only in passing. [edited to remove my dig at homeopathy, which wasn't at issue here - it was naturopathy]

The more interesting thesis of the original article is that some inflammatory disease is related to a 'leaky gut' syndrome and that it could be modulated by diet and changing gut flora. Unfortunately this argument was not made very rigorously in the article, and while it remains controversial there is a lot of ongoing research into the idea.

<comment><USER17> > if it was homeopathic, we can be quite certain that it was doing nothing at > all.

From TFA:

>several recent peer-reviewed studies have shown that at least one of the active drugs in four-marvels powder, quercetin, exhibits anti-inflammatory activity.

Dismissing _all_ traditional treatments without using research is just as woo- ey as blindly accepting them.

<comment><USER16> Whoops. I misread 'naturopath' as 'homeopath'. When you dilute something 10e60-fold, I'm comfortable dismissing it, and it's not woo-ey at all. But that wasn't the case here.

I didn't mean to imply that traditional treatments can't contain active ingredients that can be useful -- they surely can, and are the source of many drugs.

<comment><USER18> You can't have naturopathy without homeopathy:

[http://scienceblogs.com/insolence/2011/01/28/you-cant- have-n...](http://scienceblogs.com/insolence/2011/01/28/you-cant-have- naturopathy-without-homeop/)

> the NPLEX (Naturopathic Physicians Licensing Examinations), which is > required for naturopaths to be licensed in the 16 states in the U.S. and 5 > provinces in Canada that license naturopathic physicians tests naturopaths > on homeopathy

> Then there's the American Association of Naturopathic Physicians (AANP). If > you take a look at its blog and search it for the word "homeopathy, you'll > rapidly see that the largest "professional" organization of naturopaths not > only embraces homeopathy but defends it against attacks.

</comment></comment></comment></comment><comment><USER19> addlepate: Your account has been banned, and almost no one can see your posts.

To reply to you: I challenge you to define "chemical" in the way you are attempting to redefine it. People want to use it to describe unsafe or non- natural compounds, but a little bit of thinking will quickly show that that definition is impossible.

Use chemical as an adjective instead of a noun and you will do much better.

Used as a noun chemical has no meaning: _Everything_ is a chemical, so saying the word says nothing at all.

<comment><USER20> Some non-chemical things: Justice, beauty, truth, prime numbers, O(log n) insertion time of a binary tree, Beethoven's 5th.

Just for the record.

<comment><USER19> Those aren't things, they are concepts.

<comment><USER20> And a concept isn't a thing? This is an old philosophical debate that pretty much melts away in practice. For all practical purposes things like songs and ideas are things. See how you weren't confused when I referred to them as things in the previous sentence?

</comment></comment></comment></comment><comment><USER21> "We are a chemophobic culture." I take great issue with this statement. We are most decidedly not a chemophobic culture. People are more than willing to take medicines that are artificially synthesized and, as the author mentions, with good reason.

I, for one, am not chemophobic. I personally know an individual who developed one of the first total-syntheses (i.e. "artificial" chemical synthesis) of a very important anti-cancer agent, Taxol. The TS of Taxol was exceedingly important, since a single dose required the sacrifice of an mature Yew tree -- something that would have been entirely unfeasible for the millions of people that stood to benefit from the drug.

But there are miraculous, mysterious things that we do not understand about natural products and the human body. Take Yerba Maté, for example, a popular beverage in Argentina and coffee. Or wine and whiskey. What all these beverages have in common is that they rely on a principal chemical agent for their effect (methylxanthine or caffeine in the case of Yerba Maté and Coffee; ethanol in the case of wine or your favorite alcohol). Yet as the more sensitive among us have realized, each different concoction effects us differently -- even though the principal ingredient is the same (people report calming, yet stimulating effects from Yerba Maté as opposed to caffeine, etc.)!

It turns out there is a very simple explanation for this. There are other constellations of chemicals in these concoctions which, in concert create an altogether particular and unique effect. This, I believe, is where "chemophobia" lies for some individuals (though again, I argue it is not widespread among the greater population). It lies in the fact that we are applying something very strong in a way that is not balanced or integrated. One very real mainstream example of this is how calcium is accompanied by vitamin D, as the latter enhances absorption of the the former. Since vitamin D helps strengthen the effect of calcium, patients can take safer doses of calcium which have great physiological effect. Another example is the fact that African American heart patients who take ACE inhibitors (drugs that lower blood pressure) along with diuretics have much, much better clinical outcomes than taking ACE inhibitors alone, which is the standard of treatment for most individuals.

The hope, then, is that when taking something more "natural" as opposed to man-made is that that natural product will inherently contain a wider variety of compounds that taken together create a more potent, but gentle effect on the patient. Now of course, these effects could be created by taking combinations of man-made products. But first these combinations need to be discovered, and we are certainly a long ways off from that. And it is not easy --different people are affected by different combinations and deciphering the key players out of a set of natural products is not easy. This will take many more years of careful, non-biased research. And there is indeed incredible bias against natural products among mainstream medical establishment, which is rather absurd given that so many of the drugs we take today come from natural sources! To me this is the real travesty, not "chemophobia."

Moreover, we need to embrace treatments that work, even if we can't explain them (provided that they are safe--more on this and LD50's in a moment). Good scientists work with existing knowledge. Great scientists love the perplexing, paradoxical, seemingly impossible phenomena that are not well characterized, which the FDA (about the most mainstream medical organization on the planet) does not necessarily approve of, for which there are no established doses or LD50's. Why is the author so insistent on the notion of LD50's when so many people have taken natural products for hundreds of years without ill-effect (that's a pretty amazing safety standard, in a way -- the fact that people without any scientific background have safely taken and studied natural products without modern science; namely by studying themselves; in India and China there were masters at this sort of art).

Sorry for such a long response. I hope someone appreciates these comments.

EDIT: I just want to add one other thing. Rofecoxib (better known as Vioxx) has an established LD50. For mice it is 300mg/kg, for rabbits it is 3.2g/kg, and for rats it is 980mg/kg [2]. But you know what? Vioxx exacerbated heart disease for at least thousands of people and should have been recalled years earlier than 2004[1]. An established LD50 does not mean a drug is safe.

[1] [http://www.thelancet.com/journals/lancet/article/PIIS0140-67...](http://www.thelancet.com/journals/lancet/article/PIIS0140-6736\(04\)17514-4/fulltext)

[2] <http://www.clearsynth.com/docs/MSD-CS-T-17609.pdf>

<comment><USER22> _The hope, then, is that when taking something more "natural" as opposed to man-made is that that natural product will inherently contain a wider variety of compounds that taken together create a more potent, but gentle effect on the patient._

And why would they? You are pretty much literally assuming an intelligent design behind the mate plant or Meadows's Montmorency cherry juice. But from an evolutionist perspective, what reason is there for a random plant to contain just the right mix of chemicals to produce the most beneficial effects in humans?

There is none, of course - except where the plant has been cultivated, that is, subjected to _artificial_ selection. But while farmers can and did select for taste, yield, size, color, how could they select for an ideal balance of chemicals they don't even know about? How could they optimize for medical benefits without double-blind trials, and when most of their harvest is used for other purposes anyway? Why trust an imprecise, blind form of artificiality over a scientific, informed one?

By the way, some of the plants more painstakingly selected for human benefit - cereals - are the source of one of the (real or supposed) villains in Meadows's story: gluten. And even more exotic (and therefore appealing) South American plants like the Solanaceae (potato, tomato, eggplant...) contain significant amounts of toxic alkaloids. So much for the harmonious, "gentle" blend of compounds in natural products!

<comment><USER23> Aside from the fact that literally is not a gradable adjective, I don't see the grandparent suggesting any kind of intelligent design. Evolution implies getting adapted to your environment, this includes an oxygen level of roughly 20%, availability of nutrients, etc. But this also goes the other way: plants to some extend need animals to spread their seeds (you could go as far as to say it's the reason for our existence...), so it's to their benefit when they evolve beneficial effects on animal through combinations of nutrients/chemicals]; cf. <http://en.wikipedia.org/wiki/Co-evolution>

So while there may be a _reason_ the mate plant evolved to have pleasant effects on us, this is not necessarily because there is a design or teleology.

<comment><USER22> Nobody is arguing against the existance of beneficial compounds in plants. Remember that the claim was that natural products somehow contain the perfect blend of compounds, which is a very high bar to clean. Co-evolution does not imply maximum benefits for all the organisms involved: for example, a plant that wants you to eat its fruit to disperse its seeds may make itself delicious, but it does not really care if it poisons you a little along the way (see the example of the Solanaceae, which I already cited).

You should also consider that humans and the mate plant have coexisted for maybe 15 thousand years, which is not really a lot of time to come to a perfectly harmonized balance with the entire ecosystem; and that the average (US) American's ancestors have been around the mate plant for approximately _zero_ generations, so, if they are to benefit from the short period of co- evolution of the plant with humans, it needs to be through changes _in the plant_ (and it seems to me that an animal would evolve to maximize benefit from its food source faster than the food source would evolve to maximize benefit to it).

You may then say that the plant co-evolved with animals similar to us, but then, see the comment someone else made about lethal doses being quite different between species. I am not disputing the presence of beneficial compounds in some plants, but the claim that they would somehow contain the perfect blend that maximizes benefit to our particular species.

Also, "pretty much" is not a grading adverbial phrase.

</comment></comment></comment></comment><comment><USER24> I'm just going to leave this here ...

<http://www.youtube.com/watch?v=HhGuXCuDb1U>

(Tim Minchin's "Storm")

<comment><USER14> Ah, old but good:

"Alternative Medicine has, by definition, not been proved to work, or been proved not to work. You know what we call alternative medicine that works? Medicine."

</comment></comment><comment><USER25> Fear of chemicals in general? Silly, but that is a bit of a strawman.

Fear of ingesting synthesized chemicals in quantities to which our species has not been exposed during its evolution? Count me in, with the obvious rational disclaimers.

<comment><USER11> Does this not apply equally to ingesting any chemicals that humans have not been exposed to during our evolution?

What about tea and coffee? Or beer and wine? Or tomatoes? Or capsaicin?

<comment><USER25> It's the _"with the obvious rational disclaimers"_ part. The above chemicals have been extensively field tested. Huge numbers of people have eaten them for a long long time, it's safe to assume any ill effects of these are known (although obviously the natural selection had little time to adapt us humans to these substances.)

<comment><USER11> How do you feel about vaccines? Anti-biotics?

Why is fear justified? Isn't the appropriate response reason and critical thinking? FDA approved drugs have been extensively field tested as well. And many "dangerous" chemicals are actually safer than, say, wine.

You're just trying to justify your fear of the unfamiliar. It's parochial and small-minded. Do you think that the people who discovered tea, beer, tomatoes, and cheese thought that way? Imagine how much smaller and less interesting our lives would be today if these sorts of fears had gripped our ancestors, and how much smaller our future will be if we allow them free reign today.

<comment><USER25> > How do you feel about vaccines? Anti-biotics?

Both extensively tested, although antibiotics are interesting because they created drug-resistant strains. Which shows that it is rational to be on the lookout for unexpected bad effects of new things in general.

> Why is fear justified? Isn't the appropriate response reason and critical > thinking?

Never stated it's one or the other. Fear of ill effects is what makes us do the whole critical evaluation, which is good.

> You're just trying to justify your fear of the unfamiliar.

I'm afraid you have read from my comments something that wasn't there at all. "Fear until reasonably tested" = rational. "Fear that makes one ignore all evidence" = obviously irrational.

> Do you think that the people who discovered tea, beer, tomatoes, and cheese > thought that way?

They took the risk and won - good for us. I'm just against calling their fellow tribesmen (or countrymen) irrational, especially those who already knew about death caps & similar.

</comment></comment></comment></comment></comment><comment><USER26> I upvoted this because the article is GOOD, whoever wrote the title of this submission needs some good old fashioned <http://www.sciencebasedmedicine.org/>

</comment><comment><USER7> Startup idea: take out-of-patent medicines, rebrand them as herbal remedies, triple the markup, get a reputation as selling "safe" herbal remedies that work particularly well.

</comment><comment><USER27> The gist of the nytimes article was "don't eat poison" -- eg subtract stuff. Arguments against superstitious and irrelevant additives are missing the point.

</comment><comment><USER28> This article makes some bad analogies. Showing the structure of two different molecules and acting aghast that someone would choose one over the other is like saying all digital information is 1's and 0's so it's all the same. Or it's like saying all words are just a bunch of the same letters therefore they have no meaning.

<comment><USER11> The point being that people react to the name and the classification ("natural" vs "chemical"), and they should be reacting to the scientifically verified effects and side-effects.

</comment></comment><comment><USER29> I'm just wondering if there's any relationship between the picture and the article.

</comment><comment><USER30> How about, "Don't take any medical advice from any magazine?" Now why is that? Well because it is a run of the mill magazine. I am not sure why people read and follow this stuff.

<comment><USER11> The slate article isn't providing any medical advice, it's merely telling people that they shouldn't fear synthetically manufactured medicines while being completely trusting of naturopathic ones. If anything it's telling people to be more informed, skeptical, and to use reason rather than emotion when making informed choices about medicine.

<comment><USER30> Yes, I got that. However, it is still medical advice...coming from a magazine. What to "fear", "use", or any other word you can swap in there is still the same thing....advice.

</comment></comment></comment><comment><USER31> If I believed journalistic health advice I'd think Ice cream is good for me because it speeds up my metabolism but exercising is bad because it makes me eat too much.

</comment><comment><USER32> Don't take any advice from Slate.

</comment><comment><USER33> _Don't Take Medical Advice From the New York Times Magazine_

Don't Take Medical Advice From the Slate Magazine either. Research all you want but call a doctor in the end.

<comment><USER34> > call a doctor in the end

Which is the point of this article.

</comment></comment><comment><USER35> It's a good article. Human beings are wired to believe that things that are "natural" or "pure" are better than things that are "artificial." It's a quality of human nature that seems to show up in all cultures. Steven Pinker lists many of them in _The Blank Slate_. It pretty much explains the huge market in "organic" food.

Since people have a bias for the "natural" it is hard to have any sort of a conversation about what chemicals might be good for you that don't occur naturally. And, people are unduly scared of "artificial" chemicals while turning a blind eye toward the dangers than many "natural" chemicals have.

Inclination toward "natural" makes a lot of sense as an evolved bias. Doubtless, it kept our ancestors alive. But our bodies don't have any sort of magical scanner to detect whether something is natural or not, they simply reacts in mixed ways. To us, some of those reactions are positive or negative, even for the same chemical.</comment>


Google Search to Identify JRE or JDK Shows Suicide Prevention Line - <AUTHOR> https://www.google.com/search?q=how+to+tell+if+you+are+running+jre+or+jdk <comment><USER2> Self explanatory, IMO. /s</comment>


The Surprising Effect of Distance on Download Speed - <AUTHOR> http://blog.httpwatch.com/2008/08/14/the-surprising-effect-of-distance-on-download-speed/ <comment><USER2> It's an interesting writeup of the effect of distance on download speed but I would say it was more 'expected' than 'surprising'.

I would have been a lot more surprised if download speed increased with distance.

<comment><USER3> Agreed. A better title might have been "The surprisingly significant effect of latency on download speed"... The author starts with the assumption that bandwidth should be the primary determinant of download speed, but it turns out that latency is the primary determinant for some connections, due to the TCP implementation.

<comment><USER4> That's wrong, actually. Getting high throughput in the face of high latencies is a solved problem, and the solution is called "buffering". TCP does this just fine, and was designed to do this from the beginning.

The problem is that the buffer isn't big enough. Standard TCP windows top out at 64kb due to field sizes in the header. This was a lot of data to be going over the wire in the days of 56k frame relay lines. Unfortunately, in the modern world a connection with a round trip latency of 200ms (not uncommon) and a bandwidth cap of 10Mbps (ditto) is going to need four times that much data "stored" on the wire. The TCP headers don't allow for that, so the transmitter needs to wait to send new data until the long-delayed ACKs come back from the receiver.

As the article points out at the bottom, there is a "window scale" option to IPv4 that allows for larger windows that is reaching common deployment, and of course IPv6 doesn't have the size limitation in the first place.

<comment><USER5> * there is a "window scale" option to IPv4 that allows for larger windows that is reaching common deployment*

I am curious to know how common this deployment is? In most cases you are still OS bound in terms of TCP window sizes, that being 2 in Windows and 3 in Linux to start with. How many people do you know that really tweak this setting?

<comment><USER6> Windows Vista supports automatic window scaling adjustments, supposedly. That probably counts as "common deployment," but I don't know if that's what he meant.

I used to use the freeware "Dr. TCP" program to adjust the TCP receive window scaling on Windows computers, probably as long as seven years ago. I'm sure that was common among professionals, enthusiasts, and on-line gamers. Less common for Joe Six-Pack, I'm sure.

</comment></comment></comment></comment></comment><comment><USER7> An interesting fact that we teach in 6.033 is that of the Boston<->San Francisco packet round trip time, half of that time is spent by light propagating through fiber, and half of it is spent in routers.

Cisco makes some amazing products.

<comment><USER4> I can't tell if you're being sarcastic or not. Cisco routers, at least at the level I've been exposed to, don't have particularly good switching times. In point of fact, switching an IP header through a few-hundred-thousand-entry routing table is something that any desktop CPU can do in a microsecond or so. Companies like Cisco have managed to convince a lot of people that routers are these hugely complicated devices. They aren't.

The _hardware_ side of long haul fiber networking is where the voodoo is. Routing? Not so much.

<comment><USER7> Sorry, I don't know much about the innards of routing hardware. I do know that doing all the routing in a time equal to the propagation delay of the light is pretty damn impressive to me.

</comment></comment></comment><comment><USER8> This writeup oversimplifies a little. See e.g. [http://coherentnoise.ca/blog/2008/08/response-to-the- surpris...](http://coherentnoise.ca/blog/2008/08/response-to-the-surprising- effect-of-distance-on-download-speed/)

<comment><USER9> The response is much better than the original article.

</comment></comment><comment><USER10> I recall that all TCP versions after Vegas or Reno use pipelining to increase transfer speed. They send more than one segment before waiting for the ACK, and this of course multiplies the transfer rate by the number of segments. However, some TCP implementations either never initiate pipelining (it was the case of Windows XP) or use a low limit of 8 to the number of maximum outstanding (non-ACKed) segments, which does not push TCP to its potential.

See details here: <http://gaia.cs.umass.edu/kurose/transport/congestion.html>

</comment><comment><USER11> Reminds me of The case of the 500-mile email: <http://www.ibiblio.org/harris/500milemail.html>

</comment><comment><USER12> has anyone used the httpwatch product?</comment>