Update on await syntax in Rust - <AUTHOR> https://boats.gitlab.io/blog/post/await-decision-ii/ <comment><USER2> What a milestone! This was the most impressive work in open source decision- making that I have ever followed (in my limited experience). People have contributed _thousands_ of comments discussing this for over a year. It has even caused the team to rethink how discussions like this should be guided in the future beyond comments on GitHub issues. I cannot imagine how difficult it has been to manage it all, and I applaud and thank the Rust team for their hard work in fielding comments, weighing trade-offs, and ultimately making a decision in order to move the project forward.

<comment><USER3> > This was the most impressive work in open source decision-making that I have > ever followed...

You'd be blown away by Linux Kernel development then. Multiple magnitudes above any measurement of an await syntax bikeshedding. /u/Perceptes puts it best than I ever could in this top voted comment on /r/rust [1]:

"...I personally don't care at all about the await syntax, and have been very unhappy with that bikeshed being such a focus of time and discussion. The real problems I have with the unstable async system are how difficult it is to reason about. Compiler errors are still largely indecipherable. impl Trait didn't really help here. Documentation is still sparse, so I spend a lot of time banging my head against the wall, trying many formulations of my programs to get just the right incantation of futures wrapped in futures wrapped in futures to get things to compile, only to get page-long type mismatch errors that are near impossible to read, and multiple closures/functions deep of nested futures being returned where any of them could be the culprit. I'm also very frustrated by the lack of progress on "abstract types" that are required for using async functions (and returning impl Trait) from trait methods. Traits are the cornerstone of Rust's type system and yet I haven't seen any activity on this for months. And now we're talking stabilization with this glaring hole. Async streams are another thing I've seen almost no progress on, aside from a blog post from withoutboats on how to deal with the ? operator within async for loops..."

