Dependent Haskell Is the Future (2018) - <AUTHOR> https://serokell.io/blog/why-dependent-haskell <comment><USER2> The problem is that dependent types (and the very idea of "correctness by construction") suffer from fundamental, serious limitations -- both in theory and in practice -- that the author does not seem to be aware of. He also does not seem to be aware of all the _other_ approaches for software verification and correctness (sound static analysis, model checking, concolic testing) that have so far shown greater promise, and formal methods research focuses on them rather than on dependent types (the approach that scales least and suffers from the most limitations); in fact, last I spoke with a dependent type researchers, he told me that now they're trying to _weaken_ the soundness of their type systems (sort of gradual-dependent-types) to try and fight the problems types suffer from. I'm not saying dependent types don't have some uses, or that they won't change enough so they could play a central role in software correctness, but thinking that they're the future of software correctness (in their current form) shows a complete lack of familiarity with this field.

<comment><USER3> > The problem is that dependent types (and the very idea of "correctness by > construction") suffer from fundamental, serious limitations

It would be great if you've mentioned them and briefly described why are they limiting.

> model checking

Is extremely complex. Proving complex programs using constrain solving would be too expensive, if possible. I would argue that proving stuff manually using SMT for trivial cases, as F* does, would be much more productive than doing the whole proof using any sort of constrain solver (if this would ever work for a sufficiently big program).

The main problem of a constrain solvers is that they don't scale well. When you proved lemmas for a small block of code, you simply reuse those for higher order proofs. Constraints are being accumulated (tho not linearly) when the program grow and so does its state.

<comment><USER2> > It would be great if you've mentioned them and briefly described why are > they limiting.

I've done so here: [https://news.ycombinator.com/item?id=20714845](https://news.ycombinator.com/item?id=20714845)

> Is extremely complex. Proving complex programs using constrain solving would > be too expensive, if possible.

The same is true for deductive proofs, of which dependent types are a particular instance, only the problem is far worse. It is true that there are cases where deductive proofs are more feasible than model checking, but the converse is true in a much wider portion of cases. That's why deductive proofs are rarely the first choice, and they're used selectively, usually only after other methods have failed. Overall, deductive proof, although it certainly has its place in certain circumstances, is the least scalable verification method we have. This means that it's the last method you want to use by default, let alone bake it into your type system.

> Constraints are being accumulated (tho not linearly) when the program grow > and so does its state.

This is true regardless of the verification method used. See my blog post here: [https://pron.github.io/posts/correctness-and- complexity](https://pron.github.io/posts/correctness-and-complexity)

> When you proved lemmas for a small block of code, you simply reuse those for > higher order proofs.

No, you can't "simply" reuse results. Here's an example (given in the post in Java, my preferred language, but as this is a post about Haskell, let me show it in Haskell):

        foo :: (Integer -> Bool) -> Integer -> Integer
        foo p x
            | x <= 2 || odd x = 0
            | otherwise = head [i | i <- [x, x-1 .. 1], (p i) && p (x - i)]

        bar :: Integer -> Bool
        bar x = null [1 | i <- [x-1, x-2 .. 2], s <- [x, x-i .. 0], s == 0]

These two subroutines are very simple, clearly terminating, and you can easily prove almost any property of interest about each of them in isolation. But now I claim that their composition `foo bar` never crashes (on `head`); can you prove me right or wrong? Feel free to "simply" reuse any proof about any of them.

The idea that properties compose and that you can cheaply reuse knowledge about components to prove stuff about their composition is just mathematically false. There are a couple of results I mention in my blog posts that show that. We know that if you have a composition of components X_1 ∘ ... ∘ X_n then the cost of verifying some property of their composition is not only not polynomial in n, it's not even exponential in n (it's not any computable function in n, I think). I.e. it is a mathematical result that you _cannot_ , generally, hide the complexity of components to make verification of their compsition scale with their number.

<comment><USER3> > Dependent types rely on deductive proofs for verification, and deductive > proofs (the "proof theory" part of a logic) are the least scalable > verification method as they are least amenable to automation.

What? You can generate proofs for the trivial cases using various algorithms like constraint solving.

Things like sledgehummer tactic, omega tactic, the whole F* language simply prove you wrong (by construction ;)

You need to prove manually only complex cases, where your constrain solver would not manage to generate the proof.

> But now I claim that their composition `foo bar` never crashes (on `head`)

If you proved that foo does not crashes on head for any predicate P and any integer X, and bar terminates, than foo bar terminates. What's the problem?

> The idea that properties compose and that you can cheaply reuse knowledge > about components to prove stuff about their composition is just > mathematically false. There are a couple of results I mention in my blog > posts that show that.

Could you refer to the proof of that, as well as give the definition of ``cheaply'' and especially the evidence that a composition of lemmas and theorems would be more expensive than a constraint solvers-based methods?

I didn't state that proving is easy or cheap, just that manual proving with a usage of constraint solvers for trivial cases is more scalable and makes more sense for sufficiently big programs.

<comment><USER2> > What? You can generate proofs for the trivial cases using various algorithms > like constraint solving. Things like sledgehummer tactic, omega tactic, the > whole F* language simply prove you wrong

I don't understand this simple proof. How does allowing some automation prove that it's not the method least amenable to automation?

> If you proved that foo does not crashes on head for any predicate P and any > integer X, and bar terminates, than foo bar terminates. What's the problem?

Because that would make the verification problem even harder (possibly to the point of undecidability). And this approach simply doesn't make sense. Clearly, the important correctness properties of your program arise from the composition of all components of your program (or you wouldn't need them). If the same correctness property arises from each component in isolation, then you wouldn't need all others. Most correctness properties are just not compositional (inductive), and the belief that a non-compositional property can be proven by combining results about the components at a cost that scales _with their number_ (polynomially, exponentially -- take your pick) is mathematically false.

> Could you refer to the proof of that, as well as give the definition of > ``cheaply'' and especially the evidence that a composition of lemmas and > theorems would be more expensive than a constraint solvers-based methods?

I never mentioned "constraint solvers-based methods" (and I'm not even sure what you're referring to [1]). Once you need to prove something, the method is irrelevant, and the theoretical limitations kick in. Showing that one method is easier or harder for instances encountered in practice requires empirical research, so I can't say whether their harder or easier, just that so far deductive proofs are the least scalable in practice. Finally, I _can_ say that we cannot in general decompose correctness to make it easier. Some relevant results are in the papers mentioned in my post in the sections "Correctness does not decompose" and "Language abstractions cannot generally be exploited".

[1]: Perhaps you're referring to SMT solvers and the like, but they are rarely used in isolation. They are used as components in deductive proofs, model checkers and concolic tests. As usual, they are more effective when used in the latter two than in the first.

<comment><USER3> > Because that would make the verification problem even harder (possibly to > the point of undecidability). And this approach simply doesn't make sense.

What? If foo terminates and bar terminates, than foo bar clearly terminates. How does this make no sense?

> Most correctness properties are just not compositional (inductive), and the > belief that a non-compositional property can be proven by combining results > about the components at a cost that scales with their number (polynomially, > exponentially -- take your pick) is mathematically false.

Ok, let's check your blog and what paper you mention

> A Parametric Analysis of the State-Explosion Problem in Model Checking⋆

What? You state that proving doesn't scale referring to constraint based solutions? Sure, they don't scale.

What this foobar example has to do with this tho? Foo does not terminate due to exception, and so does Foo Bar. How doesn't this compose?

> I don't understand this simple proof. How does allowing some automation > prove that it's not the method least amenable to automation?

Because you can automate anything you can prove with a SMT or model checker?

<comment><USER2> > How does this make no sense?

Because most correctness properties aren't compositional.

> What? You state that proving doesn't scale referring to constraint based > solutions? Sure, they don't scale.

