State Machines in Rust - <AUTHOR> https://blog.yoshuawuyts.com/state-machines/ <comment><USER2> For you who enjoying using state machines but wish they did even more and/or were embedded in each other (nested state machines!), check out this thing called State Charts!

Here is the initial paper from David Harel: STATECHARTS: A VISUAL FORMALISM FOR COMPLEX SYSTEMS (1987) - [https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/res...](https://www.inf.ed.ac.uk/teaching/courses/seoc/2005_2006/resources/statecharts.pdf)

Website with lots of info and resources: [https://statecharts.github.io/](https://statecharts.github.io/)

And finally a very well made JS library by David Khourshid that gives you lots of power leveraging statecharts: [https://github.com/davidkpiano](https://github.com/davidkpiano)

While we're at it, here are some links to previous submissions on HN regarding statecharts with lots of useful and interesting information/experiences:

\- [https://news.ycombinator.com/item?id=18483704](https://news.ycombinator.com/item?id=18483704)

\- [https://news.ycombinator.com/item?id=15835005](https://news.ycombinator.com/item?id=15835005)

\- [https://news.ycombinator.com/item?id=21867990](https://news.ycombinator.com/item?id=21867990)

\- [https://news.ycombinator.com/item?id=16606379](https://news.ycombinator.com/item?id=16606379)

\- [https://news.ycombinator.com/item?id=22093176](https://news.ycombinator.com/item?id=22093176)

My own interest in Statecharts comes from wanting/trying to use them for UI development on the web, think there is lots of value to be had and time to be saved by using leveraging it.

<comment><USER3> For more on statecharts, check out Ragel: [http://www.colm.net/open- source/ragel/](http://www.colm.net/open-source/ragel/)

> Ragel compiles executable finite state machines from regular languages. > Ragel targets C, C++ and ASM. Ragel state machines can not only recognize > byte sequences as regular expression machines do, but can also execute code > at arbitrary points in the recognition of a regular language. Code embedding > is done using inline operators that do not disrupt the regular language > syntax.

[http://web.archive.org/web/20170718234646/https://zedshaw.co...](http://web.archive.org/web/20170718234646/https://zedshaw.com/archive/ragel- state-charts/)

RubyConf 2015 - Stately State Machines with Ragel by Ian Duggan: [https://www.youtube.com/watch?v=Tr83XxNRg3k](https://www.youtube.com/watch?v=Tr83XxNRg3k)

<comment><USER4> Anyone have a good reference for using Ragel for non-parser tasks? I do a lot of embedded in C and am used to model FSMs for modelling processes, though I still hand-code all of them, which is tedious...

Even invented my own DSL and compiler a while back, but never really had the time to get it good enough to be useful.

<comment><USER5> Source code is closed source and at an old employer, unfortunately, but I once used Ragel to write a non-blocking MySQL client library using the regular expression features for packet parsing and, separately, a state chart for query and session state--basically, which type(s) of packet to expect next and otherwise documenting how session states transitioned.

If I had to do it again[1] I might not use Ragel for either packet parsing or session state. The MySQL wire protocol is rather simple, and Ragel has a steep learning curve, which made hacking on the library unnecessarily difficult for others. At the time I was already knee-deep in Ragel for other stuff, so it was the path of least resistance _for_ _me_. But for more complex state management I would definitely return to Ragel as the expressive syntax is worth all the documentation and commentary in the world. And because of how well Ragel supports embedded code blocks (including for non- blocking/asynchronous I/O designs), you can maintain proximity between critical code and the state chart directives, which improves both expressiveness and self-documentation. That's the real power of Ragel--it's source code-level interfaces. On the surface the interface seems a little clunky (no interoperability at code AST level), but in practice it's second to none.

[1] Of course, the second time around you already know the pain points and contours of the problem so it's much simpler to open-code an elegant, minimal solution. So it's not much of a comment on Ragel to say that I wouldn't do it again.

</comment></comment></comment></comment><comment><USER6> In my experience, state machines are very nice in theory, but in practice, over time, they devolve into a mess of spaghetti code.

Because they are not in a single scope, loops become the equivalent of a bunch of gotos and managing lifetimes and locks becomes a problem because you can't use scope based mechanisms such as RAII.

In Rust, if you want a state machine, generators are probably the long term way to go.

[https://doc.rust-lang.org/nightly/unstable-book/language- fea...](https://doc.rust-lang.org/nightly/unstable-book/language- features/generators.html)

By using generators, the compiler will generate the state machine for you based on your code, and you can use structured loops and scope based cleanup.

<comment><USER7> Resource managing is not a problem with state machines. Quite the opposite: you should acquire/free resources in well defined states of the machine (typically the different entry/exit points).

Generators are great for tasks that fit well but in the general case state machines are more powerful and easier to debug.

I agree that if your state machine starts evolving without control then it will be a mess (like any design).

</comment></comment><comment><USER8> C++20 supports enums as non-type template parameters, so I think it'd be possible to do it with enums there. Something like:

        enum class Color{Green, Yellow, Red};

        template<Color C>
        struct State{};

        auto newState() -> State<Color::Green>  {...};

        auto next(State<Color::Green>) -> State<Color::Yellow> {...}

        auto next(State<Color::Yellow>) -> State<Color::Red> {...}

        auto next(State<Color::Red>) -> State<Color::Green> {...}

        int main(){
          const auto state = newState(); // Green
          const auto state = next(state); // Yellow
          const auto state = next(state); // Red
          const auto state = next(state); // Green
          const auto state = next(state); // Yellow
        }

<comment><USER9> That example does not work, because declaring `state` multiple times creates an illegal C++ program (redeclaration of local variable - notice that this is not the case in Rust).

You need to declare variables with different names:

        const auto state0 = newState();
        const auto state1 = next(state0);
        const auto state2 = next(state1);
        const auto state3 = next(state); // TYPO -> BOOM use after move

I don't think this can be implemented safely in C++ without creating a "moved from" state that terminates the program on use, because C++ does not have Affine or Linear types.

That is, you can't use an `enum class`, since you can't implement move constructors and destructors for it, so you need to use a `variant` wrapper or similar:

        struct Color {
          struct Green {};
          struct Red {};
          struct Blue {};
          struct MovedFrom {};
          using data_t = variant<Green, Red, Blue, MovedFrom>;
          data_t data;

          Color(Color&& other) {
            data = other.data;
            other.data = MovedFrom{};
          }
          //... another dozens lines of boilerplate...
        };

and you can't probably use variant either, since using variant would introduce yet another possible state (e.g. if an exception gets thrown..).

So doing this right on C++ probably requires 100s of lines of boiler plate, it probably requires run-time state to keep track of moved-from values to enforce that states that have already been used are not used anymore, etc.

At this point you might as well just write that part of your code in Rust, where `enum Color { Gree, Red, Blue }` just works and will do what you want without any run-time state. If you need to do compile-time computations, you can either use nightly and use const generics, or you can use stable Rust and write a proc macro. Both options are easier for humans to get right than the amount C++ boilerplate that's going to be required to avoid the fact that move operations are not "destructive" / affine.

Another user below was arguing that they preferred to use C++ because there they don't need to use `{ }` to disambiguate const generics, yet they are apparently fine with using `var.template member_fn` to disambiguate all template method calls... I imagine many users will argue that writing all the boilerplate above is "fine" or "not a big deal". To me all this sounds like Stockholm syndrome: somebody must use C++, they have been using it for 10 years already, and having to write all these boilerplate and know all these detail nitpicks of trivia to write a trivial piece of code makes them feel clever and gives them job security. I'm not even going to read your comments so really don't bother replying if that's what you are going to talk about.

<comment><USER7> Nobody is using state machines to advance several times through the states with variables named "stateN", so I am not sure what is the point.

There is no "BOOM" either since "use after move" is not a safety concern for those empty types, just a logic bug, which will likely appear at compile-time since your template specialization would not match your expectations.

The redeclaration in Rust always makes me uneasy _as a default_. It would have been better to require special syntax.

The rest about C++ users looks like flamebait to me.

<comment><USER9> > Nobody is using state machines to advance several times through the states > with variables named "stateN", so I am not sure what is the point.

The point is that in C++ every time you advance the state you "split" the state machine into two - one that can be used by mistake and doing so introduces a bug, and one that is the one that should be used.

In programming languages that proper support state machines (or session types, or any similar pattern), that split is guaranteed to be impossible, so you get the guarantee that users cannot misuse your API, because attempting to do so is a guaranteed compilation error.

> There is no "BOOM" either since "use after move" is not a safety concern for > those empty types, just a logic bug, which will likely appear at compile- > time since your template specialization would not match your expectations.

This isn't true: even if `state0` and `state1` have different types, as you are proposing, your proposed `next` function accepts both types according to your design without a compilation error.

There is "no" fix for this in C++. Even if you were to introduce `next0`, `next1`, etc. that only accepts one type, the one of `state0`, `state1`, etc. that would create a compilation error here:

        auto state0 = next(initial_state);
        auto state1 = next0(state0);
        auto state2 = next0(state1); // ct-error: use next1(state1)

but the underlying error is still there, and that is that the user can write

        auto state2 = next0(state0); // use-after-move

that's a logic error that Rust catches at compile-time, but C++ would need to catch at run-time, and catching this at run-time adds overhead, since now you need to store in some run-time data-structure in which state the state machine is, to be able to verify these things (while in Rust, you don't have to track this at run-time at all).

> There is no "BOOM" either since "use after move" is not a safety concern for > those empty types, just a logic bug

Rust allows you to assume that this logic bug never happens. C++ code that assumes this can easily have undefined behavior due to the logic bug happening. That is, C++ code cannot assume that the state machine will only go from one state to the next, at least, without the whole state machine library / implementation checking at every step that these bugs do not happen, and, e.g., terminating the program if that's the case That's a valid solution, and probably the best solution that can be implemented in C++, but compared to what Rust and other languages offer, it is a very bad solution and the consequences are quite drastic (state machines, session types, etc. are widely used in Rust to design APIs, while they aren't really used in C++ because they are very boiler plate heavy, complex to implement, and incur a lot of runtime overhead to prevent these errors).

> The redeclaration in Rust always makes me uneasy as a default. It would have > been better to require special syntax.

How many years have you been a full-time Rust user ? Or how many of your C++ projects use the "state machine C++ pattern" that you are advocating here ? How many developers are involved in each of those projects ?

<comment><USER7> You claimed there is a _safety_ issue on "use after free" for empty types which are trivial. I am still waiting to see the proof.

You also keep saying there is no way to fix in C++, you can most definitely make those into compilation errors. And that is if you insist on advancing several states and calling them "stateN" is useful, which I have never done in my life.

Then the last paragraph is another flamebait plus getting into arguments of authority.

<comment><USER9> > You claimed there is a safety issue on "use after free" for empty types > which are trivial. I am still waiting to see the proof.

I claimed that it is trivial to accidentally introduce safety issues when implementing _state_ machines in C++ like you are proposing. The "state" in "state machines" comes from the machine actually having some state. Naive state machines don't store state, and simple state machines can encode all their state in types, but real world state machines rarely do so (e.g. a regex engine).

> You also keep saying there is no way to fix in C++, you can most definitely > make those into compilation errors.

Show how to do that then, e.g., for example for a simple file handle wrapper, that only allows reading a file once:

        struct FileHandle {
          static FileHandle open(const char*);
          ~FileHandle(); // closes file
          struct FileRead { ~FileRead(); /* closes file */ };
          static FileRead read(FileHandle);
        };

such that the file is not closed twice:

       auto file = FileHandle::open("foo");
       auto read = FileHandle::read(file);
       //~ read destructor closes file
       //~ file destructor double-closes file

without doing any run-time checks, e.g., in destructors, that check whether the file is closed.

This is easy peasy in Rust.

</comment></comment></comment></comment></comment></comment><comment><USER10> Advocating for programmer ergonomics is always a good thing. And I think more people should advocate and try to design languages in such a way that the way of programming more closely resembles the actual real thing [1, 2].

As you might recall in cognitive psychology there's a specific idea that translating a problem to a more recognizable problem (or simply changing the symbols) is a good thing [3]. Having less working memory is a good thing.

Reading your post, I believe those principles are behind it.

[1] [http://worrydream.com/LearnableProgramming/](http://worrydream.com/LearnableProgramming/)

[2] Sublime's feature of showing a color when you give a hex value.

[3] Chapter 12 - Cognitive Psychology (3rd edition) by Bruce Goldstein

<comment><USER11> While I love Bret's work I don't think that's scalable. If you can simulate time axis, it means it can simulate only systems that can are hundreds of times smaller than system resource. E.g. can you simulate a Kubernetes swarm with thousands of different settings?

It's a great learning tool, but not much else.

<comment><USER4> Depends on the desired level of detail, and how "simulate-able" the system is designed to be. For example if everything uses a central event queue, one can to Discrete Event Simulation by just jumping to the next event. However an exiting Kubernetes swarm is not very simulate, as with most other existing software. And until (or if) simulation becomes a priority, this will continue to be the case.

</comment></comment></comment><comment><USER12> They link to the `P` language, which I did not know about.

[https://github.com/p-org/P](https://github.com/p-org/P)

I found the link interesting because I have at times wondered what it would look likes if FSM were first class control flow features, akin to `if` and `while`.

<comment><USER13> the ping pong program is very easy to read. I don't know if it scales to bigger ones, but this one is really nice.

<comment><USER14> [https://github.com/p-org/P/wiki/PingPong- program](https://github.com/p-org/P/wiki/PingPong-program) for anyone else wondering

</comment></comment></comment><comment><USER15> Once upon a time I have implemented POP3 _server_ protocol state machine in Clojure. 180 lines in total, of which 40 were FSM declaration, 140 command handling functions. Not sure I'll ever want to approach FSM in any other language, unless no other choice.

<comment><USER16> Did you iterate to a FSM solution, from many nested conditions, or use it right from the start? I'm fighting the urge to write any FSM without having the absolute certainty that it is needed. There seems no other way than by refactoring to an FSM.

<comment><USER15> I have started from already existing FSM libs (which did not fit well) and after couple of experiments understood that creating own custom FSM processor is a no-brainer with clojure/core.match

</comment></comment></comment><comment><USER17> You can invert the box; instead of putting the state inside the struct, put the struct inside the state. So instead of having a Foo with a Yellow state, have a Yellow Foo. You can then call methods on the Yellow state to get a Foo in the next state.

To make it work better, you'd need type-level functions, or some other kind of compile-time function, which can be called when instantiating something with compile-time arguments (like generics). Anything less and you lose the static checking when try and treat your state as a first-class value. The computation of the type (state) needs to happen at compile time. Otherwise you're just back in dynamic land and you might as well put in assertions.

</comment><comment><USER18> I've really enjoyed writing state machines in Swift. The rich enums allow states to be expressed with wrapped data (associated values) and events to also be expressed as rich enums.

I've begun using the pattern to represent state in views, navigation, and obviously when modeling processes (like a firmware update or Bluetooth connection).

</comment><comment><USER19> Just to add more options, if you are willing to eat an allocation per transition, you can achieve a better developer experience by using trait objects.

You can define the trait:

        trait State: std::fmt::Debug {
            fn transition(&self) -> Option<Box<dyn State>>;
        }

Then implement the trait for each struct, and transition:

        #[derive(Debug)]
        struct FirstState {
            foo: u32,
        }

        impl State for FirstState {
            fn transition(&self) -> Option<Box<dyn State>> {
                println!("First State Hit {}", self.foo);
                Some(Box::new(SecondState {
                    bar: "Hello".to_owned(),
                })) // transition to second state
            }
        }

Can even make an Iterator:

        struct StateIterator {
            curr_state: Option<Box<dyn State>>,
        }

        impl StateIterator {
            fn new(curr_state: Option<Box<dyn State>>) -> Self {
                Self { curr_state }
            }
        }

        impl Iterator for StateIterator {
            type Item = Box<dyn State>;
            fn next(&mut self) -> Option<Self::Item> {
                let next_state = self
                    .curr_state
                    .as_ref()
                    .and_then(|state| state.transition());
                std::mem::replace(&mut self.curr_state, next_state)
            }
        }

And use it:

        fn main() {
            let first_state = Box::new(FirstState { foo: 0 });
            for state in StateIterator::new(Some(first_state)) {
                println!("{:?}", state);
            }
        }

Which outputs:

        ~ state-machine git:(master)  cargo run
        First State Hit 0
        FirstState { foo: 0 }
        Second State Hit: Hello
        SecondState { bar: "Hello" }

Playground: [https://play.rust- lang.org/?version=stable&mode=debug&editio...](https://play.rust- lang.org/?version=stable&mode=debug&edition=2018&gist=534a16753f5001ae2e3f814dc24f540e)

You can work-around allocating-per-state by making a hacky enum with an array of pointers, assuming the states themselves are immutable, which gives me an idea for a library.

</comment><comment><USER20> With generic types, you can also model infinite state machines by instantiating a generic type with anther generic type.

This way you can extend the concept of the presented finite state machine all the way to Turing machines!

See here you can do that with C#:

[https://blog.hediet.de/post/how-to-stress-the-csharp- compile...](https://blog.hediet.de/post/how-to-stress-the-csharp-compiler) (section "With C# One Can Prove that a Turing Machine Halts")

<comment><USER20> It turns out, this is much easier to apply to rust than to C#!

</comment></comment><comment><USER21> Noob question but what about state machines where a given state could transition to more than one other state depending on some outside factors? Or is that no longer considered a state machine?

For a relevant to me example, a VM state. A VM in running state could be transitioned to terminated or stopped or hibernating depending on an admins action.

<comment><USER22> that's known as an NFA (Nondeterministic Finite Automaton), a variant of FSMs.

<comment><USER4> Nondeterminism not needed (or desired I think :D) for an FSM that can turn a VM on or off based on start/stop buttons. Its just multiple possible transitions, guarded by different conditions (the buttons).

But yeah, Nondeterministic FSMs are possible. Ie based on a transition probability.

<comment><USER22> the "nondeterminism" here doesn't mean we're dealing with probabilities, it's a more discrete kind - it just means that instead of

      S1 --a--> S2

you can have

      S1 --a--> S2
        '--a--> S3
        '--a--> S4

i.e. transition to multiple states "at once"¹. then, instead of being in one state, like an FSM, your NFA is in a set of states, like it had multiple threads, and proceeds "in parallel" from each state. probably not the best explanation, but i'm sure you can find good material about this.

\---

¹ this a way to represent nondeterminism in a pure/math-y setting: instead of

      def f():
        b = random_bool()
        if b:
          res = "yes"
        else:
          res = "no"
        return res

you do

      def random_bool2():
        return {True, False}

      def f2():
        res = set()
        for b in random_bool2():
          if b:
            res.add("yes")
          else:
            res.add("no")
        return res

or just:

      def f2():
        return {"yes", "no"}

i.e enumerate all the possible results f() could give depending on what `random_bool()` returns.

</comment></comment></comment></comment><comment><USER23> I disagree with the implementation, State should be a trait with NextState as an associated type. This makes things cumbersome when it can be a set of types, but it makes excellent use of the type system and ownership patterns of Rust. Edit: and the type state pattern [http://cliffle.com/blog/rust- typestate/](http://cliffle.com/blog/rust-typestate/)

As an aside, if you want to dive in with FSMs and automata theory (as well as some basic language topics) go read Sipser's book, "Introduction to the Theory of Computation." You'll go from logic to state machines to understanding why Turing Machines are so dope in a few dozen pages. The math isn't bad.

<comment><USER24> the article includes a section on the state as a generic type parameter, though?

in general, state as a type parameter is useful when there's some data that you want for every state (say, unique id, time of event), so those can be normal fields on the State struct, and then each event type can hold event- specific data. You can tie it together with From<T> and TryFrom<T> implementations that enable the specific transitions you want to allow.

<comment><USER23> Associated types are slightly different than generic types.

        trait State {
            type NextState;
            fn transition(self) -> Self::NextState;
         }

In this example one consumes the current state to yield the next state (one could use From/TryFrom, but I don't think that makes sense semantically, imo).

The advantage of this approach is that if you design your State types such that they can only be constructed by transitioning from a previous state, you cannot write code where your program is accidentally in an invalid state. You also never need to match against an enum.

<comment><USER24> I've had good luck in the past using From<T> and TryFrom<T> to go from State<A> -> State<B>. It's similar to what you propose insofar as there are only some transitions defined, just relying on the built-in traits instead of using your own. Since State::from(prev) is so much more ergonomic than the other ways you could manually construct an illegal transition, it's not much of a problem to prevent that in practice. But I would never use this approach without being able to generate code with macros, otherwise it'd be a pain.

you mention "never have to match against an enum" \- I think that's the biggest thing I learned from my experiences, is that generics or traits + associated types are much nicer to use than enums for the same purposes. With an enum, you have to match to pull any data out. It becomes annoying quickly.

</comment></comment></comment></comment><comment><USER25> Fulcro is the only web framework I'm aware of that uses them throughout

\- [https://github.com/fulcrologic/fulcro](https://github.com/fulcrologic/fulcro)

\- [https://github.com/fulcro-legacy/fulcro- incubator/blob/devel...](https://github.com/fulcro-legacy/fulcro- incubator/blob/develop/state-machine-docs.adoc)

I keep meaning to learn them in the context of a larger web app

</comment><comment><USER26> Coroutines are another interesting way of expressing state machines. They can make certain classes of state machines easier to read because the flow reads like a normal function. So far I've only used the technique once in Python using generators. There were some ergonomic aspects that were less than ideal but serve as one example of why I look forward to generators being added to Rust.

<comment><USER27> Async/await in Rust compiles down to a state machine (and to my understanding, uses generators under the hood):

[https://rust-lang.github.io/async- book/01_getting_started/04...](https://rust-lang.github.io/async- book/01_getting_started/04_async_await_primer.html)

<comment><USER28> Generators are currently unstable, but the crate genawaiter[1] allows you to use them on stable.

We have used that crate at work to replace a very scary and verbose state machine (which was generating a lot more code via procedural macros) with a much more succinct version.

[1]: [https://docs.rs/genawaiter/0.2.2/genawaiter/](https://docs.rs/genawaiter/0.2.2/genawaiter/)

</comment></comment></comment><comment><USER29> _However one big limitation of this is that this pattern cannot store the state inside another struct; it can only exist on the stack this way. So we cannot do the following:_

      struct Foo<S> {
          state: State<S>,
      }

_The moment we initialize Foo to take e.g. Green as its parameter, it can now no longer switch to Red in safe Rust. This is what enums are for, and unfortunately we can 't use those here._

Couldn't you just declare a trait that S must implement and then declare the member in Foo as State<dyn Trait>? That trait would probably also include the next() method mentioned in the example. Of course you'd be adding dynamic dispatch here, but it should work, right?

<comment><USER30> The cited post[1] recommends an enum for this job, which avoids the dynamic dispatch and makes it easier to get at a specific state's data when you have the whole machine.

[1] [https://hoverbear.org/blog/rust-state-machine- pattern/](https://hoverbear.org/blog/rust-state-machine-pattern/)

<comment><USER31> I am not a fan of the hoverbear state machine pattern. I find that it makes simple things complicated and hard things impossible. I used it and I had problems with:

      - Reusing code between states.
      - Making callbacks to other APIs during state changes.

I ended up using the standard state pattern described here: [https://doc.rust- lang.org/book/ch17-03-oo-design-patterns.ht...](https://doc.rust- lang.org/book/ch17-03-oo-design-patterns.html)

The state pattern is not considered to be idiomatic Rust, but in my experience it works better and is very flexible.

The state pattern has the downside that the type system does not enforce which state changes are allowed.

<comment><USER24> for reusing code between states, did you try impl blocks that are generic over the state type parameter?

for

        struct State<T> { state: T }

with possible states

        struct A { id: Uuid }
        struct B { id: Uuid }

use a trait

        trait HasId {
            fn id_mut(&mut self) -> &mut Uuid;
        }

now you can impl over both A and B

        impl<T: HasId> for State<T> {
            fn new_id(&mut self) { *self.state.id_mut() = Uuid::new_v4() }
        }

simplistic example but enough to communicate the idea hopefully.

generally, macros makes this kind of thing ergonomic so you can generate the trait implementations and so on. otherwise it's a lot of typing.

don't understand what you mean about making callbacks to other APIs during transitions.

<comment><USER31> I did not try that -- its a cool technique. Thanks for taking the time to share it.

</comment></comment></comment></comment></comment><comment><USER32> Wouldn't state machines in a logic programming language or even just a constraint programming DSL be better than doing everything manually?

</comment><comment><USER33> Slightly OT, but:

> In Germany traffic lights go green -> yellow -> red -> yellow -> green, but > let's pretend they're only green -> yellow -> red -> green.

is not correct if I'm not missing something major. Is there any situation where they turn yellow before turning green?

<comment><USER34> They probably mean "red-yellow", which is an intermediate "wait for it" state in many European countries, including Germany [https://de.wikipedia.org/wiki/Ampel#/media/Datei:Traffic_lig...](https://de.wikipedia.org/wiki/Ampel#/media/Datei:Traffic_lights_4_states.svg)

<comment><USER33> I think I've never noticed that red-yellow in 40+ years of living in Germany. Interesting. Maybe it's a good thing I never get to drive a car these days.

</comment></comment></comment><comment><USER35> Couldn't you implement this by consuming `self` on `next()`?

</comment><comment><USER36> It looks like this is really asking for DataKinds or something similar. Since it's required to lift the enum variant to the type level.

</comment><comment><USER37> Just have to say what a pretty blog :) More of this please, internet.

</comment><comment><USER38> I'd have implement a state machine as an enum....

</comment><comment><USER39> Who is Yoshua Wuyts?

<comment><USER16> For starters, he's a significant contributor to the Rust community and ecosystem. As you can see, he shares knowledge and experiences, which is a rarety among the more experienced crowd. He actually wants to help others beyond "codeblazing".</comment></comment>


Sex myths without substance: Mislabelling Japan - <AUTHOR> http://www.independent.co.uk/voices/comment/sex-myths-without-substance-mislabelling-japan-8911325.html "These stories gain traction because they support a simplistic view of East Asia which is at best patronising and at worst overtly racist [...] The collective obsession with portraying Japan as a nation of tech-obsessed sexual deviants dehumanises its citizens and echoes orientalist attitudes that should be long since dead and buried." <comment><USER2> Glad to see this article.

I found that Guardian article very disturbing and anecdotal. The Vice followup was worse (at one point characterizing Japanese culture as "South East Asian").

<comment><AUTHOR> I thought the Guardian article was ok-ish - it was hitting the point, yet interspersed with anecdotes and definitely clickbait titled.

The worst was BBC's documentary (which I would expect to be of high quality and standards) that was painting Japanese men as all being part of this in fact very tiny niche of a niche of virtual-girlfriend-dating otaku from AKB.

As a westerner living in Asia, I must admit that some have quirky habits to my standards (but then again, which nationality hasn't in the eyes of foreigners), but the way they are portrayed in media is sensation seeking, mostly plain wrong, and a caricature akin to "the infantile Africans in Tintin in the Congo".</comment></comment>


China says India's ban on Chinese apps may violate WTO rules - abc-xyz https://www.sharenet.co.za/views/views-article.php?views-article=447681 <comment><AUTHOR> When I was in China at airport you could see that Youtube, Facebook, WhatsUp, Viber, and even Google are forbidden. I am curious to know what China says about that?

<comment><USER2> The ban is political and China's response is political.

But what they are getting at, perhaps not unreasonably, is that it looks like all these apps were banned because they are by Chinese companies, which may be discriminatory under WTO rules.

This is not what China does. China, like other countries, blocks specific websites and apps because of their contents or functionality, not because of their origin (at least if they do they tend to be smart enough to be subtle about it...)

I don't think WTO rules say anything about what websites or apps a country should allow but rather the rules are about preventing discrimination between trading partners. So my understanding is that a country is essentially free to ban an app because they don't like what they app does but they are not free to ban an app because they don't like the country it comes from.</comment></comment>


Modeling form state in React - <AUTHOR> http://beautifulcode.1stdibs.com/2017/03/23/react-form-state/ <comment><USER2> Very informative article! Progressively adding to the form made it easy to follow.</comment>


The Smart Phone Patent Wars - <AUTHOR> http://blogs.burnsidedigital.com/2012/09/the-smart-phone-patent-wars/

<comment><AUTHOR> The FRAND licensing issues have been in court for sometime. [http://www.cio.com.au/article/431373/samsung_apple_refused_n...](http://www.cio.com.au/article/431373/samsung_apple_refused_negotiate_license_3g_patents/#closeme)

[http://www.fosspatents.com/2012/09/korean-regulator- investig...](http://www.fosspatents.com/2012/09/korean-regulator-investigates- apples.html)

</comment><comment><USER2> Standard based patents (as in LTE) are subject to compulsory licensing under FRAND terms. Not all the patents listed are that obvious or easy. For example take the case of concealed antenna; it took several years of research and millions of dollars to develop the technology.

<comment><USER3> What counts as a standard? Why isn't "swipe to unlock" considered a smart phone standard? What's the difference?

<comment><USER2> Standards are set by international bodies (like ETSI) using a specified process which these companies are participants of. As part of the procedure, companies legally authorize the use of their essential patents to be part of a standard. Once this happens, the standard implementors have to pay a specified royalty (usually on a per device basis) from which individual compaies owning the patents get their share based on contribution.

<comment><USER4> Yes the standards bodies require FRAND licensing conditions. And if the companies did not follow strict procedures (including but not limited to FRAND licensing) to ensure fairness to companies outside the group they would very much be at risk being an illegal anti-competitive group of companies. In the EU at least the punishment for competition law breaches can be up to 10% of global group turnover.

However for the same competition law reasons the standards body cannot fix the price of the patent licenses but must leave it to the individual companies to determine what is FRAND. In some cases a 3rd party licensing agency (e.g. MPEG LA) offers to manage the licensing for many companies and operates in the way you describe but even members of the standards group do not have to join which is OK so long as the prices they charge are FRAND.

</comment></comment></comment></comment><comment><USER4> Article misses the fact that the standards essential ones should be committed to FRAND licensing so while they need to be paid for it shouldn't be possible to deny access to them.</comment>


Dataset of classified screenshots from Tor hidden services - <AUTHOR> https://www.circl.lu/opendata/circl-ail-dataset-01/ <comment><USER2> I was reviewing the graph and was surprised at the rankings of things. Frankly, there's a lot more "not illegal" things going on in Tor than I would have expected. I expected there was a reasonable amount, but not representing so much of the total[0].

It's a double-edged sword in a way -- more people using the project for doing non-illegal things means perhaps the moniker "Dark" could be replaced with a less hostile word (Private? ...no...)[1].

Bad, in that, it speaks a bit to users making inconvenient choices because they perceive their privacy is threatened enough to warrant it.

I was glad to see that they scrubbed the content -- would have been one scary tarball to download, otherwise, and very illegal for them to post considering some of those categories. It makes me wonder how they avoided running afoul of the law just collecting/viewing it for the purpose of scrubbing it, but IANAL. It'd keep me from being involved on any project like that, though!

[0] I'm eye-balling the counts for a few categories in addition to the obvious "other-not-illegal", so it's probably not 100%, and I'm assuming US law (specifically WRT speech)

[1] I get "Dark" is meant as "invisible" and it's perhaps even a more accurate description since it's not completely "invisible" unless you take additional steps (and the software contains no known flaws), but sufficiently invisible for most adversaries. However, it's spoken in the same breath as "drug/theft markets" and is used more like "dark alley". Not sure there's a better term and I'm probably bike-shedding, anyway.

<comment><USER3> I couldn't agree more. I run a number of hidden services on Tor. That's because for every website I create it's a simple thing to make it a tor hidden service too. My ham radio and science hobby websites are in no way, "dark". I link to them (and vice versa) from my clearweb sites and host from my home connection/IP.

Plus on Tor you actually _own_ your domain rather than lease it on the whim of some company easily pressured by political and social winds.

<comment><USER4> How do you own it ?

<comment><USER5> Your domain is a predictable derivative of your hidden node's key, which is randomly generated. It's cryptographically impossible for the same domain to be created more than once.

<comment><USER6> Not impossible, just unlikely. Collisions can exist in theory in any hashing algorithm (though it may be a 2^2048 large address space or something)

<comment><USER7> Which is what "cryptographically impossible" means. Even with all the computation on the planet for a million years you can't get a glimmer of a chance.

</comment></comment></comment></comment></comment></comment><comment><USER8> Selling stuff on darknet markets must be lucrative just because 1 or 2 researchers has to always buy it.

<comment><USER9> Feel free to check which amount of money the bitcoins addresses you can find online have received .. And you'll figure out :)

</comment></comment><comment><USER10> I'm surprised to see finance pop-up so high in the list... What's going on?

<comment><USER11> Crypto currency pump and dump schemes for the most part.

<comment><USER12> Without forgetting Mixers, Credit-Card sellers, Paypal-related schemes, CryptoWallets, Escrows ...

</comment></comment></comment><comment><USER13> > 43 dark-web:motivation="religious"

That's interesting.

Unless it's some cult requiring the sacrafice of humans, I guess maybe it's for a religous group in an oppressive country.

<comment><USER14> Religion seems like a topic where there are a lot of sincere beliefs and questions, but also a lot of social signalling and pressure within a community to adhere to specific beliefs.

Suppose you are a member of a congregation who questions a specific doctrine but you don't want to commit to opposing it or signalling that you are unreliable? Suppose you are a member of the clergy questioning your faith, and not satisfied with the discussions you have had with people of higher rank within your religious order.

I think there is significant value in anonymous forums. For example the arguments during the drafting of the US Constitution probably would have been far less productive if they hadn't been preceded by anonymous and pseudo- anonymous discussions in the form of the Federalist Papers where proposals didn't carry the benefit of signalling allegiance to interest groups, or the disadvantage of signalling the opposite.

A great example today is the difference between the content on Quora compared to the content found on Hacker News. Just like a cover letter to a resume, a post on Quora may be truthful or interesting, but it is also inextricably linked to the poster's name and always suspect of being primarily interested in the effect it has on the poster's standing in the real world. Here, there are varying degrees of anonymity, and posts are more likely to be motivated by a sincere interest in exploring a topic or advocating an opinion, rather than what making such a statement says about the individual saying it.

<comment><USER15> > _Suppose you are a member of a congregation who questions a specific > doctrine but you don 't want to commit to opposing it or signalling that you > are unreliable?_

For a real and current example, see the recent EFF vs. Watchtower case where a Reddit user /u/darkspilver posted to an ex-Jehovah's Witness subreddit. Watchtower subpoenaed Reddit for the user's IP address so they could excommunicate the user. If they'd communicated over Tor, this would be less of a problem.

</comment></comment></comment><comment><USER16> Be very careful about such projects on Tor. There are plenty of images within Tor, the possession of which, can land you in prison and destroy your life. I would hesitate from clicking any link to such a project without first some examination of how they dealt with that issue.

<comment><USER9> True. But this dataset is "safe". I could ensure you to download it and show it in front of any public, without that much concern about shocking anyone (maybe one or two pictures may not be friendly for everyone, but nothing as bad as you could encounter on the "true Tor"). That's precisely one use of this dataset : showing what is on Tor without have a 200 heart beat because you don't know on which page you'll land next.

</comment></comment><comment><USER17> It took me a minute to realize that "classified" in the headline means labeled, not secret.

<comment><AUTHOR> Sorry, I wanted to change it after I push the submit button... it was too late.

<comment><USER18> Maybe @dang can help, here? :)

<comment><USER19> I disagree that there is something that needs to be changed here. "Dataset of classified X" is commonly used to refer to this exact thing. (i.e. dataset of data points with human-made labels)

<comment><USER20> But the word has multiple meanings and both interpretations are equally plausible. Personally I also thought the title was about secrets. Changing from classified to labeled will remove ambiguity completely.

<comment><USER21> It's the ordering here:

"... classified screenshots ..." would be usually be understood in en-gb to be "screenshots given a security rating requiring restricted access".

"... screenshots classified ..." would be "screenshots given a classification of some sort".

<comment><USER22> I disagree - the former would be used in both cases in my opinion. I think it just depends which usage you use more.

<comment><USER21> It is used in both situations when context makes it clear, there's no [or very little, at least] context in a title. Ordering disambiguates the intended meaning when context is insufficient.</comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Anyone connected via HN and ended up working together? - <AUTHOR> Love to hear accounts of people who connected here and ended up building products together. <comment><USER2> I worked with several HN'er on Reocities and ww.com. Abi Noda and Charles Pick (phpnode).

Both highly recommended, a pleasure to work with, fast and good quality. I've also worked with plenty of other HN'ers on non web and 'real life' stuff.

</comment><comment><USER3> Not products, but I ended up consulting several (4 at current count) companies that found me on HN. Including my largest client ever, a certain multinational telecom company.

</comment><comment><USER4> I think dropbox founders.</comment>


Is Crowdsourcing Evil? The Design Community Weighs In - <AUTHOR> http://blog.wired.com/business/2009/03/is-crowdsourcin.html <comment><USER2> I've spent significantly over the last 18 months on print design, web design for our applications, and small web projects (we launched our product a few weeks back). I also run an office for a thriving high-end services business. Some thoughts:

First, designers seem to like to point out that you wouldn't hire an accountant just because he had QuickBooks, or an engineer because he had a CAD program. Therefore, why would you hire an amateur designer just because they had Illustrator? I can answer that question! Because if you hire bad accountant you get audited. If you hire a bad engineer you get sued. If you hire a bad design firm, most of your most important clients will not be able to tell their work apart from Wolff Olins.

Second, designers like to point out how graphic design is so much more than illustration, involving as it does detailed market surveys and studies of what will work for your business. I have two responses to that. Response one: I have never been wowed by a designer's ability to calibrate their work to any of my businesses, and I've worked with plenty of designers who didn't need to bill me $5000 to find out what style would fit us. Response two: if I pay $5000 to have you do a detailed, careful study, I shouldn't have to pay it again on every subsequent project that isn't rebranding my company.

I think one of the real issues here is that there are two "kinds" of graphic design projects: full-service and a la carte. A la carte work is cheap. Full- service work is very expensive. Companies that don't have $50MM marketing budgets probably get 95% of the value of graphic design out of an a la carte project. Most of us just need a design that doesn't mix PMN Caecilia with Futura. But a lot of not-amazing full-service consultancies will go out of business if they're stuck charging at the 80%-solution rate.

Which brings me to my next point. Which is mercifully short. It is that the best designers will charge whatever they want, and structure their work however they want, regardless of how well 99designs does. Happy Cog and Blue Flavor are still going to have wait lists, because they are proven producers.

It's the same thing with our business, and, I imagine, with _every other services business in the world_. There is always low-end competition. In our industry, it's Payment Card certification for websites that accept credit cards. We all have misgivings about those low-end services, just like our corporate accountant is probably not enamored of H&R Block. But only in the graphic design industry is there a moral/ethical issue over the existence of low-end competition.

Actually, that's not true. There's another industry that has profound concerns about low-end competiton. It's the interior design industry. Did you know that in many states, you need to pass a licensing exam to pick a set of throw pillows?

I have one last point to make. Designers like to crack jokes about what'd happen if other industries were forced to do contests and auditions to get work. I don't understand why they think these jokes work. Because in my industry, we're routinely called on to do detailed discovery, advisory, and consultatative work prior to starting large engagements. It can take weeks of otherwise billable times. Often, that work comes to nothing, or even directly assists our competitors. We call this "part of the sales cycle", and part of running a business that has to work in good faith in the market with other companies. In the long run, the "spec work" we've done has always paid off. I don't think we're outside the norm on this; for instance, high-end law firms have given us hours of free consult help without expecting a dime from us.

There is clearly a form of "spec work" that everyone agrees is immoral: sponsoring a design contest, collecting the submissions, and using them to complete the project in-house without paying anyone. Nobody's talking about that here. I will probably not source work from 99designs. But I can't imagine why anyone would have a problem with someone who did.

</comment><comment><USER3> _"Spec work has become a major force in devaluing the perception of graphic design in the business world," writes eyeCinq._

It's a well-deserved devaluing.

Is crowdsourcing evil? Not in the least.

If one thinks about the actual costs necessary to be a successful graphic designer, it's marginally close to zero. Aside from a laptop, and a wifi- connection (necessary to hook up to these contests), there's not much else needed for a person with even an iota of design skill. As such, it's not surprising that the market is forcing the prices downward, closer a natural equilibrium for a competitive market.

"Graphic Design Firms" that have prime office space, secretaries, luncheons, hobnobbing events . . . these things all add unnecessarily to the "cost" of supposed "professional" graphic design services. Firms and their employees my _think_ that this is why their services are more "valuable" than a freelancer, or somebody who works on spec, but they're wrong. These things add zero value to the end product.

How much is a graphic design worth? Exactly as much as somebody is willing to pay for it.

I think there will be more upheaval in the coming years regarding industries where this type of work can actually lower costs for buyers.

Side note: I have an idea for a startup that crowdsources advertising (tv type ads OR print advertising); I think the agency model that most big companies or "stations" currently use is grossly overpriced. There's room for a new type of market entrant: one by and for the people. I actually almost started this idea a couple of years ago (spoofwink.com), but lacked the resources and was busy with other projects. If anybody wants to go with this idea, please let me in!

<comment><USER4> I'd like to go with your crowdsourced advertising idea, but I'd like to crowdsource the implementation to see who can build the best prototype.

I'll fund the winner.

<comment><USER5> Every business is in a competition. Just not an artificial one. He would be directly competing with the old school advertising agencies, as well as a half dozen other crowd sourced advertising firms. Your point would fit better if he were offering high end software development consulting because it would be the software development equivalent of the high end ad agencies he spoke of.

Of course, if you were to take this idea over to rent-a-coder or eLance, you can have it your way and have the developers fight it out to reach the lowest price. (They won't develop everything on spec, but I imagine some of the newer providers might do a small mockup for you).

The difference here is that each individual logo "concept" only takes a few minutes to mock up. If the client likes it, then you spend some more time polishing it and refining it to their tastes. The problem with all of the arguments against crowd sourcing design work is that it denies the reality of the market.

Most buyers of design work have no network that can inform them of who a great designer is. Most buyers have no way of determining when they've met a great designer, short of studying their portfolio, and taste plays a huge role, as does luck (great designers may not always have great ideas for a particular logo). Most buyers don't know what a fair price for a particular project is, but they can see what the going rates are at crowd source sites. Finally, the response of every anti-crowd sourcing proponent I've seen has been, "Find a designer you can work with, who will take time to understand your needs, etc." But that simply doesn't address the needs of most design buyers. Crowd sourcing solves all of these problems, and more, for most buyers. Just because a certain (possibly large) percentage of sellers don't like it doesn't mean it isn't good, as far as the market is concerned.

</comment></comment></comment><comment><USER6> I find this whole 99designs thing fantastically interesting. The marginal cost of going from the "good" work you get there to "great" work from seriously skilled, experienced designers is disproportionately high.

</comment><comment><USER7> Imo, crowd-sourcing graphics is horrible. In addition to development, I do web design and branding and it take more than just a computer and illustrator.

Because its graphics, developers dont mind it, because oftentimes they are on the benefiting end. But this would change if it was for app development. No developer (or graphic designer) with any regard for the future of their profession should be for it.

<comment><USER8> We (developers) already deal with competition from cheap outsourced labor and it didn't destroy our industry.

<comment><USER3> The great thing about crowdsourcing is that it really reveals who can deal with volume and who can't. Similarly, it also reveals a very interesting element of _time_ . . . buyers of logo projects can literally watch the rate of submissions over their contests. They can also see, for example, if somebody submits a fantastic design after 5 hours that it doesn't really take the weeks and months that some graphic designers say it does (and what they charge). It's so funny how some graphic designers really roll around in their "creative angst" and pretend like their work is really so hard and time- consuming and that they should be paid for it when in reality, it sometimes just really isn't.

</comment></comment></comment><comment><USER3> One more thought. I just spotted the logo for YC's Foodoro. It might be some good advice for startups to invest in some of these logo design contests as part of building their brand. I imagine the small investment in a crowdsourced contest could potentially give back a pretty high ROI, esp. when products are in alpha and the logo is the most memorable thing from an initial visit to a site.

</comment><comment><USER9> Pricing going down typically = bad for one industry, good for entire rest of world.

However, the rest of the world isn't so invested as to loudly argue against it. I've always payed graphic design people well and been an easy customer. Find a guy I like, give him a set of adjectives describing the look and feel I want, and let him loose. Pay on time or early. You get good relationships and people will work for you on the drop of a hat if you're easy. And good graphic design people are worth it.

But that "finding a guy I like" is the trickiest part - this spec design work sounds great. Good designers ought to get lots of recurring work from it, and great designers won't need to since their schedule will be full.</comment>


The dubious UBI and the delusion that unpaid women's work is about oppression - <AUTHOR> http://micheleincalifornia.blogspot.com/2016/01/the-dubious-ubi-and-delusion-that.html <comment><USER2> In many households the mother manages the father's wage down to the last penny. Father has little to no saying on what it is spent on. It may not be the rule but it is relevant enough not to ignore it. I would even dare to say it is more common than working mother / stay at home father combination, but I have no data to back it up.</comment>


Maximum Wage – Is technological progress dependent on extreme inequality? - <AUTHOR> https://howwegettonext.com/maximum-wage-3e21048fc107 <comment><USER2> I used to think that people deserved what they earned. Then I worked for Steve Jobs and I realized that no human being can really earn the incredible sums of money that they are receiving. I remember the day that a big semi-truck mistakenly drove up to the company front desk. It was completely filled with perhaps a thousand custom shirts for Steve. Why would Steve need that many shirts? Well, during one meeting I had with Steve he looked at the time and said he had another meeting. Then he closed the blinds, took off his shirt and threw it in the trash, took off his pants and threw them in the trash, and went to the closets in his office and pulled out new clothes. Steve would often change clothes more than once per day (and these were custom clothes.) When Steve wore clothes that were "used" and "washed" it was safe to predict that the press was around since Steve was in his "costume" as a real human being.

I could go on with many other stories. Basically, Steve treated millions like you or I would treat pennies. In a world with so many people who are suffering, that is immoral.</comment>


TorrentFreak Gets Its First YouTube Copyright Claim, and It's Bull - <AUTHOR> https://torrentfreak.com/torrentfreak-gets-its-first-youtube-copyright-claim-and-its-bull-160910/ <comment><USER2> Dan Bull should find a new network if he disagrees with their policy.</comment>


Google's self-driving car has been involved in its worst crash yet - <AUTHOR> http://thenextweb.com/google/2016/09/26/googles-self-driving-car-involved-worst-crash-yet/ <comment><USER2> TLDR: A van ran a red light and hit a Google car. Nothing really to see here.

<comment><USER3> Actually the important part is buried: the human saw the van and tried to brake, but was too slow.

We can certainly imagine that future AVs will look further "ahead" sideways for this kind of thing and be less prone to the accident.

<comment><USER4> It was hit in the side, toward the rear. Possibly if the driver had _not hit the brakes_ the accident would have been avoided?

<comment><USER5> agree, its possible if the google car had sped up it could have cleared the intersection.

</comment></comment></comment></comment><comment><USER6> No official accident report yet, it seems:

[https://www.dmv.ca.gov/portal/dmv/detail/vr/autonomous/auton...](https://www.dmv.ca.gov/portal/dmv/detail/vr/autonomous/autonomousveh_ol316)

From the article:

> The car was operating in its autonomous mode at the time of the crash, but > that didn't stop the human driver from slamming on the breaks when he > spotted the oncoming van. Unfortunately, his reaction was a little too slow.

Is this just speculation, or is it confirmed that the car did not act optimally by itself once the van could be seen running the red light?

<comment><USER7> Or is it possible that the car would have accelerated to avoid the van if the driver had not intervened?

</comment></comment><comment><USER8> Is this _that_ "El Camino Real" that is the subject of an old CS geek joke, involving "El Camino Bignum"?

[edit]

It's in the Jagon File:

[http://www.catb.org/jargon/html/E/El-Camino- Bignum.html](http://www.catb.org/jargon/html/E/El-Camino-Bignum.html)

"When a hacker from MIT visited Stanford in 1976, he remarked what a long road El Camino Real was. Making a pun on 'real', he started calling it 'El Camino Double Precision' — but when the hacker was told that the road was hundreds of miles long, he renamed it 'El Camino Bignum', and that name has stuck."

That hacker was ESR himself.</comment>


Adobe vs. Apple is going to get uglier: lawsuit rumors - <AUTHOR> http://www.itworld.com/legal/104320/adobe-vs-apple-going-get-uglier <comment><USER2> I'd be just as happy as the next man to see this go to court, but that's a pretty weak announcement. Completely anonymous sources, and almost no commentary on what they actually said about a lawsuit.

<comment><USER3> Yeah, the article was completely pointless. Question some friends and I were discussing today: if this issue were to go to court, what grounds would Adobe have?

<comment><USER4> 331 is an anti-competitive policy. They are using their position in one market to affect another.

Then again, they aren't a monopoly so...

</comment></comment></comment><comment><USER5> You honestly can't blame Adobe for wanting to bring suit. After all, if they win, they might get Flash on the iPhone; if they lose, they end up essentially no worse off than they are now. I'd like to see how this plays out just for curiosity's sake, myself.</comment>


Sign up for Myspace Developer Access - <AUTHOR> http://developer.myspace.com/Modules/APPs/Pages/splash.aspx

<comment><USER2> You have to have a MySpace account before signing up.

This has caused me to break a promise to myself that I would prefer to be dragged apart by wild horses before having a dreaded MySpace account.

There is just too much money & exposure to loose by not signing up, I now have a MySpace account.

</comment><comment><AUTHOR> 50 million people can't be wrong... Can they?

<comment><USER3> Yeah, they can. :)</comment></comment>


ICE arrests 90 more students at fake university in Michigan - <AUTHOR> https://www.freep.com/story/news/local/michigan/2019/11/27/ice-arrested-250-foreign-students-fake-university-metro-detroit/4277686002/ <comment><USER2> So the US homeland of Security set up a fake university, put it in the official accreditation website, and then arrest international students when they apply and join? WTH?

<comment><USER3> Yeah i think i'm reading that wrong, but it seems like the students are attempting to study in the country and applying to University through legal means, then getting deported as it's a fake university.

I'm clearly missing something here.

<comment><USER4> The "students" were enrolling in a university that had "had no teachers, classes, or educational services" as a means to game the F-1 visa program. Their goal was to falsely claim they were enrolled in education in order to avoid deportation.

<comment><USER5> The article should probably have lead with that. ;)

This bit though, seems kind of sick:

> ... in some cases, students who transferred out from the University of > Farmington after realizing they didn't have classes on-site, were still > arrested.

Sounds like they went after students who realised it was fake then transferred to a real Uni too. That's not good.

<comment><USER6> Presumably because by deporting them it becomes harder for the victims to get back the money they were defrauded out of.

</comment></comment></comment></comment></comment><comment><USER7> Isn't this entrapment? [0]

If so, any self-respecting judge should have allowed the students to stay or at least refund their money back plus some more...

[0] [https://www.nolo.com/legal-encyclopedia/entrapment- basics-33...](https://www.nolo.com/legal-encyclopedia/entrapment- basics-33987.html)

</comment><comment><USER8> There's more information on the background of the university on Wikipedia[0], and also archived copies of their website and admissions policy on the Internet Archive[1].

[0] - [https://en.wikipedia.org/wiki/University_of_Farmington](https://en.wikipedia.org/wiki/University_of_Farmington)

[1] - [https://web.archive.org/web/20170302161735/http://university...](https://web.archive.org/web/20170302161735/http://universityoffarmington.edu/admissions.html)

</comment><comment><USER9> > the University of Farmington was later revealed to be a creation of federal > agents

> which cost about $12,000 on average in tuition and fees per year.

> The fake university is believed to have collected millions of dollars from > the unsuspecting students.

Between that and half of the current US gov being corrupt to an unprecedented level I wonder were all the "A well regulated militia is necessary to the security of a free State" guys are. This is 1970s eastern europe level of power abuse.

<comment><USER10> The "well regulate militia" loves and supports Trump.

</comment></comment><comment><USER11> Lots of info in this interview: [https://www.wnycstudios.org/podcasts/takeaway/segments/why-d...](https://www.wnycstudios.org/podcasts/takeaway/segments/why- department-homeland-security-business-setting-fake-universities)

Because a very small % of folks are prone to fraudulent behavior, this is actually a effective way to root it out.

</comment><comment><USER12> Our tax dollars at work... It sickens me that the Federal Government is allowed to waste money on this type of things while there are people dying from a lack of access to insulin here in the the USA becasuse of the cost. Why not simply let people come and work here if they so choice and use the taxes we collect to support our failing education and social services system. #AbolishICE

<comment><USER13> Border security is not casual racism. Nobody takes seriously a notion to stop having borders in a nation literally defined by them. While many actions of the current system are reprehensible, the response is reform, or even a clean- sheet design. But loss of sovergnity is not on the table.

<comment><USER14> Thank you, and well said. It bothers me when I get called a racist and a xenophobe for saying that border security is necessary, but the current admin has taken it too far. It's not black and white! We can't let _everyone_ in. That just doesn't work - some security is necessary. Turning people away for vague reasons or race/country of origin when they otherwise would be let in is a whole other can of worms though.

</comment></comment></comment><comment><USER15> I feel like they should have "safe harbor" provision where if student report fake universities on first being aware, they should be able to safely transfer to another university.

</comment><comment><USER16> This can't be the best use of resources or money in our gov...

<comment><USER17> The article says that they received millions in tuition payments from these students so it sounds likely the program is at least partially self funding. In which case, this is a great use of government money.

<comment><USER6> Yes, it turns out theft by the government is very profitable when the government chooses not to charge itself with theft.

</comment></comment></comment><comment><USER18> If such fake universities exist, why aren't these resources being spent to identity and shutter them instead? If they don't, why manufacture this elaborate heist instead of deporting the students in the first place when their visa ran out? Wouldn't it be more cost effective to just pore through immigration records and do some on-site checks to find a "real fake university" than to create one?

<comment><USER9> > but since the University of Farmington was later revealed to be a creation > of federal agents</comment></comment>


AppleTV 6.0 requires Fairplay-DRM Airplay Sources - <AUTHOR> http://weblog.rogueamoeba.com/2013/09/20/warning-on-apple-tv-version-6-0/ <comment><USER2> Since 10.8, OS X has had native Airplay support. Even if your Mac doesn't have the hardware to do Airplay video, you can select Airplay as a sound output device. Applications can output to Airplay via the CoreAudio API, documented at[http://joris.kluivers.nl/blog/2012/07/25/per-application- air...](http://joris.kluivers.nl/blog/2012/07/25/per-application-airplay-in- mountain-lion/).

Of course, Windows users are pretty screwed.

<comment><USER3> And this is the typical reason I cannot take Apple anymore. I've paid for numerous RogueAmoeba software licenses over the years and they are top notch. Apple decided, screw that we'll do it how we want it - because, you know, streaming audio in your house you should be doing it exactly how we told you too.

F you Apple. Nobody has cracked the open streaming audio nut, trivial as it may be. And the rest are left with junk, proprietary crap like this.

<comment><USER4> You might want to consider that there were licensing reasons behind this move.

Consider that AppleTV 6.0 now allows "AirPlay via iCloud", which means you can stream tracks you own on someone else's AppleTV where you haven't registered your iTunes account. Such a change might be one of the reasons for FairPlay encryption.

This might be a temporary issue where they open it up if enough people complain.

<comment><USER5> I can understand licensing issues. But since Airplay only runs on the local network segment, this shouldn't be an issue.

</comment></comment></comment></comment><comment><USER6> Apple TV, which requires me to ruin my media-collection with iTunes and only get content from the iStore: It was no thanks before. It's certainly no thanks now.

<comment><USER7> I'm now worried that Apple will update the AirPort Express to require FairPlay for audio as well. The precedent has been set. (The Express + Airfoil makes for a really nice multiroom audio setup.)

<comment><USER8> Of course they will. Everyone was worried that they'd turn on the whole 'only run apps signed with an Apple ID' in Mac OS X, too. They did. Sure, you can manually turn it off if you're an advanced user, but most users won't (and won't know how), so you need to pay the 'Apple tax' as a software publisher on Mac OS X now, too. The walled garden's walls keep getting higher.

<comment><USER9> You seem to be engaging in some revisionist history of Gatekeeper. The original concern was that it would be turned to MAS apps only by default, which it wasn't (and still isn't in Mavericks). By default the only thing you need is a free developer certificate to distribute apps outside the MAS (or to tell your users to right click to open, which bypasses the restriction).

Whether or not Apple does something in the future is a separate question, but accusing them of something they haven't done (despite several opportunities) appears more than a little biased.

Update: I am 100% incorrect about the developer certificate being free. You must be a member of the $99/yr Mac dev program to get one. So score one for "raising the walled garden" and I will gladly eat this humble pie.

<comment><USER10> It's not free actually, you have to sign up to the Mac Developer Program which costs $99 / year. I think it used to be free in the past (the certificate, not the membership) but now it isn't.

<comment><USER9> I didn't believe you so I just checked and now it's time to eat crow! You are absolutely right. I will update the original to note that my statement is completely wrong.

</comment></comment></comment></comment></comment></comment><comment><USER11> I don't see why Apple would do this when the chromecast is out there...making a useful device and creating strong network effects for iOS and OSX hardware by making streaming anything from those devices onto tvs seems like a wiser choice than bending over for the media companies. It isn't as if labels will pull their music from iTunes Store at this stage of market penetration; if they were going to withdraw their consent they would have done it early.

<comment><USER12> ChromeCast has been breaking apps written to push to it as well: [http://www.engadget.com/2013/09/21/airplay-mirroring- android...](http://www.engadget.com/2013/09/21/airplay-mirroring-android- cyanogenmod/)

And honestly, if Google had any intention of having generally open access to it, they would have started with DLNA support, which would have allowed many phones to push to it out of the box. Instead expect it to stay heavily locked down and to only provide good support for getting users on to Chrome and Google Play.

<comment><USER13> Chromecast's API hasn't been finalized and their are huge warnings all over the documentation telling you to not release an app until the API is final. Apple has never released an API and has actively tried to stop things like Airfoil from working.

</comment></comment></comment><comment><USER14> Reminds me of this:

[http://static.fsf.org/nosvn/stickers/DBD- Sticker_002-jmt.svg](http://static.fsf.org/nosvn/stickers/DBD- Sticker_002-jmt.svg)

</comment><comment><USER15> This is rather fucked up. The author does not provide any proof that Fairplay is the reason their app is not able to play. Of course HN crowd do not need proof to bring out the pitch forks. If they can show me proof I will definitely fall in line. In fact if the guys want some help fixing their app they should try talking to Apple and not try to sensationalize things and make false accusations.

<comment><USER16> Here ya go: [https://gist.github.com/qdcarnicelli/6653766](https://gist.github.com/qdcarnicelli/6653766)

Ten seconds of running WireShark and watching iTunes talk to an AppleTV running v6 will give you something like that, where iTunes and the AppleTV do much talking about 'fp-setup' and FPLY and handshake together.

Apple's AirPlay (AirTunes) devices have actually been doing these FPLY verifications for years now, but they were optional and talking to the devices with the older non-FPLY protocol worked. It's just as of Apple TV 6.0 that they appear to be dropping the old connection exchange and requiring the FPLY one to talk to the device.

I'm not quite sure what you think we have to gain by claiming we think FairPlay is required now, when it really wasn't? This weblog post was to inform our customers about an issue with our software and ATV 6. We'd all dearly love a solution.

<comment><USER17> ...perhaps Apple's intent was simply to drop support for the extremely old clients that Airfoil was emulating? That seems like a much simpler explanation to me than some sort of nefarious plan to break Airfoil.

<comment><USER18> The fact that it requires DRM is clearly a nefarious plan to break third party usage in general, surely.

<comment><USER17> My suspicion would be that feature was added in response to external demands (e.g, movie/TV studios required it for remote playback), and making it mandatory was a later simplification.

</comment></comment></comment></comment></comment><comment><USER19> Does anyone known if Beamer ( [http://beamer-app.com/](http://beamer-app.com/) ) still works with the update? I'm putting off updating until I know because I use Beamer all the time.

<comment><USER20> It still works, Beamer uses a different part of the AirPlay protocol 'suite'. We've tested with the betas to ensure it would. (I'm one of the developers.)

</comment></comment><comment><USER21> I'm seriously getting sick and tired of all the peripherals and differing standards for every OS I need to buy and use just to play a goddamn song on my surround sound.

</comment><comment><USER22> I'm confused. If I upgrade to Apple TV 6.0 will I still be able to Airplay DRM-free video that I've imported to iTunes?

<comment><USER23> Yes. They just require the source to be iTunes or the Mac.

</comment></comment><comment><USER24> On a side note, does anyone who has updated know if this adds 1080p mirroring yet or is it still ridiculously restricted to 720p?

</comment><comment><USER25> Between Google Chromecast, Amazon's new "micro-console", numerous other Android "mico-consoles" and Roku, Apple's "hobby" project may be in for a real battle. Locking down the usability scenarios right now is not a good idea.

<comment><USER26> Except that Amazon just enabled AirPlay on their iOS app.

</comment></comment><comment><USER27> I never understood why anyone would buy an AppleTV when there are cheaper, much more capable alternatives that will play just about anything you can throw at it...without idiotic DRM restrictions.

<comment><USER28> Because if you live in the Apple ecosystem already, it makes tons of sense and is a welcomed addition to get the content you probably already have on to the one screen it wasn't yet on. My 10+ year iTunes collection sounds great coming out of my sound system, and I can control it from my iPhone. Being able to mirror my MacBook to my TV is also pretty great, and with Mavericks, it will have second-screen capability in addition to plain mirroring.

Also, iTunes content hasn't had DRM in years now, idiotic or otherwise.

<comment><USER29> Um, last time I checked, movies and TV shows purchased from iTunes were still locked down tight. For that matter, for a long-term user it is surprisingly easy to have random DRMed music in an iTunes library unless you were very diligent about paying to unlock it (as I discovered while uploading my wife's library to Amazon Cloud Player). Unless you have some bizarre definition of iTunes content that doesn't include those kinds of cases, you just don't know what you're talking about when it comes to iTunes DRM.

<comment><USER18> I don't understand why this comment is being downvoted. Is it a little abrasive? Sure. But it's also absolutely correct. The comment he's replying to is simply misinformed. While it's true that iTunes _music_ got rid of DRM years ago, iTunes _video_ content still has it. If you're buying movies or TV shows to watch on an Apple TV, that content is locked into Apple's ecosystem unless you manage to crack their DRM.

</comment></comment></comment></comment><comment><USER30> Stupid is as stupid does.</comment>


Living with the Windows 8 Start screen  - <AUTHOR> http://www.extremetech.com/computing/135762-living-with-the-windows-8-start-screen <comment><USER2> Perhaps I'm too resistant to change but I don't really see why the Start Menu had to be removed. The new Metro UI is great for touch based interaction but I can't believe it would have been that much work to retain the start menu as well and place the default option in a setting somewhere. If you're primarily a desktop user then you keep the familiar UI and can flip to Metro as desired. If you're a touch user then Metro is a no brainer as the default. In the scope of an operating system I can't imagine that would have been all that much more work?

<comment><USER3> It's not that it was so much work. It's exactly the opposite, in the first leaks, the start menu was there. At the moment, someone from MS explained that if you give people a new and an old way to do something, they prefer the old way. So, to promote learning the new way, they had to remove the old one. It's the same that they did with the Classic Start Menu (win 95 style). There was an option in Vista, but they removed it in Win 7.

</comment></comment><comment><USER4> User interfaces are necessarily shaped by the input devices we use to interact with them. I'd be interested in seeing some reviews of Metro from people who are using the MS Touch mouse rather than a standard mouse. Perhaps Metro is designed with them in mind, so complaining about metro sucking with a standard mouse might be a little bit like complaining that the earliest versions of Windows were hard to use with just a keyboard!

The move from DOS to Windows was very much one based on the addition of a mouse. Sure, some DOS applications could use a mouse, but it was not a necessary device for interacting with the operating system. Windows changed that. Yes, I know you could do almost anything in Windows with keyboard shortcuts, but it was painfully counter-intuitive to try doing so. Since then, the mouse and keyboard have remained more or less unchanged. The underlying technology has improved (e.g. optical vs ball mice) or deteriorated (most modern keyboards vs an IBM Model M), but their capabilities have remained almost frozen in time. The last major degree of freedom to be introduced and widely adopted was scroll-wheels. Some mice have other degrees of freedom, such as horizontal scrolling capabilities or zoom wheels, but none of these have become standards across all mice. Interfaces have gradually coaxed richer interactions out of those existing degrees of freedom, but that's it.

Touch mice offer new degrees of freedom that traditional mice do not have. e.g. Gestures. If MS is smart, they are planning to develop Metro along lines that will exploit those new degrees of freedom. It will likely take years or decades for touch mice to reach their full potential but, if the people at MS have done their job well, there should already be compelling advantages to using them with Windows 8.

</comment><comment><USER5> Another way to deal with it is to merely hold down Enter when you login. If you hold down Enter as you login, you bypass the Start Screen and it dumps you straight to the desktop.

</comment><comment><USER6> So it sounds like the best feature of the start screen is that it isn't too hard to avoid it?

</comment><comment><USER7> Winkey +D

That's how i deal with it.

</comment><comment><USER8> An entire article defending the Windows 8 start screen only to tell you how to disable it at the end? Win or fail? Saying you "only see the much-reviled start screen a handful of times so what's the big deal?" doesn't sound like much of a defense.

</comment><comment><USER9> using the metro interface was totally annoying for me. i disabled it immediately and the rest of the experience was ok.

fortunately my iMac doesn't force me to use the same UI as my iPhone, or I would be disabling that too. but then again, apple !== microsoft.</comment>


Islamic State: Destroyed artifacts attract more attention than executions? - <AUTHOR> http://www.spiegel.de/international/world/the-islamic-state-strategy-to-draw-west-into-final-battle-a-1024438.html

<comment><AUTHOR> It may even be that the images of destroyed artifacts are more effective than those depicting executions, because they are televised everywhere and not relegated to the depths of the Internet

I can't help but thinking over and over about that statement.

1) Do we relegate human lives to the depth of the Internet?

2) Are we, the western world, more sensitized about destroyed art than human executions?

3) As Bill Leonard said on We steal secrets: "The ultimate power of image is that it helps people understand what it is"

<comment><USER2> i thought the same thing, and recall thinking that about the taliban back when they destroyed what were then the largest buddha statues.

while it sickens me too, the main justification i can think of for it is that these artifacts represent the human story much more than any one person can. they are the collective achievement of thousands of years of progress and invention, and in seeing them destroyed we see our very history and future threatened more so than any one person's death can.

while i can't say i feel fully comfortable with a human life being worth less than a thing, this is one way of thinking about it.

<comment><AUTHOR> I see your point and I find it reasonable. In fact, a good way to see it's those sculptures are the touch of a human being and, destroying them, they're also destroying the essence of the human lives that created them. Something we'll never recover.

What scares me is how the Islamic State got to the conclusion they could attract more attention by destroying art than killing human lives. As if they'd have simply measured their acts and they'd think they could get a higher impact by destroying artifacts...</comment></comment></comment>


The x86 Power Myth Busted: In-Depth Clover Trail Power Analysis - <AUTHOR> http://www.anandtech.com/show/6529/busting-the-x86-power-myth-indepth-clover-trail-power-analysis

<comment><USER2> From the article: "We've demonstrated this in our battery life tests already. Samsung's ATIV Smart PC uses an Atom Z2760 and features a 30Wh battery with an 11.6-inch 1366x768 display. Microsoft's Surface RT uses NVIDIA's Tegra 3 powered by a 31Wh battery with a 10.6-inch, 1366x768 display. In our 2013 wireless web browsing battery life test we showed Samsung with a 17% battery life advantage, despite the 3% smaller battery. Our video playback battery life test showed a smaller advantage of 3%." It is worth also noting that they are comparing this years intel with last years ARM. Also worth noting that it is also a smaller CPU process of around 25% in Intels favour.

Now nothing stopping Intel doing ARM chips down the line or indeed doing some hybrid chip. They have many cards they can play if they don't get the sales they want.

I would love the day when you could get a motherboard and the current Intel and ARM chips are pin compatable so you could drop what you like in, wouldn't that be a wonderful dream.

<comment><USER3> I think the trend is definitely away from user-replaceable CPUs. Some enthusiasts say it's "sad", but it's just part of a general trend towards integration on a larger scale. You can't replace a broken transistor on your Intel 4004 either.

<comment><USER4> It's more a question of upgrades than trying to fix anything. CPUs are quite reliable. The only important things to replace when they break are power supplies, batteries, and storage drives.

</comment></comment></comment><comment><USER5> I don't think this is a particularly fair test of ARM and x86 as architectures, though it is of Tegra 3 and Cloverview as specific systems. Cloverview just came out, but Tegra 3 is nearly 2 years old. Cloverview is on Intel's 32nm process node, whereas Tegra 3 is on TSMC's 40nm node (and remember that Intel's 45nm node actually had better performance than TSMC's 40nm).

And I've never quite understood NVidia's design choices with Tegra 3. All the other ARM SOC vendors used a low power version of the process node they were on for their ARM cores, but NVidia used the standard process version for 4 of their cores and the low power version only for the 5th core. And yet those four cores are clocked only slightly faster than the cores of their competitors, while their 5th core is clocked way lower.

Now, NVidia's GPUs are top notch and while it hasn't been that successful in recent generations of phones I assume that NVidia's existing Windows software compatibility is why it was selected for the Surface.

EDIT: I seem to remember that there were some big issues on the GPU front a couple of years ago with NVidia's design tools and TSMC's 40nm process having something of an impedance mismatch. The big improvements between NVidia's GPU's from that time to their current generation attest to these issues being sorted out.

<comment><USER6> Tegra3 has been a huge failure, and ended up with very few design wins. Imagine that surface got a good deal.

<comment><USER7> It got Nvidia in the best selling tablet of the year, the Nexus 7. Technical merits aside, it was a win for Nvidia's bottom line.

I still don't get how embedded chipset manufacturers can keep competing with the largest graphics company in the world in the gpu space so easily though. Tegra 4 is _supposed_ to be jumping from 12 up to 72 in the highest end model Kepler cores instead of old 8000 cores. If they manage to get some super efficient high performance graphics in mobile I could see a games revolution around it.

Especially if they put that in the Nexus7#2 next year.

<comment><USER5> _"I still don't get how embedded chipset manufacturers can keep competing with the largest graphics company in the world in the gpu space so easily though."_

Just for some perspective:

Samsung total revenue: $247 Billion Apple total revenue: $157 Billion Qualcomm total revenue: $19.1 Billion Texas Instruments total revenue: $13.7 Billion NVidia total revenue: $4.00 billion

NVidia is the relatively small fish in the pond here, and if they have relatively more graphics experience the others have relatively more experience with everything else in this space.

</comment></comment></comment></comment><comment><USER8> Does Windows RT offer anything other than ARM compatibility for better size/battery life? Is the whole confusing Windows RT / Windows 8 split something that could've been avoided if MS had known Intel would have these chips ready?

<comment><USER9> I think it's a political move more than a technical one. WinRT lets MS say to Intel that Intel has to care about the tablet market and low-power processors or otherwise ARM will get a foothold in Windows (giving them easy access to the low-end of the laptop market in the next few years).

Of course, this would have worked a lot better if people cared about WinRT at all, but I'm sure that was the idea.

<comment><USER10> > WinRT lets MS say to Intel that Intel has to care about the tablet market > and low-power processors

I don't think Intel needs MS to say that. The lost money on the table in the smartphone-tablet ecosystem is enough incentive!

<comment><USER11> Margins on CPUs for tablets and phones are not all that high. Intel enjoys pretty amazing margins on their desktop market, so they aren't missing too much there. They just need to keep ARM away from their bread and butter of profits, which probably can be explained by their current push to keep ARM out.

<comment><USER12> No, but tablets and smartphones are starting to affect the PC market. Desktops are dying, and laptops are stagnating.

For a lot of people, a smartphone or tablet is sufficient to meet their computing needs. Especially with ability to connect a TV and keyboard, and a number of small ARM based "mini PCs" starting to arrive.

</comment></comment></comment></comment></comment><comment><USER13> Intel would be wise to brand Clovertrail as something other than Atom (or Celeron). Clovertrail perf and efficiency are very good and the Atom name typically suggest otherwise.

If I could get a Surface Pro with a Haswell at the listed Surface Pro prices, it would be a no brainer. But with a 3rd-gen Core i5 -- not so enticing.

</comment><comment><USER14> I just found that Intel is about to release a server-version of the Atom, codenamed Centerton, based on a 32nm process. These will be 64-bit processors and support Intel's virtualization extensions.

Next year there will be a 22nm version of Centerton, Avoton, with a 14nm processor following the year after. Centerton, and possibly Avoton, will be out before the first 64-bit ARM chips.

[http://www.anandtech.com/show/6509/intel-launches- centerton-...](http://www.anandtech.com/show/6509/intel-launches-centerton- atom-s1200-family-first-atom-for-servers)

It looks like Intel is taking the Atom's intended market serious enough to extend their tick-tock cadence to it.

<comment><USER2> This is on area which Intel are trying to cover low power server market to stop people looking and playing with ARM's as much as possible.

Eitherway it certainly will wake up Intel, took AMD with the XP series chips to get Intel into gear many years ago and they need another kick for momentum.

But on a like for like generation of CPU and nanometer size ARM certianly have more headroom. Intel though certainly have a crazy no lose situation as they have a full ARM liscence so can always make and sell ARM chips.

Intel also have there multi core knights corner CPU's and they will only get better and have many area's of research into feilds that have yet to emerge. I find there whols onchip radio research very tantalising for future chip to chip communicatons with regards to production costs of servers.

Fun times, and as a consumer I'm happier we now have a race on our hands.

</comment></comment><comment><USER15> Does anyone know anymore about this and or can explain what the relation is between frame rates and survey data?

 _"User experience (quantified through high speed cameras mapping frame rates to user survey data)"_

<comment><USER16> My interpretation was that they would use cameras to measure frame rates and then look for the level at which lower frame rates reduced user happiness as measured through surveys. Pushing frame rates beyond that would be much less valuable.

</comment></comment><comment><USER17> They say they proved the atom performance advantage, but the linked article says they had nothing but a JavaScript test which probably has significant code quality differences between the Intel and Arm JITs.

</comment><comment><USER18> The problem is Intel has already lost on the performance side. Intel has always needed 3 things to beat ARM, and they need all 3 to be competitive: performance, energy efficiency, price.

With Atom, they've _always_ had the performance advantage. In fact they've had a big advantage over ARM at the time when when Atom came out. It was like several times more powerful than the ARM chip inside iPhone 3G.

But to be competitive, Intel needed to compete on the other 2 levels, as well. So they kept Atom's performance mostly the same, while they tried over the years to push Atom down from a 10W TDP. But while Intel tried to lower the power consumption, ARM's chips were gaining in performance - faster than Intel. So now when Intel has finally reached parity with ARM in energy efficiency, ARM has surpassed it in performance with Cortex A15, and from what I've seen so far, by a lot.

Then there's also the pricing issue. I think they've improved there quite a bit. An Atom chip used to be close to $100. Now it's probably more like $40-$50 (this dual core version). But that's still like at least 50% more than an ARM chip.

So Intel still has a lot of catching up to do in "overall competitiveness", because right now it looks like they've only switched the much bigger performance leadership for "energy efficiency parity", and are losing at the other two. I'd like to see how high they are willing to go with Atom on performance, until they realize that it's going to cannibalize their Core i3 market.

<comment><USER19> This is a faulty analysis, I think. The Atom wasn't originally directly in competition with ARM, they were in different market segments. And it wasn't a case of the atom merely being iterated in design until it matched ARM efficiency levels, that's not what's happened. Instead, the Atom was originally just a low-power stand-alone processor and now Intel has developed a first generation Atom based system-on-a-chip. The fact that Intel's first SoC designs are so closely competitive to ARM's n-th generation designs should send alarm bells ringing throughout the ARM industry. Intel is good at improving design and they are even better at economies of scale.

It's easy to dismiss Intel's offerings as not being competitive with state-of- the-art ARM designs, but only a sucker would dismiss Intel and rest on their laurels. Intel's 2nd and 3rd generation chips are just going to be that much better, and ARM could be in serious trouble in as little as a year or two from now. Imagine, for example, an Intel based android powered tablet that can run stock Windows in a VM or emulate windows and can run most windows applications and perhaps even games, while also being able to run all android applications. And do so at a cost/performance/efficiency level equivalent to any ARM based system. That's the sort of thing that should send shivers down the back of Samsung or even Apple.

<comment><USER12> ARM CPU's outsold Intel CPU's in volume well before tablets and smartphones started using them.

If I remember correctly, projected volume of ARM CPU's for this year is in the region of 3 _billion_ units.

The smartphone and tablet market is not even near being the majority of ARM CPU sales. So I don't think ARM will despair over Intel's designs just yet.

<comment><USER20> Volume is not profit. Intel is an order of magnitude more profitable. However, ARM's model seems to be to suck the profit out of the market. It's a textbook example of a paradigm shift, with an initially inferior product offered at a much lower price point gradually catching up with the market leader. Intel has no choice but to follow ARM down the price curve to settle at a lower profit margin. They seem to have realized this with their current chip strategy. I would be looking at intel to start diversifying into the device market, because that's where the profit is moving.

</comment></comment></comment></comment><comment><USER21> That's some bad copy write from the start:

> _The untold story of Intel's desktop (and notebook) CPU dominance after 2006 > has nothing to do with novel new approaches to chip design or spending > billions on keeping its army of fabs up to date. While both of those are > critical components to the formula_

If those components are "critical to the formula" then you cannot say that "it has nothing to do" with them.

Critical means: it has absolutely something to do with them too.</comment>


Ask HN: Getting hired on an F1 visa - <AUTHOR> I'm a recent graduate in math (BS) and am working at a university lab as a statistician. I am on an F1 visa and have the option of getting an OPT STEM extension so I can work for 3 years total. I love my current job but I want to transition to industry and have a higher pay than what a university can offer.
How hard is it to get hired at a startup/company to do stats/data science/machine learning while on F1?
Are people at all interested in hiring someone who only has 3 years of legal presence guaranteed?
How common is it for startups/companies to hire a person on OPT with the goal of sponsoring an H1B later?
Would be grateful to hear HNers' takes on this topic. See my profile if you'd like to email me. <comment><USER2> Well, if you're good, there's a good chance they will hire you and convert you to H-1B. But you need to have work experience. You can work up to 20 hours/week on campus on F-1, so go talk to your IT department, explain you want to work.</comment>


Show HN: DB Fiddle – An SQL Fiddle Alternative - <AUTHOR> https://www.db-fiddle.com/ <comment><USER2> I like it though it's confusing to enter SQL because your cursor has to be exactly on the first line and if not, it's not clear why your typing doesn't appear.

<comment><AUTHOR> Thanks for the bug report, we'll look into it</comment></comment>