This was 2 months ago, mind you. [1] [https://www.reddit.com/r/rust/comments/awa3t1/baby_steps_blo...](https://www.reddit.com/r/rust/comments/awa3t1/baby_steps_blog_asyncawait_status_report/)

I'm just glad that they finally settled on something.

</comment></comment><comment><USER4> I'm nit going to stop using rust, but I find this very disappointing.

One thing I strongly disagree with - - this article said other notations would require Rust users having to learn more notation. This still requires learning more notation, just it's easy to not even be aware it exists and think a struct had a member called await instead...

<comment><USER5> My understanding of the issue (which is shallow at best) is that it's a battle between a prefixing keyword or sigil which has the problem of causing the reader to scan back and forth in the statement when chaining multiple items, which sucks), or a postfixing keyword or sigil, with dot notation for a keyword to help parsing (and everyone seems to dislike the overloading of the dot notation for this). Ignoring sigils, I think the chosen solution is the lesser of two evils.

That said, I think a postfixing sigil would have been much better. It seems an important enough thing to denote that a bit of special syntax is called for, and the more unique the better.

<comment><USER6> For example, on C#, I sometimes have to do:

      var value = (await (await startRequest()).GetBody()).Root;

While the Rust syntax would make this a little more clear, I do not think it is a dealbreaker.

<comment><USER7> Please don't do that. I had to look several times to rewrite it as

        var temp1 = await StartRequest();
        var temp2 = await temp1.GetBody();
        var value = temp2.Root;

which is instantly grokked.

<comment><AUTHOR> This is a great example of why syntax and semantics can't be separated. This works great in GC'd languages, but in Rust, these two things may not be equivalent. With the distinction between owned and temporary values, this may change the lifetime of what stuff is in scope and when. This is reduced a bit with non-lexical lifetimes, but it's not, strictly speaking, actually equivalent.

<comment><USER8> I think this is a good example to show people who are on the fence about postfix then. I haven't felt strongly about postfix, but this is an eye opener for me.

<comment><AUTHOR> Yeah, I think the trick is that the theory and practice _might_ be the same. And usually, it's the other way around; spreading it out makes it work, whereas it may not otherwise. For example:

        fn main() {
            let world = gives_string().split(" ").next();

            println!("{:?}", world);
        }

        fn gives_string() -> String {
            String::from("hello world")
        }

This will fail because the String is temporary, and we're trying to get a reference to it (via split), and so it would be deallocated at the end of the line, being a use-after-free. This, however, compiles:

        fn main() {
            let world = gives_string();
            let world = world.split(" ").next();

            println!("{:?}", world);
        }

        fn gives_string() -> String {
            String::from("hello world")
        }

We're shadowing 'world', but the underlying String now lives to the end of main, so everything works, no more use-after free.

I think before I'd want a good real-world example of where doing the multi- line thing goes wrong before I'd want to make an argument that this is why postfix is better.

<comment><USER9> This has surprised me on occasion. Shouldn't the compiler be smart enough to figure out how long to keep it around for, instead of failing to compile?

<comment><USER10> The compiler _is_ smart enough to deduce lifetimes — that's why it can throw a compile error — but fixing them (auto-keeping temporaries) might introduce extra memory consumption/leaks that the programmer did not intend. Requiring the programmer to explicitly assign a temporary to a variable makes the programmer's intent more clear.

A comparison: in C++, the behavior of auto-extending the lifetime of const references to temporaries (but not non-const references) is considered a wart in the language design. (Really, you should just assign a temporary to a value because the compiler can elide the copy. : [https://abseil.io/tips/101](https://abseil.io/tips/101) .)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> All control flow mechanisms except await have their own statement: if, for, while, match. Howcome await is different?

The dot await syntax might hide an await within an expression, as "just another method". You'll need to hunt it down.

I feel await has costs and consequences that need to be explicit. The dot syntax does the opposite, and therefore I feel Rust might be making a mistake of a lifetime (pun intended) on this one.

<comment><USER12> _> All control flow mechanisms except await have their own statement: if, for, while, match. Howcome await is different? The dot await syntax might hide an await within an expression, as "just another method". You'll need to hunt it down._

Not quite; Rust is an expression-favoring language, so `if`, `match`, and even the `loop` keyword can all appear deep within expressions (the first two do so somewhat commonly; the latter is comparatively rare). In addition, the error- handling operator `?` is also used within expressions. (And while we're on the topic, let's remember that even C, a statement-heavy language, also has `?` as a control-flow operator that is not in statement position.)

</comment></comment><comment><USER13> The article doesn't actually show what the new syntax looks like. Nor does the article linked in the first paragraph.

What's a simple example of the new syntax?

<comment><USER14> Postfixed and preceded by a dot is my understanding:

        pub async fn do_stuff() {
            // ...
        }

        // elsewhere, inside a fn
        // as svnpenn points out
        let result = do_stuff().await;

<comment><USER15> await goes inside the function, at least thats how its done with JavaScript - do you have evidence otherwise?

[https://developer.mozilla.org/Web/JavaScript/Reference/Opera...](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/await)

<comment><USER16> They worte explicitly that Rust went a different way than C#/JS

<comment><AUTHOR> It's true, but that's around

      let result = do_stuff().await;

vs

      let result = await do_stuff();

_not_ what your parent is talking about.

<comment><USER16> Ah, they meant like await goes into async functions etc.

</comment></comment></comment></comment></comment></comment><comment><USER17> A bit off-topic: Is there any theoretical reason you _need_ async / await syntax at all?

(It's certainly desirable for performance and compatibility to avoid making all subroutines into coroutines, so I understand why most languages have done this.)

And restricting it to the case where coroutines have a single return...

Subroutines are naturally coroutines that don't yield. And it seems like the question of whether it's a subroutine or a coroutine shouldn't be something the programmer needs to worry about.

What I've seen in coroutine libraries is the main reason we _need_ await seems to be for cases when we don't want to await a result.

If you need an unawaited invocation to pass to a routine like gather, you do this:

        my_results = await gather(run_job(x) for x in work)

But, even if we can't infer from the type of gather that it must accept a future, a function can have a method that asks it to return a future:

        my_results = gather(run_job.future(x) for x in work)

You'd often want to dispense with gather. If I have these statements:

        alpha = run_alpha()
        beta = run_beta()
        gamma = run_gamma()
        return alpha + beta + gamma

In most cases, e.g. if these were requests going over the network, we'd prefer to schedule all three at once. If we want to sequence side-effects, then explicit await makes sense:

        alpha = run_alpha.await()
        beta = run_beta.await()
        gamma = run_gamma.await()
        return alpha + beta + gamma

That makes the most concurrent option easiest, as opposed to the clunky idiom of "gathering" many results.

<comment><USER18> I think (but I cannot find a reference to now) one of the proposed syntaxes was that awaits were immediate and implicit in async functions, and that if you _didn 't_ want that, you could opt-out and get futures normally. Loosely,

      async fn foo() {
        let result = blocking_req();  // awaiting immediately here.
        async {
          let future = blocking_req();  // not awaited.
          // can do more complex stuff w/ the future
        }
      }

IDK what happened to it, and it is a bit more complex IMO than what the Rust folks went with. However, I don't think it helps your gather case.

For gather, I think the problem w/ your proposed

      return alpha + beta + gamma

is when does that happen? If I do

      let some = alpha + beta;
      // < ... code ... >
      let more = some + gamma;

what happens / when are things evaluated?

At any rate, with the syntax as it is, I _think_ your gather example is essentially¹:

      alpha.join3(beta, gamma).await

or

      Future::join3(alpha, beta, gamma).await

(Perhaps minus the `.await`, depending on when you need/want the result.)

There's no operator overloading, which I'm fine w/, as there is a need to choose between, e.g., select or join.

¹but I'm new w/ the async stuff, so if I'm wrong I'm assuming that Cunningham's Law will kick in and someone will correct me.

<comment><USER19> Here's the proposal: [https://internals.rust-lang.org/t/explicit-future- constructi...](https://internals.rust-lang.org/t/explicit-future-construction- implicit-await/7344)

One of the goals behind it was to align async control flow with sync/thread- based control flow, to make it more intuitively obvious when things would run concurrently and when they would not. That is, calling a function, even if async, would immediately run it to completion, while wrapping it up in a closure or async block that gets spawned would run it concurrently.

This is especially relevant to Rust, which departs from other implementations of async/await in that merely constructing a future is insufficient to start it running, which is why you need that `join3` call to explicitly introduce concurrency.

Under the "implicit await" proposal, your first example would look like this:

        async fn foo() {
            let result = blocking_req(); // await immediately
            let future = async { blocking_req() }; // think of async{} like a lambda function
            // can do more complex stuff with the future, like:
            //  future.await()
            //  Future::join(future, other_future)
            //  tokio::spawn(future)
        }

The thread-based equivalent looks very similar:

        fn foo() {
            let result = blocking_req(); // block the current thread immediately
            let closure = || { blocking_req() }; // don't run this yet
            // can do more complex stuff with the closure, like:
            //  closure()
            //  rayon::join(closure, other_closure)
            //  thread::spawn(closure)
        }

</comment></comment></comment><comment><USER20> Question for people more familiar with async/await semantics, how do you typically control what thread the async procedure runs on? Having spent a lot of time now in rxJava and really getting into the power of stream processing and composition, it feels like async/await is almost too simplistic.

<comment><AUTHOR> async/await produces a Future. In order for that Future to execute, you place it on an executor. It won't start executing until you do so. Which thread it runs on, and how, is all the executor's job. So the answer is basically "pick the executor which has the semantics you want".

<comment><USER21> I never liked this behavior in Java. Or rather, I wasn't sure it was right or wrong and then I found code where people returned a future without starting it, causing the caller to wait forever in some situations.

Also if you use multiple modules with their own executors, they don't compose well. You can easily get oversubscription of CPUs.

Javascript's promises are self starting, which I would say is an improvement but the total lack of back pressure is anywhere from galling to highly problematic depending on the problem domain.

Goldilocks solution might be to have default executor behavior with an obvious and straightforward way to override it.

</comment></comment></comment><comment><USER22> I'm not familiar around the syntax, but I'm interested to know how much of this was a religious battle and how much of it results in meaningful complications for user code down the line. I've heard really good things about the Rust community (like nothing bad at all), until maybe two weeks ago when somebody mentioned this stuff. I'm a really big fan of not having religious battles.

Is this syntax for native coroutines? Can it be combined with existing user and stdlib syntax? What pathways for syntax development does this decision cut off entirely, and pathways does it leave open? What did the Rust community / maintainers learn from this debate, and how can the Rust community avoid such battles in the future?

<comment><AUTHOR> > I'm interested to know how much of this was a religious battle and how much > of it results in meaningful complications for user code down the line.

Due to the connotations of "religious battle", it's hard to get a good answer here. Nobody wants to be painted in this light.

> Is this syntax for native coroutines?

No.

> Can it be combined with existing user and stdlib syntax?

Yes.

> What pathways for syntax development does this decision cut off entirely, > and pathways does it leave open?

Nothing outside of the async/await feature itself.

> What did the Rust community / maintainers learn from this debate, and how > can the Rust community avoid such battles in the future?

This is too long for an HN comment :)

<comment><USER17> > Due to the connotations of "religious battle", it's hard to get a good > answer here. Nobody wants to be painted in this light.

Haven't we all found ourselves lined up as one of a pair of camps over some heated dispute over a bit of minutiae? The whole time you know it's a bit silly, but not entirely and you feel compelled to continue to argue.

Using a term like "religious battles" with tongue firmly in cheek is recognizing that we're prone to such things because we're human beings, by putting a lampshade on it.

<comment><USER23> This gets trickier when you have a community where some people practice religion in their daily life, and some people don't, and where the interactions between the two aren't always fun. It's not that the subject needs to be totally forbidden of course, but when it's just as easy to use different metaphors, we might as well.

</comment></comment></comment></comment><comment><USER24> I am amazed how well documented and transparent was the whole process. They new the decision would be difficult to make and there will always be people who wouldn't like the final syntax so they made sure to state their reasoning and trade offs clearly. Fantastic job. Can't wait for August. Thanks!

</comment><comment><USER25> Nice! That was quicker then I Expected. How far are they with the implementation? Not using rust, but following progress because it is on hackernews so much.

Why does it take so long for swift to have this? Swift + iOS developers really really benefit from it. And there are loads of ios developers compared to rust developers.

<comment><USER26> It has been usable on nightly since `nightly-2019-05-09` (with [https://github.com/rust-lang/rust/pull/60586](https://github.com/rust- lang/rust/pull/60586) )

</comment></comment><comment><USER27> Time to update [https://areweasyncyet.rs/](https://areweasyncyet.rs/) again...

Really looking forward to this once it reaches down into some of the network/web frameworks, database drivers etc.

</comment><comment><USER28> Fantastic! I'm extremely excited with this update on the Rust async/await syntax! I have been following the blog posts and the issue tracker for a long time and couldn't wait till this day arrived!

Eagerly waiting for the 1.37 release!

Great job Rust Team!

</comment><comment><USER29> I'm not familiar with Rust, someone can explains why they went with .await? Is await a field / method on a class / struct?

<comment><USER30> None of the above. It's compiler magic. It's a keyword that says 'await on this awaitable object' (currently only a Future can be await-ed).

You can read the OP which contains links to more blog posts on the reasoning. I think this is a bad decision precisely because of the questions you're asking. At least making it a 'magic method' (i.e., Future::await(...) or future.await()) with no implementation would have been better in basically every way. A 'dot' operator already exists and this just makes it confusing.

<comment><USER31> I've been planning to try out Rust for a side project, and this decision is so principle-of-most-surprise that it's got me reconsidering, wondering what other unpleasant weirdness lurks in the language. Looking down their other options in one of the linked articles, they seem to reject a couple fine ones outright and then went with one _I 'd_ have rejected outright as being too hostile to anyone who's not quite familiar with the manual, having memorized exceptions to ordinary behavior like this. I'm struggling to understand why anyone liked this one at all, let alone enough to push it to the top of the pile.

<comment><USER32> Yeah, this is really one of the only big warts, and hopefully not a trend.

But the rest of the language is really good so don't let this scare you off. Most of rust feels very well thought out and reasonable.

<comment><USER31> OK, if the exceptions are _quite_ exceptional and hoping, as you note, this doesn't represent a trend, I'll keep it in consideration. Thanks for the insight.

<comment><USER30> To reinforce what others are saying, this is the only Rust decision that gives me even a moments pause. Everything else is pretty pleasant. Honestly, I hope that this backfires and gets fixed in a future Rust Edition. It's a very silly thing.

</comment></comment></comment></comment></comment></comment><comment><USER30> Excited for the feature.

Disappointed we didn't get something like a magic method (e.g., lang item) (which isn't without precedence [1] [2]) so we could have had `Future::await(fut)` or `fut.await()`.

[1] - [https://manishearth.github.io/blog/2017/01/10/rust- tidbits-b...](https://manishearth.github.io/blog/2017/01/10/rust-tidbits-box- is-special/) [2] - [https://manishearth.github.io/blog/2017/01/11/rust- tidbits-w...](https://manishearth.github.io/blog/2017/01/11/rust-tidbits-what- is-a-lang-item/)

<comment><USER33> `fut.await()` looks too magical. There's no hint in that expression that it's anything other than a method call. You could argue the same about `fut.await`, except in this case `await` is a keyword and thus the expression `x.await` is known to be an await expression without knowing anything about `x`, whereas `fut.await()` requires knowing the type of `fut` to understand that the method call `.await()` resolves to the lang item. Also, since it's a lang item, you could write your own nostd library that picks a different name for the same lang item and cause even more confusion.

<comment><USER30> > There's no hint in that expression that it's anything other than a method > call.

Compared with `fut.await`...

> There's no hint in that expression that it's anything other than a field > access.

At least there is precedence for functions to have magical compiler-ness for 'doing stuff', instead of overloading field access which is one of the simplest operations you can have.

> ... requires knowing the type of `fut` ...

tbh, you _don 't need to know_ how await works. It goes and does stuff and returns a value. If you need to know what it does, you're looking up the types and seeing, 'oh its a future' and looking at that.

Contrast with the field access one and you don't even know its something else entirely.

I guess I just don't buy that it can't be a method. Like, formally, yea, it isn't a well-defined, safe Rust method. But make the impl

        fn await(self: Self) -> Self::Target {
            intrinsic::await(self)
        }

Now its a method defined on the `Future` trait, it's discoverable, it's clearly magic, it's ergonomic... In my opinion, it beats the field access one in every conceivable metric.

It's just frustrating, I guess.

<comment><USER34> If it's a method you should be able to create a vector of futures and `.map(Future::await)` or even `.map(Future::await as FnMut(_) -> _)`. Clearly this would never work, since `await` is implement by transforming the containing function into a state machine, your suggestion would make this impossible.

<comment><USER30> I mean, why couldn't it?

        let newvec = vec![fut1, fut2, fut3].map(Future::await).collect()

would be equivalent to

        let f1 = fut1.await();
        let f2 = fut2.await();
        let f3 = fut3.await();
        let newvec = vec![f1,f2,f3];

or

        vec![fut1,fut2,fut3].map(|fut| fut.await).collect()

<comment><USER34> I think you fundamentally misunderstand async await. `vec[fut1, fut2, fut3].map(|fut| fut.await).collect()` will not do what you might expect, although I haven't bothered to read the RFC whether it will be allowed at all. Await _must_ have compiler support and cannot just be some function you call.

<comment><USER30> I am certainly being sloppy, though I think fundamentally misunderstanding it is a bit of an exaggeration. I know you can't await in a non-async function so, at the very least, you'd need (IDR the syntax for async closures?)

        vec![fut1, fut2, fut3].map_async(async|fut| fut.await).collect()

I believe that could be built. Though, now I'm getting myself tripped up. Because I claimed that this is similar to

        vec![fut1, fut2, fut3].map(Future::await).collect()

But I notice that I expect `await` to be a blocking, non-async function. Which, feels strange in that the lambda in the first block needs to be async but the function itself doesn't.

> Await must have compiler support and cannot just be some function you call.

I'm not saying it doesn't need compiler support. I explicitly state that it does - I just want the magic to be a little more explicit. Moreover, I believe that most programmers think of functions as 'encapsulated code', something that does a thing. In this sense, it matches what await does better than syntax that looks like it's accessing a field. Admittedly, in the purest sense of encapsulation, this method 'escapes' that encapsulation, but I don't consider that terribly important.

</comment></comment></comment></comment></comment></comment></comment><comment><USER35> Awesome, thanks Rust team! I'm super excited for this to be stabilized.

> That won't be the end of the async/await feature - there will be a lot of > extensions left out of the minimum feature

Is there a summary of these somewhere for perusal?

<comment><USER36> i saw [https://areweasyncyet.rs/](https://areweasyncyet.rs/) linked here, it mentions future extensions

</comment></comment><comment><USER37> I think that the majority of people still don't understand what they're not getting in August. It's an async-await mvp.

</comment><comment><USER38> This guy is so qt and nice.

</comment><comment><USER39> The fact that discussions over syntax generate pages and pages of furious bickering, while discussions over semantics (which is what actually matters) get a shrug, is the ultimate example of bikeshedding in PL design. Honestly, syntax just _doesn 't matter_. Yes, particular poor choices can impede usability, but that's not applicable here, and ultimately after two minutes or so of learning the new syntax there's no difference between this and "await foo".

<comment><USER40> Syntax may be irrelevant at the end of the day, but nice syntax can make a big difference in usability imo. I'm not following the Rust example, but discussions of it remind me about discussions about UFCS (Universal Function Call Syntax). That's where `foo(a, b)` can be rewritten as `a.foo(b)`. That may seem minor, but look at this code:

        half_square = divide(square(a), 2)

In comparison to:

        half_square = a.square().divide(2)

Many find the latter much more pleasant to read, and things like this can make a big difference in how fun I find it to use a language.

<comment><USER41> Interesting example...I find the first much easier to read and reason about. ¯\\_(ツ)_/¯

<comment><USER42> It would be nice for both of us to get a brain scan while reading that kind of code, because I find the second immensely more intuitive to parse

<comment><USER43> I find them completely equivocal. This is the geeky version of the orange/white dress.</comment></comment></comment></comment></comment>


Ask HN: Built StartOpedia org for HNers - now please add to it - <AUTHOR>

Inspired (mainly) by various threads coming up here at HN regularly, I thought of creating an information portal of sorts for tech startup entrepreneurs and after about 200 hours of code hacking/designing, content research etc. the outcome is:
http://www.StartOpedia.org
* Tech/Startup News/advice aggregator
* Directory of (user submitted) Startups
* A categorised resource directory of Startup-interest web sites (Users can submit sites)
* Disqus-powered commenting
* General-purpose Message Board
* A section on Failed Startups
* Job Board
* More in the works :)
Still (many) rough edges there that we're working on, but done for the most part.
I built it primarily for this (HN) community and now (while we - me and my people - continue to expand/improve it), I invite all interested HNers to pitch-in with/contribute/share what they can.
Some specific ways/areas (in no particular order) where you can help are:
1. Send bug reports
2. Provide General feedback (please post here or at the site message board)
3. Send New ideas / suggestions
4. Submit Startup information (yours or others)
5. Suggest Startup advice feeds
6. Suggest Startup resources (under the resource directory - Add URL)
7. Suggest a structure/content plan for the 'Failed Startups' section
8. Suggest a structure/content plan for the 'Job Board' section
9. Suggest additional categories for the Resource Directory and
10. Anything else you can think of
We've given it our best shot, now please help us make it more useful for the community. <comment><USER2> Last time it was 1995 when I saw so ugly logo treatment. What is this grey box on the back of logo?!

<comment><AUTHOR> Thanks for the feedback. Graphics design is not an area of primary strength or interest for us. Perhaps, you'd like to contribute an alternative logo?

<comment><USER3> Have you thought of using Twitter Bootstrap (<http://twitter.github.com/bootstrap/>) or Zurb Foundation (<http://foundation.zurb.com/>) to help you out with a cleaner and easier UI?

<comment><AUTHOR> Thanks. :) I'll ask my people to check these out.

</comment></comment></comment></comment><comment><USER4> Clickable link: <http://www.StartOpedia.org>

</comment><comment><USER5> Very nice Vic. I will use it.

<comment><AUTHOR> Great Chris. Any suggestions and additions to the Resource Directory section also welcomed. :)</comment></comment>


The Great Adobe Purge of '19 - <AUTHOR> https://dazwallace.wordpress.com/2019/05/08/the-great-adobe-purge-of-19/ <comment><USER2> I remember people expressing concerns about this exact scenario back when Oracle bought Sun.

Reminds me of a James Gosling quote: "during the integration meetings between Sun and Oracle, where we were being grilled about the patent situation between Sun and Google, we could see the Oracle lawyer's eyes sparkle"

<comment><USER3> Hearing about the antics of Oracle always makes me think of a certain comic[1]

[1][http://1.bp.blogspot.com/-TYqlwLYCeP4/TyAIYd3-VLI/AAAAAAAACb...](http://1.bp.blogspot.com/-TYqlwLYCeP4/TyAIYd3-VLI/AAAAAAAACbM/bzx_xixZznc/s1600/amazon- google-facebook-microsoft-apple-oracle-organisational-chart.png)

</comment></comment><comment><USER4> I understand the desire to not support older versions, but why just marking/advertising them as `not supported`, insecure isn't enough. Is this Adobe being unnecessarily aggressive or is there some other reason?

<comment><USER5> Looks like a 3rd party licensing reason. Meaning, older versions of those apps may include some component for which Adobe no longer has a license.

<comment><USER6> Or it has turned out to infringe a patent, or turned out the party they licensed it from wasn't the real owner.

</comment></comment></comment><comment><USER7> I am holding on to my copy of Adobe Creative Suite 6 until I die.

<comment><USER8> I'm expecting my Mac copy to stop working in 10.15 and I'm quite concerned about it.

<comment><USER9> It isn't a perfect solution, but the license agreement for Mojave ([https://www.apple.com/legal/sla/docs/macOS1014.pdf](https://www.apple.com/legal/sla/docs/macOS1014.pdf)) allows you to:

 _"install, use and run up to two (2) additional copies or instances of the Apple Software within virtual operating system environments on each Mac Computer you own or control that is already running the Apple Software, for purposes of: (a) software development; (b) testing during software development; (c) using macOS Server; or (d) personal, non-commercial use."_

<comment><USER8> I may go that route, but none of the virtualization solutions are particularly performant for macOS guests. I think I'd rather reboot into a Mojave partition, if it comes to that.

</comment></comment></comment></comment><comment><USER10> I know a large number of people who maintain older Macs and PC specifically to run older versions of Adobe Photoshop and Premiere. This is going to hurt the freelance video editors very hard.

<comment><USER11> By 'older' do you mean pre-Creative Cloud?

If so, I can't imagine what Adobe could actually do to stop them? I figure the idle legal threats seen so far (I know of two people who claim to have received emails from Adobe - I'm awaiting one myself, as I still run 2014 Photoshop on this machine) is simply so they have a platform from which to deny access to older versions as provided through CC.

Anything installed from disc is beyond their practical reach.

I'm really curious to know what's underlying this - if it is a third party reason, I'm kind of flumoxed at Adobe's stance towards its presumably quite loyal userbase!

<comment><USER12> I want photoshop about once a year and I am literally still using photoshop 6 on windows. It's over 20 years old. Works fine, installs in about 5 seconds.

<comment><USER11> I'd happily use my disc versions of CS2 Illy and PS as they have all the tools I need, but unfortunately I need to maintain compatability with client files so I have a CC subscription.

Frankly, I hated paying as much as I did for Illy and PS here in the UK, which compared to about the same cost as the full suite in the States, but I complained sometime in the last year and now have the full suite for a mere 30p more than I was previously paying.

I still dislike their subscription model, but it now leaves a bit less of a sour taste.

</comment></comment></comment></comment><comment><USER13> Does anybody know the oldest version of Photoshop you can buy and not license? Can you still buy the software second hand?

<comment><USER14> What you are purchasing is a license, which may (and almost certainly does) have limitations. One such limitation could be time (commonly done for product trials, but not limited to such).

One could ALSO, assuming the owners wanted to sell it, buy PhotoShop but it would likely be millions of dollars and there would probably be a more economical solution to whatever problem you are trying to solve.

<comment><USER15> You're conflating buying a copy with buying a license. The two are not the same - e.g. you can buy a copy of a book, without buying the copyright itself. The book is then _yours_ , not 'licensed'. That you don't have the right to make further copies is a different matter.

<comment><USER14> Books and software differ.

[https://www.justice.gov/jm/criminal-resource- manual-1854-cop...](https://www.justice.gov/jm/criminal-resource- manual-1854-copyright-infringement-first-sale-doctrine)

<comment><USER15> According to that very same link, they do not. You probably mean this passage:

> Most computer software is distributed through the use of licensing > agreements. Under this distribution system, the copyright holder remains the > "owner" of all distributed copies.

But this is not a difference in how copyright works for software - it's just the description of the practice of contracts of adhesion. One could 'license' a book the same way, or not include these agreements with software.

<comment><USER14> Do you believe that statement contradicts or supports my claim (below) ?

> What you are purchasing is a license, which may (and almost certainly does) > have limitations. One such limitation could be time (commonly done for > product trials, but not limited to such).

My assertion is that what you are purchasing in the Adobe Software case is a license, what you are purchasing in your hypothetical book case is not. It is something else, it is different.

<comment><USER15> Yes, it's different in the Adobe Software case, because they _chose_ to attach a license to it. They _could_ have just as well sold, not licensed, individual copies, the same way that books are sold.

Books and software don't differ intrinsically - the business practices of software _vendors_ differ from those of book vendors.

What bothers me is the pretense that the only possibilities are licensing software, with all of the zero rights that usually entails, or buying the entire copyright to the software, for, as you said, millions of dollars. It borders on a lie of omission - it's perfectly possible to sell copies of software - vendors just _choose_ not to.

<comment><USER14> So are we now both in agreement that my original statement (below) is factually correct ?

> What you are purchasing is a license, which may (and almost certainly does) > have limitations. One such limitation could be time (commonly done for > product trials, but not limited to such).

> One could ALSO, assuming the owners wanted to sell it, buy PhotoShop but it > would likely be millions of dollars and there would probably be a more > economical solution to whatever problem you are trying to solve.

And we are _only_ in disagreement that the situation warranted listing additional purchasing options, in context ?

<comment><USER15> Agreed.</comment></comment></comment></comment></comment></comment></comment></comment></comment>


Why We Think We're Better Investors Than We Are - <AUTHOR> http://www.nytimes.com/2016/03/27/your-money/why-we-think-were-better-investors-than-we-are.html <comment><USER2> "This despite overwhelming evidence that even professional investors are no more likely to beat the market than monkeys throwing darts at securities listings. Money managers, at least, are paid to make investment bets. But why do amateurs believe they can outperform the professionals?"

To answer this rhetorical question with a rhetorical answer, because amateur investors consider themselves to be smarter than monkeys throwing darts at securities listings. And as an amateur, I have been better than a monkey (or an index fund). But truth be told, if I had been pro, I would've held onto to everything I bought instead of ever selling it for princely profits.

</comment><comment><USER3> It takes a shrewd contrarian to beat the market anyway, so if you fall for this fodder you might as well heed its advice.

</comment><comment><USER4> This seems to be assuming that we think we're good investors. I think, on average, people are bad investors. And I'm quite average in this regard.

</comment><comment><USER5> This also holds for the (time+effort+financial) investments in our own startups.

</comment><comment><USER6> TLDR: just a list of human psychology traits. Hubris, optimism, hindsight, attribution bias, and confirmation bias. Nothing new.</comment>


"Leaked" FBI psychological profile of the Anonymous leadership - <AUTHOR> http://arstechnica.com/tech-policy/news/2011/09/bisexual-money-grubber-with-aspergers-how-to-troll-anonymous.ars

<comment><USER2> It's amazing how the FBI can study how each person uses a language, in order to develop a theory on intelligence,social status, etc.

<comment><AUTHOR> It sure is. We are probably only a few steps away from Minority Report where they could stop crimes before they happen. Ever seen that movie?</comment></comment>


How to Get Faster at Doing Things - <AUTHOR> https://medium.com/knowledgebottle/how-to-get-faster-at-doing-things-5561ed3857c0 <comment><USER2> > Use a Pomodoro Timer. I have mine as a Chrome extension. > Experiment with > the 30 + 5 method > Create a pattern with your Pomodoros.

Aren't these three mutually exclusive? Could they not have been combined as one bullet? I wonder if the list has been edited?

Productivity has two parts: initial output and editing / QA. The first part has always been easy for me. But the second one really drags. Most of this list focuses on the first part, but I'm more interested in the second.</comment>


U.S. jobless claims surge to 26-year high (highest since October 1982) - <AUTHOR> http://www.reuters.com/article/ousiv/idUSTRE51439X20090205

<comment><USER2> It's not entirely clear from the article, but it looks like they're measuring jobless claims in absolute terms, rather than by percentage of population. The population of the U.S. has grown by about 70 million people since 1982.

</comment><comment><USER3> The actual # of unemployed is most likely higher than the reported #s. They stop counting a person as unemployed after they stop receiving the unemployment checks, no matter if they found a job or ran out of time

<comment><AUTHOR> I won't refute you on that (someone once posted a article here on HN that discussed this) however the linked article for this thread is specifically about people filing for unemployment for the first time. Thus your point that "They stop counting a person as unemployed after they stop receiving the unemployment checks, no matter if they found a job or ran out of time" doesn't taint the stat of a 26-year high for filings for _new_ claims.

</comment></comment><comment><USER4> I guess I will have to start my own business after I finish school instead of trying to squeeze my way on to the corporate ladder.

I'll be honest, I'm not overly worried about unemployment. Good ideas will still be able to take off, and talent that may have previously unavailable to a startup will now be easier to acquire. Unemployment is a huge problem and I feel for everyone I know who has been affected by the recent downturn, but I sincerely believe that it is our job as entrepreneurs to help alleviate this problem.</comment>


Ask HN: If you were starting another business, what would be in your todo-list? - <AUTHOR> I've been trying to get a business of my own started since I was around 16 years old. Life didn't really go how I expected it to go (I've heard this is normal). I've tried a few different times to start a variety of businesses and all of them have failed. I learn something every time but I'd really like a shortcut. So then it hit me, "I should ask people who've been there before!".
My business-attempts have involved SaaS, Gutter Cleaning, Car Detailing, contract Web Development, and so on... Usually, I'd have some sort of plan laid out, but most of that plan involved building a really nice website. That isn't all it takes to succeed, though, as I've learned.
If you were starting a new business with low funds (assume less than ~$1k), involving any effort you'd pursue, what would your Todo-List look like?
How would you prioritize your list? How much time would you put into each item?
I know this is a vague question, which is okay because I'm looking for vague answers. Even vague answers to this question would lead me to a more accurate understanding of this sort of process.
Thanks in advance! <comment><USER2> I haven't seen a better checklist than this: [https://blog.ycombinator.com/how-not-to- fail/](https://blog.ycombinator.com/how-not-to-fail/)

The two things I would note is that 1) it's really hard to make something people want—-you need to be good at your craft and have a team that complements each other 2) NPS score is a great way to measure whether you have done that.

<comment><AUTHOR> Excellent! I haven't seen this before, surprisingly!

</comment></comment><comment><USER3> This article might interest you: [https://www.startupgrind.com/blog/the- startup-framework-to-v...](https://www.startupgrind.com/blog/the-startup- framework-to-validate-your-idea-before-you-spend-1/)

Summary: Clearly identify a problem, issues with existing solutions, and that it's a priority worth paying for among potential customers.

</comment><comment><USER4> A business needs paying customers. That's the thing you need to somehow figure out.

Everything else is details.

<comment><AUTHOR> Straight forward. I like it. That leads me to several other questions...which may be out of scope.

<comment><USER4> Ask away. I spun my wheels a whole lot before I had any clue what I was doing.

<comment><AUTHOR> I really appreciate your time. I'll try to phrase the questions as best as I can! With a computer repair business that I tried to start, one thing that would get me a couple of clients a week would be Craigslist ads. I ended up having a handful of clients and all of them were older, between 50-70 years of age. It's hard to scale lead growth with that strategy alone, because I had no idea how many people were seeing the ad that could have benefited from the service. I wish CL offered some sort of data like that.

If you were starting a lone mobile computer/printer repair/installation business, what other strategies would you use to get clients? I feel almost silly for asking the question but I'm curious to hear your response.

I know that with Facebook ads, you can design your campaign to receive certain results, such as a page like or website visit. Do you think facebook ads would be another strategy or something to employ later on, or is the business example above not something that FB ads would be good for?

Have you ever employed a strategy to get customers that isn't in every "Strategies to get customers..." article that you can find on the web? I've rarely found an article online that went beyond the basics of a handful of common strategies. I found more in detailed "success stories" where people described unique actions they took which ended up leading to their success.

Was there a book that changed the way you'd market? Anything and everything is welcome and appreciated. This was sorta rushed because I have a deadline to meet with a project but figured I'd put my thoughts out there and see what comes of it!

<comment><USER4> _I ended up having a handful of clients and all of them were older, between 50-70 years of age._

Let me suggest you find other ways to reach the same demographic. I assume people aren't mailing you their computer. This sounds like a local business.

Make a list of local senior housing projects, senior centers, etc. Design up a paper flyer and print a few because that's the absolute cheapest way to do local advertising. Go knock on doors and ask if they have a bulletin board and if it would be okay to leave a flyer with them.

Use tear off tabs to both help potential clients retain the contact information and as an informal tracking mechanism. Periodically replace the flyers when the tabs are gone or nearly gone.

Make a list of places that accepted your flyers. Follow up periodically.

Expect your flyer, your contact list and other details to evolve over time. As you hit on some successes, think about which things worked and make some guesses as to why. Ask yourself how you might replicate the piece of the formula that you think worked in order to further improve on what's working.

Then repeat the process of trying a thing, thinking about the results it got and trying to improve on those results.

 _Was there a book that changed the way you 'd market?_

Starting in my teens, I read a lot of books and articles over the years and even attended free classes from local Chambers of Commerce. I knew a lot in theory. In practice, I spent a lot of years failing to make money in an entrepreneurial fashion.

While desperately poor, I began collecting recyclables to help cover my expenses. I learned a lot from that.

My background had inculcated me with broken mental models. Merely reading about how you were supposed to do business resulted in me spending years pursuing "window dressing" instead of pursuing customers.

I registered my fictitious business name with the county. I set up a business bank account. I had a spiffy leather briefcase. I said "yes" to a free trial of office equipment I didn't need. I bought a nice desk and office chair.

None of it resulted in paying customers.

There are things that are highly regulated where you absolutely need to jump through the right hoops before you can reach out to your first customer. But if you are doing something that isn't highly regulated, you need to figure out a product or service people will pay for and then find ways to connect to customers.

That's it. That's the crux of it. Then iterate on your successes and view your failures as learning experiences.

If it's regulated, you need to add in some steps to make sure you are in compliance. You always should do a little googling to check pertinent laws for your jurisdiction anytime you try a new thing to make sure you aren't overlooking some legal detail.

So, for example, you sell X locally and you know how to do that successfully. You decide to branch out to online sales. Now you need to research sales tax when selling out of state plus details of shipping.

They both have logistical and legal components. For starters, you should look up if it's even legal to mail it (across state lines, to another country, whatever). It may be perfectly legal to sell locally but illegal to mail it. Some people ship first, learn it's illegal after the fact. Oops.

<comment><AUTHOR> This was an excellent response! I am extremely grateful you took the time to write this up. It gives me a lot better understanding of things and is inspiring some new ideas. I'm curious about your experience in collecting recyclables. I've been in some interesting/desperate situations as well! I used to go to dumpsters around local apartment complexes and pick up furniture and what not and re-sell it. My biggest single find was a large antique mirror that I sold for $300! A lot better than cans.

You can read more about that situation here... [https://blog.usejournal.com/my-story-as-a-homeless- developer...](https://blog.usejournal.com/my-story-as-a-homeless- developer-5874731c42ed)

<comment><USER4> I was homeless at the time. I feel like there's a lot of downside to me trying to get into the specifics.

Suffice it to say it paid cash the same day, which gave me immediate feedback on which actions were profitable and which weren't. This helped me develop solid mental models that generalized concerning where to invest time and effort in developing an income.</comment></comment></comment></comment></comment></comment></comment>


Automasymbolic Differentiation - <AUTHOR> http://jtobin.ca/blog/2014/07/06/automasymbolic-differentiation/ <comment><USER2> Am I the only one who thinks this is basically a computational implementation of nonstandard analysis?

[edit: There was an excellent reply here which is now deleted, which said essentially that it's not exactly nonstandard analysis. Nonstandard analysis requires you extend R to a field containing infinitesimals.

In contrast, all that is necessary here is extending R to an algebra with a nilpotent element (e^2 = 0).

[http://en.wikipedia.org/wiki/Dual_number](http://en.wikipedia.org/wiki/Dual_number) ]

</comment><comment><USER3> There is a lot of support and interest in automatic differentiation [1] in the Julia [2] community, partly because the language design makes it relatively easy to do. In fact, there is a whole "organization" dedicated to AD packages, JuliaDiff [3]. In particular there are packages for dual numbers and their generalizations, as well as reverse-mode AD packages. ReverseDiffSparse.jl, for example, uses some clever tricks including graph coloring to create very efficient Hessian matrices.

You can make use of AD for more than just playing around too, esp. for optimization (JuliaOpt [4]): Optim.jl will use them to calculate exact derivatives if you don't provide them, and JuMP.jl will use them to calculate the sparse Jacobian and Hessian matrix for a nonlinearly constrained optimization problem (which can be used by, e.g. Ipopt.jl)

[1]: [http://en.wikipedia.org/wiki/Automatic_differentiation](http://en.wikipedia.org/wiki/Automatic_differentiation)

[2]: [http://julialang.org/](http://julialang.org/)

[3]: [http://juliadiff.org/](http://juliadiff.org/)

[4]: [http://juliaopt.org/](http://juliaopt.org/)

<comment><USER4> To follow up on this, a lot of the overhead from reverse-mode AD can be avoided by flattening out the expression graphs and compiling specialized functions (at runtime). A number of the JuliaDiff packages support this approach. This is not a new idea, but Julia's hooks to LLVM make this surprisingly easy to do.

</comment></comment><comment><USER5> Automatic differentiation is very nifty and should be more widely known about. Many machine learners will already know about reverse-mode AD under a different name though: backpropagation.

The author might be interested in the theano library used to compute gradients for neural models in pylearn2. It supports performing some algebraic simplifications on the compute graph before running AD. I'm not sure if it supports exactly what's being proposed here, but it does seem to enable some interesting hybrid symbolic / automatic approaches.</comment>


African start ups into YC - <AUTHOR>

Hey sam, We here in africa really appreciate the work you guys are doing to support start ups.Are there any notable start ups you have funded from africa.? <comment><USER2> If they have, you should probably do your own research, and if they haven't, why don't you be the first one? :)</comment>


How Frankie Manning's incredible dancing skills made him famous twice,50yr apart - <AUTHOR> http://www.vox.com/2016/5/26/11776066/frankie-mannings-102nd-birthday <comment><USER2> No tech but Frankie was awesome. I was lucky enough to take some classes from him in the late 90s.</comment>


Knowledge Management for Data Science - <AUTHOR> What tools do data scientists use to manage knowledge to avoid lost research/ideas and drive code reusability? <comment><USER2> Currently the approach is to use an ontology. There are free onto-editors such as Protege. "Onto" refers to everything. A common practice is to classify additions to knowledge either with a classifier or manually. The potentially lost knowledge is the unclassied remains. So we include a bag called "undecided". It can be just one per system or it can be many scattered throughout the ontology.</comment>


Don't put all your eggs in one Wikipedia - <AUTHOR> http://asdofindia.blogspot.com/2015/08/dont-put-all-your-eggs-in-one-wikipedia.html?m=1

<comment><USER2> > I recently tried creating a page for Swathanthra Malayalam Computing ... it > was soon deleted.

Sounds typical.

I used to be a frequent contributor. I started a few stubs that later became large articles, and helped research a few more established articles.

Felt great.

Nowadays, though, it's like a gold rush happened, everyone's staked out their territory. You edit a page, you get a lot more pushback. You create a new page, marked for speedy deletion.

I don't bother editing very often anymore, sometimes I just comment on pages. I guess I'm part of the trend:

[0] [http://www.theatlantic.com/technology/archive/2012/07/3-char...](http://www.theatlantic.com/technology/archive/2012/07/3-charts- that-show-how-wikipedia-is-running-out-of-admins/259829/)

[1] [http://stats.wikimedia.org/EN/SummaryEN.htm](http://stats.wikimedia.org/EN/SummaryEN.htm)

[2] [http://www.technologyreview.com/featuredstory/520446/the- dec...](http://www.technologyreview.com/featuredstory/520446/the-decline-of- wikipedia/)</comment>


Famed Apple engineer rejected for job at the Genius Bar - <AUTHOR> http://www.businessinsider.com/jk-scheinberg-apple-engineer-rejected-job-apple-store-genius-bar-2016-9?yptr=yahoo?r=UK&IR=T <comment><USER2> Wrong title. He _was_ rejected.</comment>


Covariance, Contravariance, and Super Type Constraints - <AUTHOR> http://hhvm.com/blog/9215/covariance-contravariance-and-super-type-constraints

<comment><USER2> Covariance and contravariance are intimately related to "mapping" and only incidentally related to subtype polymorphism. In particular, if we assume we have a function

        coerce : a -> b

which can only be applied when a is a subtype of b then we can dispense with subtyping entirely through explicit coercion.

Now, covariance occurs when you can "map" over a structure "in the same direction".

        mapCovariant : (a -> b) -> (f a -> f b)

while contravariance occurs when maps "flip"

        mapContravariant : (a -> b) -> (f b -> f a)

and we get the subtyping relationship naturally from applying coerce

        covariantCoerce = mapCovariant coerce
        contravariantCoerce = mapContravariant coerce

Now all of this only applies "mathematically" where things are necessarily constant. This implies that we ought to think of mapCovariant and mapContravariant as working on "transformations of data" instead of operating imperatively.

In the event that we have mutability then we can violate covariance and contravariance as noted. Really, though, this is a consequence of a larger problem.

In any mutable type we can apply a transformation on that type while maintaining all references to it

        a = [1, 2, 3];
        a.mapCovariant(fun (x) -> repeat "a" x);

        // a : [String]
        // a == ["a", "aa", "aaa"]

If we're adamant about treating things as transformations then functions like mapCovariant cannot operate mutably since they allow the changing of a generic type.

<comment><USER3> Mutation invariably involves....invariance. There are many ways of looking at this, here is mine: If a := b and a.F := c, then we must assume b.F := c is possible. However, such edges are not tractable in a type system, so we conservatively rely on invariance instead.

<comment><USER2> Agreed. (Syntactic) types are exactly incoherent with the kind of "spooky action at a distance" that mutability enables. Semantic type layers could do more, perhaps.

<comment><USER3> I've got a whole type system going based on non-syntactic types that supports aggressive type inference in the presence of subtyping. It uses type trees rather than coercions, and types are built based on observation. Will write more aboit it soon.

<comment><USER2> Sounds really interesting! I look forward to seeing more

</comment></comment></comment></comment></comment><comment><USER4> This is a fantastic explanation of covariance and contravariance. Much better than most explanations I've seen from the Scala community.

</comment><comment><USER5> f-bounded types (such as in the article) still leave properties to be desired, however: [http://tpolecat.github.io/2015/04/29/f-bounds.html](http://tpolecat.github.io/2015/04/29/f-bounds.html)

</comment><comment><USER6> Ahhhh, *variance.

The definitive explanation of why inheritance should always be avoided in favour of implementation of abstract interfaces.

<comment><USER7> Interfaces have variance too, as long as they give rise to a subtyping relationship (which, in most languages that have them, they do).

<comment><USER6> Ha! Cunningham's law.

I see that many OOP languages (of various purity) have interfaces that may be extended by other interfaces. Is that what you're talking about?

I also found that *variance is used in the context of Haskell, but it seems to be far from being widely used.

Haskell being my template of a language with a good-looking interplay of polymorphism and algebraic typing.

<comment><USER2> _variance is used in Haskell_ all the time _. Haskell 's subtyping/type- subsumption relation is less pervasive than an OO language's, but it's critical. Furthermore, _variance is more fundamental than subtyping. It is not at all a stretch to say that the type mechanics of _function composition_ are based on contravariance/covariance matching.</comment></comment></comment></comment>


Show HN: SSR-Proxy – server side rendering proxy for better SEO - <AUTHOR> https://github.com/xiamx/ssr-proxy <comment><AUTHOR> Please share with me your thoughts, feedback and suggestions :)</comment>


Ethereum Security Bug Bounty - <AUTHOR> https://bounty.ethdev.com/

<comment><USER2> > delivering stable protocols and secure software upon genesis block release

> Elliptic curve (secp256k1, ECDSA)

Isn't secp256k1 and ECDSA prone to implementation errors? Why not use EdDSA instead? :)

<comment><USER3> Those are Bitcoin's primitives, right? Presumably, they're just doing what everyone else does.

<comment><USER2> Sure, I just thought (based on the genesis block comment) that they were going to make their own. And, well, [https://eprint.iacr.org/2014/161.pdf](https://eprint.iacr.org/2014/161.pdf)

Using the same primitives as everyone else is probably a conservative choice.

</comment></comment></comment><comment><USER4> Hard to read on my phone</comment>


In defense of the multipage article - mkr-hn http://mkronline.com/2013/02/28/in-defense-of-the-multipage-article/

<comment><AUTHOR> Couldn't you just sell more ad units on a single page that would be viewed as the user scrolled?

<comment> mkr-hn That sounds like it would be irritating. Random objects popping out as I read are the #1 thing that makes me close pages.</comment></comment>


Apple boycotts Fox News because of Glenn Beck - <AUTHOR> http://www.tuaw.com/2010/03/29/apple-boycotts-fox-news-because-of-glenn-beck/ <comment><USER2> I for one am glad about this. Glenn Beck is the worst kind of person, stirring up fear for his own personal gain.

This along with google's decision to leave china, have been two great examples of companies doing (at least what I perceive to be) the right thing.

<comment><USER3> Glenn Beck is not the worst kind of person. You see? You're saying something blatantly false and everyone agrees with you. It's sad.

<comment><USER4> I can't think of a worse _kind_ of person.

Glen Beck obviously isn't the worst in this category.

<comment><USER5> What about, say, Hitler?

Don't get me wrong, I can't stand Beck, but I do think he compares favorably to Hitler, Stalin, et al.

<comment><USER6> This is an interesting variation on Godwin's. What does it mean when someone is being compared favorably to Hitler?

Reminds me of a friend's quip about another friend's father: "I was surprised to learn he leans a little to the left of Mao."

<comment><USER5> I knew someone was going to call Godwin's, even though I don't think it's justified. The thing is, if you're going to make extreme claims (like that Beck is the worst kind of person) then you are really asking for it.

</comment></comment></comment></comment></comment></comment><comment><USER7> It's more accurate to say they've withdrawn advertisement due to pressure from Color of Change.

Given Fox's ratings I'm sure they can fill the void with less picky companies. The network's demos don't mesh with Apple's target market anyway.

<comment><USER8> I bet a lot of people in marketing disagree with that last statement.

<comment><USER7> Are you one of those people in marketing? If so, straighten me out because I don't believe you!

<comment><USER9> There are conservative folks with plenty of expendable cash... it's not like Apple caters its products to liberals. In many ways Apple tries to position itself as a BMW or Mercedes Benz of the computer market; think of the target for those products.

<comment><USER10> Apple absolutely caters it's products toward liberals. Think different? 1984? The power of the imagination? Dancing hipsters with iPods?

<comment><USER11> Just to add to a good list -- Al Gore on the board is catering toward liberals and not conservatives!

</comment></comment></comment></comment></comment></comment><comment><USER12> Totally reasonable decision. It's one thing when you're talking just political debate and a company explicitly backing one party. But Beck has created an entirely alternate universe that feeds the insane, irrational hatred that the GOP has turned to instead of coming up with good ideas in the last year.

I hope there is a major shift in the political conversation and the Republicans actually have a platform again, but Beck is a whole different ballgame for now than someone like O'Rielly even, and I wouldn't want to associate myself with him either.

<comment><USER13> I say let Beck go on and fracture the party.

</comment></comment><comment> brown9-2 Here is a longer list of other companies that have joined the same campaign: <http://colorofchange.org/beck/more/companies.html>

Highlights:

-AT&T

-Bank of America

-Best Buy

-Citrix Online

-Johnson & Johnson

-Mercedes-Benz

-Procter & Gamble

-SC Johnson (makers of Ziploc, Off!, Pledge, and other products)

-Sprint

-Toyota-Lexus

-The UPS Store

-United States Postal Service

-Verizon Wireless

-Wal-Mart

<comment><USER14> Did they pay for this brand placement, or is it as free as posting to ycombinator.news?

</comment></comment><comment><USER15> Interesting, the article mentions that ads from smaller companies have been running in place of the boycotting corps, didn't a HNer get his Google TV ad run on Beck's show a week or so ago?

<comment><USER15> found it: _How I Ran An Ad on Fox News via Google TV Ads_

<http://news.ycombinator.com/item?id=1206394>

$1300 got them seven airings on Glen Beck reruns.

</comment></comment><comment><USER16> A friend in town from London reminded me that his show is actually shown outside the US, and said that British advertisers are quite understandably unhappy with his show. I've never seen it, but I can't imagine it appealing to an international audience.

<comment><USER17> I was once in a feel-good Arab-American lovefest summit where influential Arabs were being shown around NYC and DC at the behest of Karen Hughes and the Bush administration. I was in it for the free food.

They bused an assortment of Iraqis back to their hotel after a day of sightseeing historic places in town. And I stuck around interpreting for one of the artists ..

Long story short. The Iraqis gathered in the hotel lobby where the TV was set to Fox news and, I must say, a day's worth of diplomacy was undone with one hour of the O'Reilly Factor.

I am all for freedom of expression, but Fox News is something I rather keep in the U.S. Fox can broadcast overseas as long as they supply traveling and expat Americans with Canadian-flag backpack badges.

It's just embarrassing, eh.

<comment><USER18> I know your last comment was in jest, but as someone from the US that travels a lot, I would like to mention that I think it is really important for educated/reasonable US Citizens to engage with locals and other travelers while abroad and let people know that what they see on Fox News (et al) isn't all we have to offer!

Many of my friends and colleagues here at home are some of the most wonderful, intelligent, caring people I have met anywhere on the globe, and it does them a great injustice to let people around the world judge the US based on what they see or hear on TV.

It's the responsibility of those of us that travel to spread the good word of the reasonable US Citizen!

<comment><USER19> I couldn't agree more. I traveled to Croatia a few years ago and stayed with locals. One of the first things each of them said was some variation of "I don't like George Bush." Simply saying "I don't either" brightened them up considerably.

<comment><USER20> It's kind of sad to be so narrowly defined by politics like that.

I'm not really interested in being friends with someone who would dislike me due to someone there's a 75% chance (totals + participation) I didn't vote for. Which doesn't even begin to scrape the surface of the importance of knowing and talking to people with opposing views in the first place.

</comment></comment></comment></comment></comment><comment><USER21> Anyone else notice Carbonite is a sponsor? I'm going to move to another backup solution.

</comment><comment><USER22> The TUAW article is just repeating a small amount of the content of this Washington Post story: [http://www.washingtonpost.com/wp- dyn/content/article/2010/03...](http://www.washingtonpost.com/wp- dyn/content/article/2010/03/14/AR2010031402312.html)

</comment><comment><USER23> This is just more proof that politics makes people stupid. Boycotting the whole network does the opposite of what they want because people tend to pull together when they're being jointly attacked. So this move is more likely to make Fox stand behind Beck than it is to get them to fire him

(As has been pointed out Fox News has double the viewers of it's nearest competitor so it isn't going to be lacking for advertisers)

A better move would be to move all their advertising to other shows. Cause all the other ships to rise while Beck's sinks. Then the network won't feel under fire and will instead be asking "Maybe this Beck guy is more trouble than he's worth?"

<comment><USER24> Sure, but:

(1) I can't imagine Steve's a fan of Fox.

(2) I think Apple may get more favor with their key demographics this way than by supporting Fox. There's a pretty liberal bias in Apple's demographics, at least from my anecdotal experience.

<comment><USER23> 1.You're right but Jobs has shown that he doesn't think it's a good idea to mix politics and business: [http://gawker.com/505501/apple-crushes-iphone- developers-dre...](http://gawker.com/505501/apple-crushes-iphone-developers- dreams)

2.I would hope not. Say what you will about Fox News it's no worse than MSNBC on the other side. Unless you truly believe Scott Brown is a "Irresponsible, Homophobic, Racist, Reactionary, Nude Model, Teabagging, Supporter Of Violence Against Women and Against Politicians with whom He Disagrees". Apple's fans clearly skew liberal but I'd like to think anyone would be opposed to that kind of hypocrisy.

Edit: I don't mean to be rude but I just don't have the energy to argue with political nonsense. So all those who claim MSNBC is so much better than Fox News are just being ridiculous. One's left wing and one's right wing and the only reason a person would think one is better than the other is if they subscribed to the political agenda of that station.

Citing Joe Scarborough is no different than Fox citing Alan Colmes (no longer on the network but who would still have a job there if he wanted it). And it's just silly to say someone like Olbermann is better or worse than Hannity or O'Reilly.

<comment><USER25> Please, MSNBC is definitely biased, but... You are falsely equating the FoxNews and MSNBC. Further, FoxNews is run by Roger Ailes ... which says an awful lot -- just read his descriptions of FoxNews.

MSNBC... 1.) Morning Joe in the morning is 3 hours of conservative programming every morning.

2.) Olbermann and Matthews are over the top, but nowhere near Hannity and Beck.

3.) Maddow's an excellent interviewer and actually allows her opponents to answer questions and engage in substantive dialogue -- unlike anyone else on FoxNews or MSNBC. Maddow is progressive/liberal whatever the folks call themselves; however, she is critical of Democrats and Republicans both all the time from her ideological positions -- not just by party like Fox hosts, anchors etc.. tend to do.

<comment><USER26> Matthews isn't even a liberal. He's one of those "definitely-not-liberal-and- drawing-contrasts-all-the-time-to-prove-it-so-he-can-keep-social-climbing" people who were uniquely produced by the DC climate over the last 30 years.

<comment><USER25> Yeah, I'd agree Matthews is a poseur "hard-hat - union" Democrat, but not so much a liberal.

</comment></comment></comment></comment></comment></comment><comment><USER27> (I can't believe that we have a Glenn Beck discussion without this comment yet.)

I am not saying that Glenn Beck raped and murdered a young girl in 1990. I'm not saying that he didn't. But I'm asking why he hasn't _denied_ it.

Also see Jon Stewart's take: [http://unreasonablefaith.com/2010/03/20/jon- stewart-becomes-...](http://unreasonablefaith.com/2010/03/20/jon-stewart- becomes-glenn-beck/)

</comment><comment><USER28> I, personally, am a news junkie and I watch almost ALL of the news networks....CNN, MSNBC (when I can stomach THEIR own brand of vitriol), ABC, FOX, CBS and CSPAN. Other than CSPAN, FOX is the only network news channel that even attempts to balance its news shows with opposite points of view. I was watching Chris Matthews last night as he interviewed two people about some stupid subject.....including Matthews all three of those guys completely agreed with each other about what they were discussing and it was, of course, the leftist viewpoint. If you turn on FOX news shows they always have someone, whether it is Juan Williams or Mara Liasson of NPR fame or other liberal commentators on their Sunday Business News show to "balance out" their own conservatives. Yes, Beck is outrageous but what about that maniac Keith Olberman over at MSNBC? The problem with all this censoring of FOX or anyone else is that it is just that.....censorship.

</comment><comment><USER29> The only reason Fox News has the numbers it has is because it is the only channel that panders to the lowest common denominator of idiots. Every other major channel has some moralistic sense, so all of the smarter people on the curve get spread out amongst them.

<comment><USER30> Downvote because of your assertion that "Every other major channel has some moralistic sense".

In fact, Fox is _intensely_ moralistic. You just happen to disagree with what those morals are.

Also, you imply that holding these morals indicates that one is less intelligent than those that share _your_ morals. I'm sure this is incorrect, and it's certainly true that you haven't offered any reason to believe it.

<comment><USER31> Fox _markets to_ a certain group of intensely moralistic people.

That's a very important distinction to remember.

If the network were _actually_ moralistic, it wouldn't defend, promote and directly pay so many people who talk the talk, but have been exposed as acting in stark contrast to the network's stated morals.

(I'm not claiming other news networks are different in this regard.)

<comment><USER30> That's a fair clarification.

But I'd claim this is turtles all the way down. The politicians that they're covering exhibit the same dichotomy of actual morals versus play acting for market share.

I could go on for days with examples, but here are a few:

* Apparently Republicans themselves were the first to suggest an "individual mandate" for health insurance. Yet they're opposed to it now. See discussion here ([http://volokh.com/2010/03/29/was-the-individual-mandate-a-re...](http://volokh.com/2010/03/29/was-the-individual-mandate-a-republican-idea/) ) for example.

* Barney Frank and friends twisted the arms of mortgage lenders to get them to extend loans to people that wouldn't traditionally be considered good candidates. A few years later, he's on TV crucifying banks for doing just that.

<comment><USER31> Absolutely agreed.

All the more reason to note the distinction between words and deeds (marketing/reality). If we point out the lack of clothes, refuse to discuss talking-head spin and instead stick to reality and actions, I think we'll be better off.

We (private citizens) aren't served by allowing that marketing to be perpetuated as truth.

<comment><USER30> Philosophically this is true. But in the real world...

First, the "Myth of the Rational Voter" tells us that for any individual, deep research on politics doesn't pay off economically (their individual opinion makes little enough difference that what they lose due to a bad decision is smaller than what they'd have to invest to make the right decision). Thus, the actual democratic process is an example of the tragedy of the commons.

Second, I wonder to what degree people _really_ hold the positions that they talk about. To what degree are the people trying to fit into the norms of their community? Perhaps the people are showing a behavior that's analogous to the "marketing" chameleon behavior of politicians and the MSM.

</comment></comment></comment></comment></comment></comment><comment><USER32> I know that many Fox News Anchors use Macs on their respective shows (Fox News is on the TVs at work, do not judge me!), I wonder if Fox will react to this by pulling those computers.

</comment><comment><USER33> As big business gets even more directly involved in politics through nearly limitless donation we need to become much more aware of which companies we choose to purchase products from. Realistically I don't expect people to totally change their buying habits but if it's a simple Coke vs. Pepsi sort of choice it's easy enough to make a difference.

</comment><comment><USER34> Is there a way to analytically test if Fox News is bringing in their target demographic? Aside from Girls Gone Wild and Comedy Central, I haven't observed matches that make really good sense. The web is such a better platform in my ignorant opinion.

</comment><comment><USER35> I haven't been very happy with several of Apple's latest moves but I have to applaud them for this. It's encouraging to see that some tech companies have the guts to stand up for their values, even if it costs them real revenue.

<comment><USER36> They'll move their ad dollars from Fox to some other channel and get their sales there instead. I doubt Apple has a huge market among people who only ever watch Fox.

</comment></comment><comment><USER37> I love how they think their network's reputation is 'beginning' to change, and that it isn't already hopelessly ruined.

<comment><USER38> I wish it weren't so, but they do have a solid viewership.

</comment></comment><comment><USER39> Apple is just cultivating brand blandness. Steve Jobs aspires to be inoffensive to everyone, like Jim Davis does with Garfield the cat. If Glenn Beck had the personality equivalent of rounded corners and a shiny finish, Apple wouldn't be doing this.

</comment><comment><USER40> Man I hate when entertainers start getting political. BUZZ KILL!

</comment><comment><USER41> Glenn Beck primarily speaks out against progressivism and he believes that the United States is spending itself into oblivion. I, for one, completely agree with him.

If we are lucky, one day we will all be able to make ipods for China. :)

<comment><USER42> Please define how 'progressivism' equals 'spending into oblivion'. Does that include the 2 wars the U.S. has been waging for the last 7 years?

<comment><USER43> Let's make sure I understand.

Someone says "X is bad". Your response is "bad person Y also did X".

It's unclear how that's an argument for the goodness of X.

Note that the person who said "X is bad" may have disagreed with it when Y did it. If you find X acceptable now, it's unclear why you're criticizing Y for doing it.

And, FWIW, the Iraq/Afghanistan war has been cheaper than Obama's other adventures. And, for all the pre-election talk, Obama has followed the Bush timetable/plan wrt Iraq/Afganistan.

Bush's errors do not justify or excuse Obama's actions. However, they do constrain them.

WRT govt debt/spending, it's one thing to say "I'll start a diet tomorrow" if you're 20 pounds overweight and quite another if you're 200 pounds overweight. If you honestly think that Bush put us in a hole with spending, you can't seriously argue for digging it deeper.

</comment></comment></comment><comment><USER44> "fair & balanced" -LOL

i wonder why i'm getting downvoted...we all know that each news outlet has their own angle on the way our country is going. if you don't believe that, then you sadly have your blinders on. see things for what they are folks

<comment><USER45> You're downvoted not because you're right or wrong, but because this is not a political discussion forum. (This whole post is borderline, but at least most people have stuck to talking about the Apple/Fox News issue, not which side is destroying the country.)

<comment><AUTHOR> I had some serious doubts about putting this on HN, and I'm glad to see that my worst fears weren't realized. What swung me towards posting it was the hope that someone on here would have some insight as to why Apple is following this course; unfortunately I have not seen anything solid in that regard.

My own take is that to some extent, it's about social class. There may be FoxNews fans who are Mac fans as well, but Apple's brand is an aspirational one; and like BMWs or Volvos it ends up being associated with upper middle- class liberal values even though the product itself has no such bias.</comment></comment></comment>


TIFU by editing some comments and creating an unnecessary controversy. (u/spez) - <AUTHOR> https://www.reddit.com/r/announcements/comments/5frg1n/tifu_by_editing_some_comments_and_creating_an/ <comment><USER2> I agree that the sub-reddit shouldn't have done that and i agree that it was in bad taste. However, i feel it's a bad idea to censor reddit. You're targeting a single commnunity, what is to stop you from doing it to others? How do you decide that this needs to be censored and this doesn't, i honestly think they handled this very poorly and reading it left a bad taste in my mouth.

I'm sorry if you disagree with me but this is my opinion.

<comment><USER3> the_donald is now filtered from r/all. Quarantined. Subreddit for discussing the President elect and all things associated to him.

Does anyone know is there anything to allegation that b/c spez actions 'Reddit just lost their safe harbor protections. They are now legally liable for every post on Reddit.'[0]

[0] [https://twitter.com/infinitechan/status/801627024431271936](https://twitter.com/infinitechan/status/801627024431271936)

<comment><USER4> Before the Communications Decency Act, filtering could possibly be criteria for losing safe harbor protection, see Stratton Oakmont, Inc. v. Prodigy Services Co., but because of Section 230 of said act, which was added to enable websites to engage in moderation and filtering, reddit is fine.

<comment><USER3> So those include modifying user posts without displaying it has been modified by mod? Reddit posts has been used in court as evidence.

</comment></comment></comment></comment><comment><USER5> Censoring alternative, conservative views is exactly why Trump became president.

<comment><USER6> Ah yes because the mainstream media censored Trump so much. I didn't see any coverage of him or his views anywhere! And I certainly didn't see the bullshit he said just simply parroted and repeated in newspaper headlines without any clarification or fact checking at all.

Give me a fucking break.

<comment><USER3> 'Crazy racist' and 'homophobic' narrative certainly hurt Trump as well as him 'Raping 13 year kid' and multiple other women according to MSM.

Compare the source what he really said and what was reported[0]

[0][http://www.salon.com/2015/12/21/the_media_needs_to_stop_tell...](http://www.salon.com/2015/12/21/the_media_needs_to_stop_telling_this_lie_about_donald_trump_im_a_sanders_supporter_and_value_honesty/)</comment></comment></comment>


Ejector Seat - Remote Disk Mount for OS X - <AUTHOR> http://boxcarsoftwa.re/ejectorseat/index

<comment><AUTHOR> Works perfectly. It's not trying to do more than what it was designed for. Simple and easy to use. I think I may even be able to stop using MacFusion at this point.</comment>


Dark web finds Bitcoin increasingly more of a problem than a help - <AUTHOR> https://www.cnbc.com/2017/08/29/dark-web-finds-bitcoin-increasingly-more-of-a-problem-than-a-help-tries-other-digital-currencies.html <comment><AUTHOR> From the article:

... the Homeland Security official said. "I think [bitcoin]'s a lot more legitimate than people give it credit for."</comment>


Ask HN: How can I calculate how loud (dB) is a place/area? - <AUTHOR> Dear HN, I'm wondering if you can give me a hint how to calculate how loud is the place am living?
I live in Germany and my idea to build a tool where I can enter my address and find out the decibel number (day and night) based on the proximities to roads, airports, trains, etc, etc
Not sure if there is already any API or projects to get this in Europe (specially in Germany)
Thank you and happy holidays, <comment><USER2> Buy/borrow an SPL (sound pressure-level) meter. I would be surprised if there is any way to 'calculate' sound level.

<comment><USER3> Exactly this. They are not expensive. [1]

[1] - [https://www.amazon.com/s?k=spl+sound+meter](https://www.amazon.com/s?k=spl+sound+meter)</comment></comment>


Show HN: Keep track of your tv-series (demo/demo) - <AUTHOR> https://web.twee-app.com <comment><USER2> You need to add a couple of words, imprint, contact info before asking users to sign up. Even "Keep track of your tv-series" gives more information that the website itself.

The background image doesn't have an attribution so it might be copyrighted.

<comment><USER3> Thanks for the input, we will make sure to add something that explains the web site a bit!

</comment></comment><comment><USER4> Does it do notifications when there's a new episode out of the show you're following?</comment>