No, you've misunderstood the paper, and missed the part of the post where I provide necessary context. Like a lot of work in computational complexity theory, they're referring to the model checking _problem_ , i.e. the problem of determining whether a program satisfies some property, not to any particular verification algorithm. Their results apply to all methods (their proofs don't not rely on any particular verification method but show hardness results).

Also, it's funny that you say "they don't scale." You're right, none of the formal methods we have scales nearly as well as we'd like, to the point we can say "they don't scale" [1]. Of them, the one that scales _the least_ is deductive proofs. That's the main reason it's the formal methods that is used the least.

> constraint based solutions

I don't know what you mean by that (SMT?), and I don't recall mentioning those.

> Because you can automate anything you can prove with a SMT or model checker?

Yes, model checkers are completely automatic.

SMT is a class of algorithms and techniques used in various verification methods -- deductive proofs, model checking, static analysis, concolic testing -- not a verification method in itself, so I'm not sure what you mean exactly. Sometimes they're used to prove some logical proposition directly, but they're not used as a complete software verification tool, because they're rather limited on their own.

[1]: When applied to the code directly. We have ways of scaling formal methods by verifying high level specifications.

</comment></comment></comment></comment></comment></comment></comment><comment><USER4> > Why Dependent Haskell Is the Future of Software Development

I find this hard to believe, considering probably less then 1-2% of developers in the world have any clue to what this article is about.

<comment><USER5> This is probably because it's about cutting edge language design. The feature the article is about (dependent types) might well be the future of software development and could end up in every strongly typed language, but because it's new and Haskell's functional syntax looks weird compared to C-based languages, it makes the headline sound a bit hyperbolic.

<comment><USER6> I wouldn't disagree that dependent types are great for certain specialised problem domains, but they've already been around for ages and didn't yet revolutionise the world of software design. I think the sentiment that this is unlikely to make a big splash is totally on point. Languages have to balance ease of use with features in order to become very popular. Nothing as purebred as Haskell is likely to become the next Python or Visual Basic. Real work horses are dirty, messy machines. Of course this new feature might turn out to be popular for Haskell users.

<comment><USER7> >but they've already been around for ages and didn't yet revolutionise the world of software design.

I think it's mostly because languages with dependent types are awfully clunky to use. Perhaps dependent typing is even a dead end, but I wouldn't count out other ideas such as refinement typing just yet. I think it will take a lot of work and failed attempts (such as typestate in early Rust) to get fancy type theory into mainstream languages (just like it took a while for Java to get lambdas).

Case in point: static analysis tools for C++ are getting more capable and popular recently.

<comment><USER8> Formal methods in general are extremely clunky to use. Just see how much hate Rust gets for making it extremely difficult to make an intrusive linked list. And memory safety is only one kind of correctness assertion.

So I'm gonna be a pessimist here and say: nope, not gonna be the future, because programmers are lazy and "ship it now" is better than "prove the bugs don't exist".

<comment><USER9> Not all programmers build WordPress plugins.

Some programmers write software for aircraft. The "ship it now" maxim doesn't exist in that context.

<comment><USER10> No one is writing aircraft software in Haskell. They need good control over memory usage.

<comment><USER11> Counter-example: [https://smaccmpilot.org/software/index.html](https://smaccmpilot.org/software/index.html)

Also, a Haskell DSL for automotive control systems: [http://tomahawkins.org/](http://tomahawkins.org/)

<comment><USER8> That isn't a counter-example unless you're taking his post literally. In which case I claim that Python is a system programming language because one time somebody somewhere wrote a driver in it.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> > Haskell, at its core, is simple: it is just a polymorphic lambda calculus > with lazy evaluation plus algebraic data types and type classes.

This can potentially unseat the current reigning champ of Haskell-related statements which is "A monad is just a monoid in the category of endofunctors, what's the problem?"

<comment><USER13> To be fair, at least that's computer science speak rather than category theory speak.

<comment><USER14> What body of knowledge defines "type classes"? I ask out of relative ignorance, kinda saw it as Haskell thing

<comment><USER13> The term "type class" is original to Haskell, I think, but the concept (constrained parametric polymorphism) is fairly standard programming language theory.

</comment></comment></comment></comment><comment><USER15> There is a persistent myth that "A Haskell program that compiles is correct by definition"

Indeed it is "correct" in the sense that it has a very high likelihood (maybe 90% ?) of doing what the programmer intended (Unlike say C or C++ where the probability drops to about 50% for beginners)

However, that is a poor definition of "correct". While it's true that a lot of huge consequences have occurred due to stupid errors like buffer overflows (unintended bug), there are equally disastrous bugs caused by intent - i.e. the programmer had no idea the code could fail.

The biggest challenge to software development is not the "How can I avoid silly mistakes?" but rather "How do I capture this extremely complicated real world semantics in code?" and languages can't really solve that

<comment><USER12> I sometimes phrase it as "yeah, your program is correct because it's type- checked, but who has checked that your types are correct"?

With dependent types some of the logic will be coded in types, and we would need to check _those_.

<comment><USER16> At least now we are checking that two pieces of saying what we want a program to do match up. It's less likely to get both the implementation and specification (in the form of types) wrong. Whenever the program fails to type-check, it will make you think about both bugs in the type and bugs in the code, even if the latter is more likely.

<comment><USER12> Types can't encode the specification fully, or require a lot of work to encode a specification (so most people will skip this work).

The simplest example is very common banking and e-commerce logic which is basically a series of checks in the form:

if <some piece of data retrieved at runtime at that particular moment> is consistent with <multiple other pieces whose number and relevance depends on that data retrieved at runtime from potentially multiple sources>.

</comment></comment></comment></comment><comment><USER17> What about F*? It has dependant types, and is already in use in production at some places (there is a project of making a proved TLS implementation with it and it is quite advanced iirc).

Also, it is somewhat based on F# which is based on OCaml so I would bet that performance wise it can beat Haskell.

[https://www.fstar-lang.org/](https://www.fstar-lang.org/)

<comment><USER18> I would also say OCaml and F# style is also less foreign than Haskell to most newcomers. It's almost like (type-hinted) python + match expressions + pipes.

</comment></comment><comment><USER19> There are a lot of exciting new things on the medium-term horizon for Haskell. -XDependentTypes, -XLinearTypes, and a new pluggable concurrent (latency- optimized) GC

<comment><USER20> Can you link to more info about that latency-optimized GC?

<comment><USER21> Discussion here: [https://www.reddit.com/r/haskell/comments/cp21wg/shorter_gc_...](https://www.reddit.com/r/haskell/comments/cp21wg/shorter_gc_pauses_coming_to_ghc/)

</comment></comment></comment><comment><USER22> How come none of the mainstream static type systems support dependent types? On paper they seem like such a neat idea for defining constraints and preventing bugs. I heard Scala and Haskell have optional/partial support for them, so I suppose it takes a pretty sophisticated type system to begin with?

<comment><USER13> To implement dependent types, your type system must go much deeper into the theorem prover territory than is normal in mainstream imperative programming languages (whose type systems are often more or less ad-hoc rather than based on rigorous theory). Furthermore, dependent types break the fundamental property that the relationship between types and terms is one-directional: types constrain terms but not the other way around.

As one example, C++ has had non-type template parameters (types parameterized by values) for a long time, but only for compile-time constants. AFAIK there have been no formal proposals to introduce full-blown dependent types, rather the focus has been on improving the facilities for compile-time term-level computation.

</comment></comment><comment><USER23> I spent a long winter understanding dependent types followed by a short summer forgetting everything.

Anyway, I'm here for the koolaid.

<comment><USER24> I'm curious which language/approach did you take. I recently picked Idris with the book Type-driven development in Idris and so far I'm enjoying the ride (I have some experience in functional programming but not in Haskell).

</comment></comment><comment><USER25> Previous discussion: [https://news.ycombinator.com/item?id=18703245](https://news.ycombinator.com/item?id=18703245)

</comment><comment><USER26> Err... the problem with this is that the size of a list/array is sometimes determined at runtime. This means that if you use dependent types, you can't determine whether a program is correctly typed until you run the code.

<comment><USER27> Not at all. The verification is symbolic.

<comment><USER26> Let's say we're creating an array of strings separated by newlines obtained from reading a file. Call this arr[n] where n is determined at runtime.

Now let's have String index(arr:int[], i:(Fin(arr):int)), where FinInt(arr) is a dependent type that is an integer between zero and the length of the array. As the code is compiling, we have this

int i = 24951; String str = index(f, i);

The file exists in the future after the compilation. If the future file has at least 24951+1 lines, then the compiler can verify that i < n and that i is correctly typed. But if the file is short, then the type of i is incorrect. So at compile-type the type of i is indeterminate.

<comment><USER28> you get a compile time error saying f isn't known to have enough entries, and you resolve it by adding a decidable check that produces a proof that it does. (the check at runtime is just >)

</comment></comment></comment></comment><comment><USER29>
        bullshit :: Haskell -> DependentTypes -> Sunglasses -> Blockchain

</comment><comment><USER30> Lisp is like a religion. Once you get it, you cannot help yourself spreading the Word.

</comment><comment><USER31> > Haskell, at its core, is simple: it is just a polymorphic lambda calculus > with lazy evaluation plus algebraic data types and type classes.

No, it's not, if you can say this sentence without laugh at it, it is because you developed a deep understanding about all the core concepts, meanings, semantics and most probably now you know how to exploit them for their appropriate usage to solve even more complex problems.

<comment><USER32> It's simple as opposed to complex, not simple as opposed to difficult.

<comment><USER31> Three different areas of computer science, highly related to mathematics AND interrelated. Don't you think these are not just difficult but also complex since all their rules are combined and compose?

<comment><USER32> I would put it like this: Haskell derives from (relatively) simple axioms/concepts that have a rich and complex interplay.

<comment><USER31> And such rich complex interplay isn't exactly what makes things complex? Interplay plays as synonym for complex in that sentence. Any complex system could be broke down in simple axioms and some concepts and still be complex.

By the way I got severely downvoted for an opinion on what is complex and you were the only one open for speak. Thank you for making a better HN somehow.

<comment><USER32> "Any complex system could be broke down in simple axioms and some concepts."

This is the crux, I don't think that's generally speaking true. I don't think Java and C++ could be broken down into a few simple axioms and concepts in the way Haskell can.

Think design by committee, where you often end up with hundreds of concepts and behaviours.

Happy to talk.

<comment><USER31> Java can do it for sure (at least it was originally thought to be this way). With C++ I think you really found the exception that makes the rule since it was built by adding features on top of features without end or direction. I can agree that there are systems which behave with more elegance than others, with fewer exceptions and principles and more regular moving parts, with reciprocal rules or consistent approaches, for example Java on its origins what sort of simple. Now it is more a mess than ever before.

</comment></comment></comment></comment></comment></comment></comment><comment><USER33> Functional programming was a fad and it's going out of fashion (again).

It gives you rerefential transparency at the expense of real modularity.

Real modularity can only be achieved through proper separation of concerns. The best way to achieve that is by categorizing system state and system logic and allowing chunks of logic to be colocated with the relevant parts of the system state. This is what OOP excels at.

With functional programming, you cannot colocate module logic with module state so you often end up with a large monolithic state store on one side of the system and logic which is completely decoupled and sitting on the opposite side of the system... Then the challenge is to apply functions to various relevant parts of the state to transform it in a referentially transparent way.

The modularity problem then comes when you need to make a change to the schema/structure of the state; whenever you change the structure of the state, you need you need to search through your logic to identify all the parts of the logic which depend on that state and update them to work with the new structure. This is a massive problem and leads to what OOP developers call spaghetti code.

<comment><USER34> I'm guessing you've never done any Haskell programming. I don't know why you think FP people don't practice separation of concerns (they do), why you can't put state and the functions that manipulate that state in the same file (you can) or that a type-checker can't spot all the places you need to modify when you change a data structure (it does).

Also, you seem unaware of the real restrictions on modularity caused by eager evaluation.

<comment><USER33> In that case it is not pure functional programming because you are colocating state with logic. Functions in that file can mutate the state within that file; this means that it's only functionally transparent within that file but not from the outside.

If you need to store state inside of that file, then it means that you are using it to affect the behaviour of functions which are exposed to the outside... Also, this approach would be sub-par because you would be constrained to singleton modules.

What you described sounds like a Haskell programming anti-pattern. It sounds like a feature which was hacked on top to allow Haskell to emulate OOP languages without actually doing OOP.

Also, lazy evaluation is a separate topic. OOP languages also support lazy evaluation.

<comment><USER11> What source code files you happen to put declarations and definitions in has nothing to do with functional purity.

Think of it this way:

An array append function which adds an element to the input array is not purely functional.

An array append function which returns a new array with the new element appended is purely functional.

The same function applied to the same input will always return the same value, and won't cause that to break for any other functions.

Of course, this makes things such as IO tricky and yo ideally want to minimize and isolate the places where this happens on a lower level.

Haskell solves this with monads, which we have seen is a big hurdle for many developers. I personally think Idris's effect system[0] is a lot easier to deal with, but would be curious to see other approaches.

[0]: [http://docs.idris- lang.org/en/latest/effects/index.html](http://docs.idris- lang.org/en/latest/effects/index.html)

<comment><USER33> >> An array append function which returns a new array with the new element appended is purely functional.

>> The same function applied to the same input will always return the same value, and won't cause that to break for any other functions.

I think this is the essence of why a lot of developers use functional programming but I think that in this case functional programming is not a solution to the real problem which is an architectural problem.

If the relationship between different components in your system is clear and hierarchichal, you should never need to keep the same data/array in two places. You can come up with simple abstractions so that you only ever have one source of truth for each kind of state. That means you can read it anywhere but only write to it in one place.

I think that functional programming cannot solve this root problem, you will just end up with different symptoms. For example, instead of mutating a single array in unexpected ways, in FP, if you have multiple sources of truth, you might end up with multiple conflicting copies of the same data. Same root problem and it's just as difficult to identify and debug as in OOP, just different symptom.</comment></comment></comment></comment></comment>


Ask HN: "Best" Functional Language for the Web (key on Performance) - <AUTHOR> Hey. I'm planning on developing a free web game as a hobby project. The game will have quite a lot of calculations as it will rely heavily on fractal generation, pseudo variants and other forms of generation on the fly. But without going to much in details (as I'm still in the early prototyping phases) I would like to know what these days the best functional language for the web is?
I only ever do web development for hobby projects, as I'm a developer for personal computers and embedded systems in my professional time. I like to develop in Functional Languages as It fits best with how I think and come up with  solutions for my problems. Besides one web project that I developed with Clojurescript I don't have much experience with functional languages for the web though. Which brings me to the question...
What functional languages do you recommend for the web? Clojurescript, Elixir, Erlang, or another one? Key elements I look for is completeness of libraries available and performance.
Thank you upfront. <comment><AUTHOR> The main problem that i had with Clojurescript was that it seemed to be quite intensive even for the simple puzzle game that I made. Note that it may be because I hacked the program in one night and probably raped the language horrible. Which is why I'm still open for Clojurescript suggestions by people who have good experiences using it.

<comment><USER2> I've been using it in production for a number of applications for about 6 months now and haven't seen any performance issues. Prismatic [http://getprismatic.com/](http://getprismatic.com/) and CircleCI [https://circleci.com/](https://circleci.com/) both use ClojureScript for their front-ends. CircleCI open sourced their front-end here [https://github.com/circleci/frontend/tree/master/src- cljs/fr...](https://github.com/circleci/frontend/tree/master/src- cljs/frontend) as you can see it's a decent size app, and Prismatic have blogged about Om and performance here [http://blog.getprismatic.com/om-sweet- om-high-functional-fro...](http://blog.getprismatic.com/om-sweet-om-high- functional-frontend-engineering-with-clojurescript-and-react/)

In general, there should be very little overhead compared to regular JavaScript once the advanced compilation option is used.

</comment></comment><comment><USER3> I'm surprised nobody mentioned elm*

*[http://elm-lang.org](http://elm-lang.org)

</comment><comment><USER4> Erlang is not for computationally intensive stuff - but it could easily be used to control something that is, like a C program.

<comment><AUTHOR> Oh i didn't think about the possibility about interfacing to a native compiled program. Interesting approach.

</comment></comment><comment><USER5> I like Scala because of the amount of Libraries, Concurrency Primitives available.

Algebird is one of my favorite projects of all time.

<comment><AUTHOR> Fact that it supports mathematics so well is quite handy. Question is though, does it allow me to develop my game without people needing to download additional plugins?

<comment><USER5> Well, if you get the build process right. It takes some time for the setup, but I was able to Google it and get it right.

I use SBT, it works rather well, manages my dependencies right.

<comment><AUTHOR> Oh sorry, I think we have a miscommunication. What i mean is, doesn't compile Scale to java? So doesn't that prevent people from playing the game in their html5-enabled browser in case they don't have a java plugin or sth similar?</comment></comment></comment></comment>


Apple has been blocking Telegram iOS updates since mid-April - <AUTHOR> https://telegram.org/faq#q-what-about-gdpr <comment><USER2> It is weird that reason for rejecting an update can not be found anywhere. Apple always provide clear reason why they rejected an update.</comment>


In Japan, an Odd Perch for Google - Looking Up at Yahoo, the Leader - <AUTHOR> http://www.nytimes.com/2009/11/30/technology/internet/30google.html?_r=1&hp=&pagewanted=all <comment><USER2> Even the Geocities version for Japan is still online.

But google need not be too worried, the mother ship is in serious problems and when Yahoo! will bite the dust Yahoo japan will either go with it or their minority stake will be sold to the highest bidder.

Googles rise in Japan has been slow but steady, and in 2009 to date they've outperformed yahoo.co.jp with a factor of 3 in growth.

A similar thing is happening in the Netherlands with Hyves.nl and Facebook.com. Facebook is still behind but growing steadily, hyves is still top in the segment but it is only a matter of time. (unfortunately, I think that it is great to have some diversity).

</comment><comment><USER3> I knew this story looked familiar; it's because TechCrunch covered it over a year ago.

[http://www.techcrunch.com/2008/08/23/3-reasons-why-the- inter...](http://www.techcrunch.com/2008/08/23/3-reasons-why-the-internet-in- japan-is-ruled-by-one-single-company-yahoo/)

Unfortunately, it's a mis-leading non-story. Yahoo! controls 33% of Yahoo! Japan allowing a Japanese company to hold a larger share. The result is that Yahoo ultimately worse off than Google (who gets 100% control/revenue from the market share they control).

The worst part is that Yahoo's strategy is actually failing them. The story from a year ago cited a larger market share for Yahoo (and it still wasn't a good deal back then, compared to what Google had). The article fails to report than Google's changes (many sound like terrible ideas to me personally) are working in Google's favor.</comment>


Voting-Machine Maker to Princeton Researcher: 'Hands Off' - <AUTHOR> http://blogs.wsj.com/washwire/2008/03/18/voting-machine-maker-to-princeton-researcher-hands-off/?mod=googlenews_wsj

<comment><USER2> Electronic voting, properly engineered does have the potential to work, but this kind of lack of transparency absolutely kills any desire I have to see this technology ever used again. Period. It's just too much of a black box and I don't see how to change that.

<comment><USER3> Besides having a gruesome case of election fraud that may or may not even be detected?

<comment><USER2> Agreed. That is the biggest flaw as far as I can tell.</comment></comment></comment>


Absorbed device users oblivious to danger - <AUTHOR> http://www.sfgate.com/crime/article/Absorbed-device-users-oblivious-to-danger-4876709.php

<comment><USER2> The "device" in question here is smartphones or iPods, apparently. I was hoping for penis pumps or something even more exotic: when I first read the headline, I read "(Absorbed device) users ...". That is, I thought that some medical thing where one actually absorbs the entire device was the problem.

My feeling of having a jet pack future stolen from me is even more profound: no absorbed devices for you, prole!

</comment><comment><USER3> As a daily commuter with technology, I understand the desire to create a personal bubble and tune out your surroundings. That's one of the advantages of not driving.

Insert gameboy, walkman, newspaper, book, etc in place of phones etc and the article is the same.</comment>


Ask HN: How you wake up? - <AUTHOR> Do you guys jump of the bed when the alarm goes or push the snooze button a couple of times or read something or surf or plan or meditate on the bed. I'm struggling to wake up in the morning that's why I asked to the hackers of the galaxy. <comment><USER2> I have come to accept my schedule. I work afternoon/evening shift (3 - 12 AM) and after work, I cannot sleep at all. I used to beat myself up for not "getting to sleep early" and waking up late. However, once I changed my mindset, I really don't mind anymore. _We_ are a household that sleeps during the early part of the day, and we are an afternoon/evening kind of people.

So now, I work on my side projects and do whatever I got to do between the hours after 12 AM and before 5 - 6 AM. Once this time begins to approach, usually when I start to see hints of the sun, I prepare to sleep. I end up sleeping anywhere from 10 AM - 1 PM. And I don't mind at all.

I have embraced the fact that I can't sleep after work. Sometimes, if I have to work an earlier shift, I will just train myself to go to sleep earlier, and I might eat some almond butter or take some melatonin gummies to help aid me in sleep.

If I do set an alarm, I usually set two: one to remind me that I'm alive. The second to remind me that I have to get up. The first is normally set an hour beforehand, while the latter is an alarm set around a half hour before I have to actually wake up to let me know: Seriously, get up.

I sometimes still beat myself up for being so lackadaisical -- like I've been having to get an oil change for at least a week now, and I just can't seem to get up in time. But eventually I get myself in gear, bite the bullet, wake up a little earlier, and do what I have to do during those hours I would usually be sleeping.

<comment><USER3> >If I do set an alarm, I usually set two: one to remind me that I'm alive. The second to remind me that I have to get up. The first is normally set an hour beforehand, while the latter is an alarm set around a half hour before I have to actually wake up to let me know: Seriously, get up.

Would you benefit from an extra half an hour of uninterrupted sleep instead of setting two alarms? I find myself worse off in the morning if when I set two alarms an hour apart rather than setting a single alarm.

<comment><USER2> I need the first and second alarm because if I don't set 2 alarms, I'll actually turn off whatever alarm there is and go right back to sleep. The second one tends to serve as a warning and I might hit snooze once, but that's all that is necessary, usually. I've set one alarm and slept right through it. I guess its a reminder to me to take life more seriously on the second one.

<comment><USER4> I use an alarm clock app on my phone (I Can't Wake Up!) which has an option to force me to complete small tasks (simple math problems in my case) to ensure I'm awake enough so that I don't turn off the alarm and go right back to sleep.

</comment></comment></comment></comment><comment><USER5> My kids wake me up. Best alarm in the world. Can't snooze either :)

</comment><comment><USER6> I have a raspberry pi with mopidy connected to my stereo. There is a neat plugin called alarmclock that you can setup to choose a random song from any playlist provided by mopify. I usually use 666 paradox [1] if I really need to wakeup, it also helps that you cant easily turn it off without standing up.

[1] [https://www.youtube.com/watch?v=hxMmsGVzzb8](https://www.youtube.com/watch?v=hxMmsGVzzb8)

</comment><comment><USER7> For me, I need at least 6.5 hours of sleep to be mentally productive. What I do is set the alarm for 7 hours later from the point I go to bed. I realize it can take a little bit of time to fall asleep. I also avoid any caffeine past 3 pm.

I do not jump out of bed as I ended up getting an injury one time from the quick movement of my knee.

When I do get up, I drink a glass of water and get dressed right away and go for a 2 mile fast walk.

This gets my blood flowing and allows me to work out things on my mind.

</comment><comment><USER8> I wake up 5:30am every single day except Sunday.

I never snooze my alarm clock. I put the phone away from me so I have to get up to it. If it's arm-reachable, the snooze it is :)

Morning are really slow for me intentionally, I usually make myself a cup of coffee and sit down for about 30-40 minutes. Watching TV or something like that.

Depending on my level of injury, I might stretch a bit and do some morning Yoga [https://www.youtube.com/watch?v=K-Ina_WW4Yc](https://www.youtube.com/watch?v=K-Ina_WW4Yc) This one works best for me.

I ride my bike 4-5 days a week and the rest of my morning depends whether I bike in the morning or in the afternoon.

Struggling to wake up (for me) means I am missing some nutrition, I try to keep a very natural and healthy diet. I found that if I keep up with it, I wake up much easier.

For context. I have 3 kids (20m - 7y old). I usually wake up about an hour before the first one wakes up.

</comment><comment><USER9> I built a sunrise alarm clock. It's just two ikea lamps, two lamp dimmer modules, and a SmartThings Hub. The lights start dimming-on at 6:37 every morning (30 minutes 0-100%). I do have my alarm on my phone set still, but I'm normally up before it goes off, it's more a reminder to get out of bed on slow days. This setup works great for me, I've had it going for about three years now, I'm, no longer shocked to awake-ness by an annoying alarm rather as I slowly wake up as I become more aware of the light in the room.

FD: I'm just about to start working for ST, but I've had this setup for years already.

</comment><comment><USER10> I ensure I get to bed around 11:30pm so that I can wake up at 6:30am (M/W/F). I use one alarm which sounds like birds chirping and another alarm for 6:40am. 80% of the time I wake up at 6:30am and the other 20% is at 6:40am. My routine once I get up is to brush and get to the gym by 7am.

On T/Th/S/S, I wake up naturally around 6:30am but have my alarm set to 8am which is usually when I'll actually wake up. If I do wake up early, I'll do some light exercise like walking/running/swimming. I don't have to get to work till 10am so the morning is all mine to do as I see most productive.

</comment><comment><USER11> I wake up naturally and start my day remotely and the time I begin work isn't fixed.

I am one of those people that really needs 8-9 hours of sleep per day. If I get 4-6, my day really suffers from it.

If I wake up early, I like to "take the morning" [1] and reclaim it for whatever personal desires, but usually reading on the Kindle, meditating, and taking the time to brew a nice coffee by hand.

I only use an alarm clock if I have a meeting before 10 am.

At night I try not to look at any blue light more than 1-2 hours past sunset.

[1]: [https://backchannel.com/how-i-got-my-attention- back-c7fc9297...](https://backchannel.com/how-i-got-my-attention- back-c7fc9297d347)

</comment><comment><USER12> I recently moved to San Diego from Central Europe and because some of my projects are based in Europe, my mornings (well if we can call them like that) are a bit tough :) as I wake up at 3:35 AM in order to be available to my European team during noon.

It is very surprising though, how a body can adapt to situation like this and after some adjustment period you feel rested even after 4-5 hours of sleep. The key for me is:

1\. do a physical activity at least 4-5x times per week - swimming or running. 2\. use Sleep Cycle app for iPhone 3\. take my favourite DMAE pills 4\. eat healthy

</comment><comment><USER13> Please try, if you can, to get your phone out of the bedroom. Turn the ringer up if you need to receive calls at night. If you need an alarm, use an old fashioned alarm clock and put it as far away as possible.

If you are not in the habit of making your bed, making your bed is a quick win that can get your day off to a good start (as you have accomplished something, albeit small but it will be a habit).

There are many yoga stretches that can be done lazily while in bed. Like child pose.

</comment><comment><USER14> Lately I've been waking up and staying in bed for a little while, anywhere between 20 minutes in bed to two hours, especially if I'm low energy and without coffee.

On workdays I have no time for myself until I hit the road. I rush through a shower without fully waking up. I'm awake, but I'm usually focusing on getting clean first. Sometimes I have time for a small breakfast, maybe coffee, but I don't center myself until I get picked up by car pool.

</comment><comment><USER15> I generally wake up when 5 kilos of fur jumps on my bladder and shouts "MEOW!"

However, in my life before cats I really struggled to wake up for a 9-to-5 until I got an alarm with a lamp that lights up very gradually, simulating sunrise. I was surprised at how well it worked and definitely recommend them.

I had a Bio-Brite model, which I don't think are made nowadays but google for "alarm clock lamp sunrise" and there are lots of alternatives.

</comment><comment><USER16> I feel kind of silly writing this, but when I started sleeping more (~8 hours/night) I stopped needing an alarm click. I naturally rise around 0700~0730 every day.

I try to keep other morning activities (web browsing, reading, etc) separate from time in bed. I go straight to the kitchen to boil water for coffee.

</comment><comment><USER17> My last few jobs have had flexible hours, so I wake up naturally every day. If I feel I can go back to sleep, I will.

Getting enough sleep every day and never having to force myself out of bed makes a huge difference to my work performance and general mood, to the point where I don't think I could do a job without flexible hours.

</comment><comment><USER18> I didn't really start waking up early on a regular basis until I started making my spouse lunches in the morning before she left for work. There is something about the sense of responsibility that gets you on your feet.

</comment><comment><USER19> I used to set the alarm to 7:45 and 8:00 (to be out of the door by 8:10). The ability to lightly sleep the last 15 minutes is very refreshing.

These days i'm self-employed, so pretty much gave up on alarm clocks and go to sleep and wake up whenever it happens. Tend to drift forward about 30 minutes every day...

</comment><comment><USER20> Bed shaking/vibrating alarms have worked best for me. They tend to have large digital displays, so you can place them far enough from the bed that you need to stand up to reach them.

</comment><comment><USER21> I wake up an hour before sunrise, open the curtains, go back to bed. When the sun is up it shines brightly into my room it's much easier to wake up.

</comment><comment><USER22> For me, I drink a pint of water before bed.

And then I balance a pint of water on my phone/alarm, which forces me to drink that when I wake up.

</comment><comment><USER23> My routine-following border collie whimpers until I get up and take her on a walk. Not much opportunity to snooze...

</comment><comment><USER24> One leg at a time

</comment><comment><USER25> Naturally</comment>


Social Capital 2018 Annual Letter [pdf] - <AUTHOR> https://s3-us-west-2.amazonaws.com/socialcapital-annual-letters/Social+Capital+Interim+Annual+Letter,+2018.pdf <comment><USER2> I would like to commend the readability and simple structure of the Annual Letter with minimal jargon and getting straight to the point. Secondly, interesting to see the stress on AI parallel to Maya Son's SoftBank Vision Fund. Thirdly, Family offices comprising the majority share is quite enlightening.

<comment><USER3> Agreed. Very easy to read and understand. Family offices as investors isn't surprising, most of the gains go to the top .NNN% and they are running out of places to invest.</comment></comment>


Ask HN: What are some good, freely available / cheap readings on AI algorithms? - <AUTHOR> I've been getting tunnel vision while working on a big project over the past few months, and I'm looking for something I can read and work on in 30min - hour chunks once a day to progress my understanding in another area. Any suggestions would be helpful! <comment><USER2> You could always go "old school" and read from the old MIT "AI Series" papers. This stuff goes back to basically the very, very beginning of AI:

[http://publications.csail.mit.edu/ai/](http://publications.csail.mit.edu/ai/)

Also consider that the IJCAI (International Joint Conference on AI) publishes all of their past proceedings online. Of course, going to that site is like drinking from a firehose and I can't give you a good curated list of the best papers to read, but maybe somebody else has such a list.

[http://ijcai.org/Past%20Proceedings/](http://ijcai.org/Past%20Proceedings/)

If you want a book with some interesting stuff in it, here's one for you:

[http://wps.aw.com/wps/media/objects/5771/5909832/PDF/Luger_0...](http://wps.aw.com/wps/media/objects/5771/5909832/PDF/Luger_0136070477_1.pdf)

You might also look at the "classics" section on AITopics.org: [http://aitopics.org/classics](http://aitopics.org/classics)

Unfortunately some of the links are to pay-walled papers, so not too helpful if you aren't looking to spend money.

<comment><AUTHOR> Thanks for the recommendations!</comment></comment>


Employees who rate their managers poorly are 4x more likely to interview - <AUTHOR> https://twitter.com/SoapBoxHQ/status/1182339548736638976 <comment><AUTHOR> Full article here: [https://builtin.com/company-culture/company-culture- statisti...](https://builtin.com/company-culture/company-culture-statistics)

</comment><comment><USER2> Also, water is wet...</comment>


Backups added to Linode API alpha - <AUTHOR> https://engineering.linode.com/2016/06/22/Backups-Added-6-22-2016.html <comment><USER2> Any chance Linode can shorten the time it takes to update the zone records? We use Linode for spinning up instances, but we're having to look elsewhere for DNS due to the delays (15 min or so)

<comment><AUTHOR> Hey! I'll bring it up in discussion and see if there's anything we can do to make this easier for you. In the meantime, have you thought about using your own authoritative DNS servers?

<comment><USER2> Thank you. We hadn't, but that's a great suggestion. Might try that.</comment></comment></comment>


Fancy Hands' Terms Of Service Sucks - <AUTHOR> http://startupharbor.me/2014/05/07/fancy-hands-terms-of-service-sucks/

<comment><USER2> Given those terms I would tell them to bite the wall. Unless you really really need their service.

Incidentally, this is petty but it drives me bonkers... The phrase from your post "I reached out to customer support". I realize this kind of phrase is in common usage in offices throughout the country but we are not "reaching out" we are not "sharing". Those are things we do with our close friends and spouses.

What we are doing in this case is "contacting". It is after all business. Feely speak serves only to cheapen real "reaching out" IMHOP.</comment>


Nettime – networked cultures, politics, and tactics - <AUTHOR> https://nettime.org/ <comment><USER2> One of the few remaining forums with articulated content.</comment>


On anonymous feedback - <AUTHOR> http://www.gabrielweinberg.com/blog/2011/06/on-anonymous-feedback.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+yegg+%28Gabriel+Weinberg%27s+Blog%29&utm_content=Google+Reader

<comment><USER2> People who send me pissed off feedback are the ones who often leave out their emails and names.

They do it because they're afraid of retribution, but in reality I love and need those people most.

If they're THAT angry about something, then it's a good sign I need to fix it. The trouble is, when they're angry, they don't include all the details I need to fix what's bothering them.

I'd love to email them back and ask for clarification, but their anonymity kills that option.

<comment><USER3> I wonder if something like Wufoo's "emotional state" field could help get you more detailed feedback.

[http://particletree.com/features/on-asking-users-for- their-f...](http://particletree.com/features/on-asking-users-for-their- feelings/)

</comment></comment><comment><USER4> > Many bugs involve the specifics of your browser, such as what extensions you > have installed, what DuckDuckGo settings you have turned on/off and in many > cases what query you performed. I've lost count at how many anonymous emails > I've received where I don't have enough information to do anything > worthwhile in response.

Much of that information could be collected automatically when the support request is sent, assuming the user is logged in.

I greatly appreciate that DuckDuckGo doesn't track me. However, checking a (default unchecked) box "Attach my browser, extensions, and DuckDuckGo settings to this email (recommended)" would not break the user's trust, would be much easier than hoping that the user typed all this information into the email, and would increase your success rate at fixing these problems.

Sure, these data points (like font data) could potentially be used to identify a user who wanted to be anonymous, but users who care will be reassured by the empty check box that you won't.

<comment><USER5> We used to have an optional checkbox that sent some of this info, but in practice the times when it was needed did not correlate with the times when it was checked.</comment></comment>


Knowledge of fractions and long division predicts long-term math success - <AUTHOR> http://www.sciencedaily.com/releases/2012/06/120615114057.htm <comment><USER2> The way mathematics is generally taught, once you fall behind you're basically done. If you get really lost in 5th grade math, you'll spend the next 5-7 years (depending on whether your school system requires you to take a math class every year of high school) barely scraping by and getting promoted every year to a new math class while falling ever further behind. Finally, you'll reach the happy point where despite 10-12 of mathematical instruction, you basically don't know any mathematics past basic operations. Much better to adapt to the level of the learner and the speed they can work at - I'd rather have someone genuinely understand all the material that they've nominally learned than get barely passing grades on what looks like more material on paper. Unfortunately, a system of discrete math classes broken up by grade doesn't work any better for slow math learners than for gifted math learners.

</comment><comment><USER3> I've mentioned before here that I have taught college, high school, and elementary school. Also adult remedial education. The findings here are well known and have been for a long time, they come up all the time in the placement exams used in community colleges. Most people can do addition, subtraction and some multiplication. Fractions, long division, and everything that follows is a complete void for the majority of american adults.

Their conclusions are wrong though. It's not that they weren't taught fractions well enough. It's that the educational system is broken. Kids start doing badly in math at fifth grade. The reason is that's the age where they are old enough to start to realize on some level their time is being wasted, the schools are exhausting and the materials probably useless. Too much time is spent in school pandering to the slowest student. Classes are no longer segregated by ability. Fast students become bored, slow students never catch up, and the rest just misbehave or check out mentally.

To fix the problem, you don't need to push fractions and long division (which, true, most elementary school teachers do not really understand) harder, you need to prevent the students from burning out and losing interest by age 10.

We don't see these results in adults in other countries because they don't burn out their students at such an early age.

The US schools are unlikely to reform for bureaucratic and political reasons. Some argument will be contrived to link fractions to pay, or require higher salaries and funding in order to teach fractions properly. Perhaps yet more computers in the classroom will be proposed as the answer: truckloads of iPads for everyone! This will not solve the problem though.

If you want your kids to learn math properly, tools like Khan Academy are good, especially their web based hierarchical exercise software. This allows students to proceed at exactly the pace they need, independently of every other student.

If you are starting from the beginning, use a sensible curriculum like the Singapore Math series. By fourth grade though you should have a teacher who understands math better than the average american to assist students with it as needed. This is not possible to have in most school districts and is not going to change since people are unwilling to basically burn the schools to the ground and start over (fire everyone and requiring teachers to pass competency exams before rehiring, also eliminate 90% of bureaucracy and rules that impose restrictions on teaching). So things will continue as they are in the schools.

<comment><USER4> I disagree heavily with your argument. If the student is struggling with fractions and long division, I don't think you can blame schools "pandering to the slowest student" for such a problem. If they are struggling so much with basic concepts, I'd have to argue that they are the slow students.

> We don't see these results in adults in other countries because they don't > burn out their students at such an early age.

If you've looked at education in other countries, I don't understand how you can say this. Many places push their students far harder than the US (for example, Singapore, Japan, South Korea). Rote memorization is pushed far harder as well. How is the material that is taught any less "useless" in the eyes of students in these countries?

I think culture definitely comes into play here. I'm not going to say incompetent teachers don't exist or that there isn't too much bureaucracy in schools; there clearly is, however, laying the blame entirely at their feet is being dishonest. I think culture and parental expectations play a larger part than many people want to admit.

</comment></comment><comment><USER5> Performance on fractions and long division predicts math "success" because those tasks embody math education's emphasis on procedural skills over conceptual understanding.

Tokenadult's comprehensive comment includes the 12/13 + 7/8 gem that sums up the problem. Kids see 12/13 + 7/8 and, if they're "good" at math, start turning the procedural crank they've been taught. (If they're "bad" at math, they freeze with a defeated feeling that there are too many procedural steps to remember.)

Get kids to see 12/13 + 7/8 primarily as "almost one plus almost one" (as thaumasiotes describes), and only secondarily as the beginning of a tedious procedure, to make substantive progress in math education.

<comment><USER6> A few years ago there was a long article about math education in USA by Russian math professor that immigrated. He blamed lack of "word problems" solved by intuition and guessing and substituting values at first, only then using algebra.

I can't find it now, but it showed exactly the same problems - math was just pattern mathing problem for most students - no real understanding.

</comment></comment><comment><USER7> "We need better teaching of fractions" sound like a dangerous cargo-cult solution to the problem of poor understanding of math. If the teaching of fractions would be better, than the understanding of fractions would simply become a worse predictor of long term math success.

The main problem of math teaching is not, that students do not understand fractions (they could easily learn them later), but that they do not understand that math is a (sometimes really helpful) way to think about problems.

</comment><comment><USER8> I haven't read the paper itself, but that text, to me, does not give a _"clear message [...] that we need to improve instruction in long division and fractions"_.

The text talks about correlation between the two, but does not give any arguments for causation. Judging from the title of the paper ("Early Predictors of High School Mathematics Achievement"), neither does that paper.

<comment><USER9> People who derailed in 5th grade are probably unlikely to get back on track because education in the higher classes stands on the shoulders of the previous classes.

If it not a causation, this may also mean that "non motivated students" never care about math. Either in 5th grade or in high school or later.

Or maybe it is a combination of both. The article only shows correlation. But how can one study causation without destroying the futures of students?

<comment><USER8> Make two groups; give one of them some extra and/or supposedly improved math schooling. Check their math grades and, years later, their success in higher education. See how much they correlate.

</comment></comment></comment><comment><USER10> > The clear message is that we need to improve instruction > in long division > and fractions

I guess it's my turn to be the guy who says `correlation does not imply causation'. It's clear that something in math education is broken, but I feel like the more important point lies in the next sentence:

> At present, many teachers lack this understanding [of rudimentary > mathematics].

I feel like this is much more important than a renewed emphasis on fractions/long division.

Full quote for context:

> "The clear message is that we need to improve instruction in long division > and fractions, which will require helping teachers to gain a deeper > understanding of the concepts that underlie these mathematical operations. > At present, many teachers lack this understanding. Because mastery of > fractions, ratios and proportions is necessary in a high percentage of > contemporary occupations, we need to start making these improvements now."

</comment><comment><USER11> Poor teaching of fraction arithmetic in elementary schools has been a pet issue of mathematics education reformers in the United States for a long time. Professor Hung-hsi Wu of the University of California Berkeley has been writing about this issue for more than a decade.

<http://math.berkeley.edu/~wu/>

In one of Professor Wu's recent lectures,

<http://math.berkeley.edu/~wu/Lisbon2010_4.pdf>

he points out a problem of fraction addition from the federal National Assessment of Educational Progress (NAEP) survey project. On page 39 of his presentation handout (numbered in the .PDF of his lecture notes as page 38), he shows the fraction addition problem

12/13 + 7/8

for which eighth grade students were not even required to give a numerically exact answer, but only an estimate of the correct answer to the nearest natural number from five answer choices, which were

(a) 1

(b) 19

(c) 21

(d) I don't know

(e) 2

The statistics from the federal test revealed that for their best estimate of the sum of 12/13 + 7/8,

7 percent of eighth-graders chose answer choice a, that is 1;

28 percent of eighth-graders chose answer choice b, that is 19;

27 percent of eighth-graders chose answer choice c, that is 21;

14 percent of eighth-graders chose answer choice d, that is "I don't know";

while

24 percent of eighth-graders chose answer choice e, that is 2 (the best estimate of the sum).

I told Richard Rusczyk of the Art of Problem Solving about Professor Wu's document by email, and he later commented to me that Professor Wu "buried the lead" (underemphasized the most interesting point) in his lecture by not starting out the lecture with that shocking fact. Rusczyk commented that that basically means roughly three-fourths of American young people have no chance of success in a science or technology career with that weak an understanding of fraction arithmetic.

Plenty of other mathematics teachers in the United States have noticed adult- age students who have trouble with elementary fraction arithmetic.

<http://www.brianrude.com/fractionsquiz2.htm>

Professor Wu has written other important articles about what needs to be reformed in United States mathematics education.

<http://math.berkeley.edu/~wu/Lisbon2010_2.pdf>

<http://math.berkeley.edu/~wu/NCTM2010.pdf>

<http://math.berkeley.edu/~wu/NoticesAMS2011.pdf>

<http://math.berkeley.edu/~wu/CommonCoreIV.pdf>

Other mathematicians who have written interesting articles about mathematics education reform in the United States include Richard Askey,

<http://www.aft.org/pdfs/americaneducator/fall1999/amed1.pdf>

<http://www.math.wisc.edu/~askey/ask-gian.pdf>

Roger E. Howe,

<http://www.ams.org/notices/199908/rev-howe.pdf>

Patricia Kenschaft,

<http://www.ams.org/notices/200502/fea-kenschaft.pdf>

and

James Milgram.

ftp://math.stanford.edu/pub/papers/milgram/milgram-msri.pdf

ftp://math.stanford.edu/pub/papers/milgram/report-on-cmp.html

All those mathematicians think that the United States could do much better than it does in teaching elementary mathematics in the public school system. Several of them identify lapses in teaching fraction arithmetic as a major issue. I think so too after living in Taiwan twice in my adult life (January 1982 through February 1985, and December 1998 through July 2001). Taiwan is not the only place where elementary mathematics instruction is better than it is in the United States. Chapter 1: "International Student Achievement in Mathematics" from the TIMSS 2007 study of mathematics achievement in many different countries includes, in Exhibit 1.1 (pages 34 and 35)

<http://pirls.bc.edu/timss2007/PDF/T07_M_IR_Chapter1.pdf>

a chart of mathematics achievement levels in various countries. Although the United States is above the international average score among the countries surveyed, as we would expect from the level of economic development in the United States, the United States is well below the top country listed, which is Singapore. An average United States student is at the bottom quartile level for Singapore, or from another point of view, a top quartile student in the United States is only at the level of an average student in Singapore. I've been curious about mathematics education in Singapore ever since I heard of these results from an earlier TIMSS sample in the 1990s. I have seen the textbooks used in Singapore (and have used those to teach my own children, including a grown child who is now a hacker) and own many of the textbooks used in Taiwan and China (as I read Chinese). The United States could plainly be doing better in elementary mathematics education.

The article "The Singaporean Mathematics Curriculum: Connections to TIMSS"

<http://www.merga.net.au/documents/RP182006.pdf>

by a Singaporean author explains some of the background to the Singapore mathematics materials and how they approach topics that are foundational for later mathematics study. I am amazed that persons from Singapore in my generation (born in the late 1950s) grew up in a country that was extremely poor (it's hard to remember that about Singapore, but until the 1970s Singapore was definitely part of the Third World) and were educated in a foreign language (the language of schooling in Singapore has long been English, but the home languages of most Singaporeans are south Chinese languages like my wife's native Hokkien or Austronesian languages like Malay or Indian languages like Tamil) and yet received very thorough instruction in mathematics. It would be good for the United States to take advantage of its greater degree of linguistic unity and childhood wealth to reach the educational standard of the top-performing countries in other parts of the world.

<http://www.pisa.oecd.org/dataoecd/50/9/49685503.pdf>

<http://www.pisa.oecd.org/dataoecd/17/26/48165173.pdf>

<comment><USER12> It seems strange that "2" was listed after "I don't know".

<comment><USER13> Most likely it wasn't that way on the test. They just saved it for last in the report.

</comment></comment></comment><comment><USER14> Let me call BS on this one

Does anyone remember how to do long division by hand today? I certainly can't

But math is much more than your "grocery shopping math"

You don't need a calculator for most of math. And I really find it difficult to correlate "how to do long division" in success in areas like statistics, number theory and even calculus, because it's mostly concepts, not "1+1"

<comment><USER15> I am not a mathematician and I do not do long division on any regular basis. I certainly haven't written it out in over a year.

But occasionally I have to think about whether a number like 365 is divisible by a number like 7, and I don't have a calculator or computer beside me. I can wait until I'm around electronics, or I can think:

"How many times does 7 go into 36? 5 times." "That makes 35, so now, there's 15 left." "How many times does 7 go into 15? 2 times." "That makes 14, so I'm at 364 -- one day is left over." "7 went into 365 52 times, with one left over."

That is a useful algorithm. You can use that to answer questions about the world. It seems reasonable that if you're not capable of accomplishing that, then you're not going to do well in an environment that requires you to solve problems.

<comment><USER14> I agree, and of course can do this 'approximation' by hand

(even though I may do it backwards sometimes, like, 365/7 ok, 365 looks like 700/2 so that's a start, or 7x5 = 35 so 7x50 = 350 so there goes)

What I meant to say is that math is not only about juggling numbers

</comment></comment></comment><comment><USER16> I wonder if this has to do with the spatial aspect. Americans use that awkward imperial system, which makes it really hard to easily chop up distances. Almost all other countries use the metric system, which makes it very easy to understand dividing lengths.

Remember that for ordering and numbers many people use a 2-dimensional line to represent things in their head.

<comment><USER17> The splitting out over more units is a little awkward, but it is usually possible to quickly divide imperial units by 2,3 and 4 (of course it is easy to divide decimals by 2 and 4, my point is that imperial doesn't lose this).

For people frequently working with medium distances, all they have to do is learn that a mile is 80 chain (for longer distances, decimal miles are about equivalent to decimal km).

</comment></comment><comment><USER18> I'm unfair judging this by the press article rather than the study itself but isn't that like saying kids who are smarter do better at math later in life? IQ tests of small kids are wildly inaccurate because of how kids develop at different speeds so how can you control for it?

But whatever argument they need to get to teach better maths to kids I'm all for it.

</comment><comment><USER19> What we need to do is throw away the idea that smaller class sizes are always better, at least for mathematics. I have nothing against primary- and secondary-school teachers--god bless 'em--but we are letting their egos get in the way of educating our children. If they don't really understand the material themselves--and many of them don't--they need to admit it and let their kids go to someone who does understand the material when it comes time to teach math for the day.

I don't care if there are so few people who both understand math and can teach it to children (and are willing to take the job) that all of our math classes consist of 500 students. If that's the case, bring in bright highschoolers (who also understand the material) either as volunteers or part-time workers to act as "floaters". Let the class consist of one highly-paid individual with a math degree and passable teaching ability and half a dozen low-paid teenagers who understand fractions and are good with kids.

Of course, this would require many adult schoolteachers to admit that, when it comes to elementary math instruction, they are totally unqualified. That's a hard thing for a teacher--or, for that matter, an adult--to admit.</comment>


Show HN: Fossa-cli – Fast and reliable dependency analysis for any codebase - <AUTHOR> https://github.com/fossas/fossa-cli?top <comment><USER2> This looks great, alas I am unable to test it.

When I try to sign up, they want write access to my repos, to the org repos I am a member off, etc. Let's make this clear: I am not giving to anyone write access to my repos and certainly not to other people repos. Read permissions should be enough. You want to add something to my repo? Do a PR.

So what remains, is to test the command line app without using the online service. But the documentation is bad, so I am not able to do that either. No docs for scala, when trying with go, I get cryptic errors, like 'no supported Go build tools detected' until I install a third party go binary (godep or govendor) and 'could not find Go project folder (maybe your Go build tool is not supported?)'.

The idea is great, the execution needs some work.

<comment><AUTHOR> Unfortunately, the permissions issue is a limitation of Github's Oauth API. There's no way to ask for "read-only" permissions using their current integration scheme.

You can, however get a FOSSA API key without signing up for Github -- just register with an email here: [https://app.fossa.io/account/register](https://app.fossa.io/account/register)

Thanks! I filed a ticket for sbt documentation here: [https://github.com/fossas/fossa- cli/issues/105](https://github.com/fossas/fossa-cli/issues/105).

For Golang, you need to be running the cli in a repo within your gopath; we should have some better feedback for it however. I opened another issue here ([https://github.com/fossas/fossa- cli/issues/106](https://github.com/fossas/fossa-cli/issues/106)), anything you can contribute?

<comment><USER2> Thanks for the quick reply! Happy to see I can test this without giving github access.

Still have some issues, hope I will work them out.

</comment></comment></comment><comment><USER3> I like that FOSSA scans FOSSA. Here's the link from the "license scan" badge on github: [https://app.fossa.io/projects/git%2Bgithub.com%2Ffossas%2Ffo...](https://app.fossa.io/projects/git%2Bgithub.com%2Ffossas%2Ffossa- cli/refs/branch/master/abc139975f7d6e9d8b43648782065bec02a9ffd3)

<comment><USER4> Imho, eating your own dog food is one higher virtues of software development (although I wouldn't recommend it in real life due to dog food vs human food quality standards).

Having to use your own product or process (eg, Github PR workflow) makes you aware of the problems and painpoints it might bring onto others, often resulting in better product.

<comment><USER5> The fact that it is so effective is IMO why so many open source development tools are much higher quality than non development tools.

</comment></comment></comment><comment><USER6> Impressive work. It takes courage to tackle the over-complicated compliance area - a headache to a lot of startup owners including myself. Thanks for simplifying the annoying compliance verification & maintenance processes and make it accessible to everyone.

</comment><comment><USER7> Fun fact, in Portuguese Fossa means cesspool but hopefully this was named after the animal ;)

<comment><USER8> I couldn't help but think: "For Open Source Software Analysis"

</comment></comment><comment><USER9> Nice looking website! I believe i've encountered some broken links:

\- the _" Upload Build Scan"_ button links to Readme on Github, is it intentional?

\- GitLab logo (under " _WORKFLOW TOOLS_ ") links to Bitbucket/Stash docs instead of [https://fossa.io/docs/integrating- tools/gitlab/](https://fossa.io/docs/integrating-tools/gitlab/)

And the constantly changing window title (" _Kevin says…_ ") makes me want to close the tab. Also:

 _> Install the latest Github Release using curl_

Nope.

</comment><comment><USER10> I don't get it - looking at the example at [https://github.com/fossas/fossa- cli?top#quick-start](https://github.com/fossas/fossa-cli?top#quick-start) \- that's hardly more telling than looking at the original dependency file?

Maybe there should be a (more prominent?) link to that rich, hosted example report :)

</comment><comment><USER11> > for any codebase

> Supports over 15+ languages & environments (JavaScript, Java, Ruby, Golang, > PHP, etc...)

The title here is overly broad, bordering on click bait. I suggest it be edited to "for several popular languages".

</comment><comment><USER12> +1 for Python ([https://github.com/fossas/fossa- cli/issues/13](https://github.com/fossas/fossa-cli/issues/13))

</comment><comment><USER13> XiZhao any links that explains tool like I am 5(in a programming sense)? The tool feels like of importance to my current java project.

</comment><comment><USER14> Step One: Get low level developers to upload evidence of major corporate license violations to your server.

Step Two: Sell evidence to legal firms.

Step Three: Profit.

This seems very risky from a company perspective.

<comment><AUTHOR> Kevin from FOSSA here -- I hope it's clear that this would be completely against our policies and business model. However, if you're truly worried about this, you can install a fully on-prem version of FOSSA. Use of app.fossa.io with fossa-cli is also an opt-in feature, so by default you're not sending us any data.

Secondly, we deal entirely with 3rd-party code, so the licensing issues and risks are already completely public. If there was truly a malicious actor, they would just scan popular third party modules and reach out to companies that had job postings or github pages that were active in those environments (i.e. scan npm packages and target JS developers).

But in the spirit of good development practices, "security by obscurity" hasn't proved to be an effective strategy. We'd prefer not to promote "legal by obscurity" either. :)

<comment><USER14> I don't see that as against your business model at all.

You could build up a large database of say, violations of Oracle licenses, then get Oracle to buy out your company.

You'd make a quick buck, and your users would be left holding the bag.

How do you mitigate against these type of threats to your users?

<comment><AUTHOR> I think it's pretty clear that extorting your customers is an awful business idea. ;)

<comment><USER14> That doesn't answer the question at all. What's stopping a big IP firm from buying your company for the database of license violations?

<comment><USER15> You can run an on-premises instance.</comment></comment></comment></comment></comment></comment>


Indian cabinet approves India's first manned space mission - <AUTHOR> https://timesofindia.indiatimes.com/india/cabinet-approves-rs-10000-crore-for-indias-human-spaceflight-programme/articleshow/67286623.cms <comment><USER2> I have no great knowledge of this sector but why is India investing so much here? Do they see it as potentially paying off like their IT sector somewhere down the road? How much of this tech is cheaper to engineer in India?

<comment><USER3> Well why should anyone do this? India can, and as the aphorism says, "[humankind] does not live by bread alone". In addition space travel is important today and why be beholden to other countries for a capability you could have for yourself? Just as an example, several countries have build or are building alternatives to GPS so that they can build something they can depend on and not risk being shut out by the USA.

It makes more sense for India to do this today than it did for the USSR to do it in the 50s. But I think we are all glad that the USSR launched the exploration of space!

</comment></comment><comment><USER4> And 97% people in India are poor by global standards [http://idronline.org/addressing-inequality-in- india/](http://idronline.org/addressing-inequality-in-india/)

<comment><USER5> Poverty cannot be solved by simply distributing these money to the poor instead

</comment></comment><comment><USER6> On one hand I totally applaud this effort by any country. On the other hand, my 2015 trip to India was enlightening. Culture shock is an understatement, and I'm not referring to the differences in food and tradition.

The poverty was mind blowing. Growing up in some projects in Nashville and going to school because school lunch was the only meal I'd get, I thought I knew what poverty was.

I remember coming back still somewhat shocked and thinking how trivial many of the issues are in the US that our politicians have spun up that now Americans are so divided over.

I'm not saying India shouldn't invest in space missions. Pushing the boundary of knowledge is a good thing. I just can't help and wonder if they should be solving these terrestrial problems first, just from what I saw there, even though I know solving those problems and going to space are not mutually exclusive.

<comment><USER7> I feel like this argument is brought up every time Indian government invests in anything. My two cents below with the full disclaimer that I have been fortunate enough to evade poverty most of my life.

I am not saying that the poverty issue and the sheer scale of it, as you mentioned, shouldn't be a top priority but it can't be the only priority. I am from India but have lived in the US most of my life and have to say that looking at both countries, unbounded welfare spending does not seem to solve the issue of poverty and we can't possibly expect that to work against a growing population. It may mitigate the scale of it in the short run but in the long run, investing in the economy seems to be a better way of reducing poverty.

I can't comment much to the merits of doing a manned mission vs other types of space missions but science investment vs poverty is not a great way for any government to prioritize spending. For me, balanced spending is the way to go.

<comment><USER6> I'm not in a position of a policy maker, but if I was, I would certainly give more weight to the social and cleanliness issues over space exploration. Again, I don't know the specifics of what the Indian government is doing or their particular budget, but having lived in poverty (no where as bad as in India), I want to make sure people are fed, have access to education, and especially so for children.

Like I said - the two are not mutually exclusive.

When you use the phrase unbounded welfare spending - I think ensuring kids are fed, have access to schools, and live in a non hazardous environment is key. Your use of that term sounds very generic to me, and I want to highlight there is far more nuance. Unbounded welfare spending sounds like something I would hear on Fox News, and so I take issue with that phrase.

<comment><USER7> >> When you use the phrase unbounded welfare spending - I think ensuring kids are fed, have access to schools, and live in a non hazardous environment is key. Your use of that term sounds very generic to me, and I want to highlight there is far more nuance. Unbounded welfare spending sounds like something I would hear on Fox News, and so I take issue with that phrase.

I didn't think of the negative connotation of that phrase so thanks for calling that out. I primarily meant that welfare spending should be sustainable. If welfare spending continues to grow as a % of revenue, then it could lead to excessive deficit and debt which can be bad in the long run. Its my personal point of view that balancing welfare spending with things like infrastructure/tech/science/education and ensuring those opportunities reach the less fortunate is a way of keeping it sustainable.

<comment><USER6> Yeah that makes sense. Agreed.</comment></comment></comment></comment></comment>


Ask HN: Why do YC-backed companies post anonymous job postings? - <AUTHOR>

More often than not, YC-backed companies early in their life cycle post jobs with throwaway accounts and gmail accounts. Why? What harm would come from saying "We're company X and we do so-and-so and we're looking for Django folks etc"?<p>Is there some strategic element at play in not divulging info up front? <comment><USER2> From the last few times this came up, these companies have not announced that they have been funded by YC and when they do it will probably make TechCrunch. They want that coverage when they have something to show, not just a hiring now page.

<comment><USER3> This allows the companies to control their own PR rather than let the media control the PR for them. A smart move and one that is recommended by YC.

</comment></comment><comment><USER4> While most of the time people overvalue secrecy, if you're entering a market where a competitor could quickly move in on your target market and make your entrance more difficult there are definite reasons for keeping quiet.Also if your launch strategy hinges on a unified PR campaign you need to keep everything below the radar.

<comment><USER5> Im thinking I agree with you. Startup founder here preparing for a secret launch for number of reasons. 1 to gain most market share right away. 2 our idea is easy to imitate. Do you have any consulting with bringing a working product to a VC without testing the market?

<comment><USER4> It's really hard. You need to have a personal relationship or well-known brand for a VC to invest in a product without any market data. There are ways to get stealth data, you can mask the product or give targeted beta codes to users that will pay. Depending on the product/cost you really don't need that many paying customers to provide proof of concept. Free sites it's nearly impossible, they will want to see traction.</comment></comment></comment>


Big Tablets are Coming - <AUTHOR> http://www.evanmiller.org/big-tablets-are-coming.html <comment><USER2> Did I miss it in the article where "big tablets" actually liberate the "forgotten worker" from the shared work space? How does that work? :)</comment>


New Dating API could become the Facebook Open Graph of love - <AUTHOR> http://thenextweb.com/dd/2011/06/24/new-dating-api-could-become-the-facebook-open-graph-of-love/

<comment><USER2> Why would a popular dating service like OkCupid or PlentyOfFish open up to indirectly allow more competition and less ad audience when everyone just looks at the dating API website?

Seems to be only useful for struggling sites but even then, it looks like a myopic decision to support the API.

<comment><USER3> Definitely agree that big, popular dating sites won't be quick to pick this up. I do see the possibility of them monitoring the usage of the API and perhaps integrating some 3rd party API's into their sites too.

What the dating API allows you to do is show off not only what you SAY you're doing, but what you're ACTUALLY doing. It adds an additional facet to someone's profile, which only enhances online dating in my opinion. Could be something larger players would want to look into.

The ongoing trend of mobile dating and social apps should benefit from this release.</comment></comment>


Ask HN: Programming for non-programmers? - <AUTHOR> I would like to teach some friends how to use scripting to speed up basic tasks. I regularly write scripts to do stuff like bulk download photos, downsize MP3s for copying to my phone, renaming files, etc. Sometimes a non-programmer friend will talk about some mundane task he spent a lot of time on, and I cringe and think, if only you knew how to script!
I was wondering what ideas other HN'ers have for essential programming things non-programmers should learn. Also, are there any good books or resources on pragmatic/applied programming? <comment><USER2> One resource, haven't read much of it so I couldn't tell you how good it is but it seems okay:

[https://automatetheboringstuff.com/](https://automatetheboringstuff.com/)</comment>