Grad Student Who Took Down Reinhart and Rogoff Explains Why They're Wrong - <AUTHOR> http://www.businessinsider.com/herndon-responds-to-reinhart-rogoff-2013-4 <comment><USER2> I have argued in the past that data and code need to be submitted with academic papers: <http://blog.jgc.org/2013/04/the-importance-of-open- code.html> This is just the latest example of why, IMHO, code needs to be open.

<comment><USER3> Yes! We need to see more material under Matt Might's CRAPL license. I feel a strong urge to write off any result that doesn't have accompanying code with it.

<http://matt.might.net/articles/crapl/>

<comment><USER4> Great idea, awful awful name - CRAP license, as in 'Community Research/Academic Programming' = CRAP. Why would your make your concept the butt of jokes from the outset?

<comment><USER5> It's right there on the page: "It's not the kind of code one is proud of." By releasing it as CRAP, you're acknowledging that the code is imperfect, reducing the perceived barrier. If academics feel like you can only release code if it's pristine, it'll never get released, because for the most part, the incentives aren't there to make clean code in an academic setting.

<comment><USER4> This is to badly miss the point. What matters in this context is accuracy, not elegance.

If I brute-force detection of the first 10000 prime numbers (for some non-CS context) by testing their divisibility from _n_ to 1 it's horribly inefficient and programmers may laugh, but it's accurate, simple, and easily reproducible. Given that a definition of a prime number as _divisible only by itself and 1_ , it may be better to present a brute-force algorithm than to get into a sideline discussion about validating some new-fangled method like the Sieve of Erasthostenes, that upstart.

Science aims at proof rather than efficiency. What matters is the quality of the result, and its reproducibility. If you can get to the same result in a much more timely fashion that's awesome, but that's an engineering achievement rather than a scientific one. I don't think that anyone wants to put out code labeled as CRAP in an attempt to mollify engineers.

<comment><USER6> Have you seen typical research code? It's crap. If you looked at it, your first reaction would probably be "Wow, this is crap." It's created in a hurry, usually grows by accretion, and the people who write it are usually pretty half-assed at programming, having made the solidly practical decision to focus more on the other aspects of their field. The commenting is usually lousy-to- nonexistent, the indentation is frequently screwy, and everything about it just screams "I am a temporary hack, written only to get publishable results."

And that's to be expected, because of how most scientific code gets written, and what the incentives are. And releasing this code would still be strictly better than _not_ releasing it. We just need to keep the expectations of code quality low, which the CRAPL license does.

<comment><USER4> Only programmers have high expectations of code quality. If I'm a biologist, my target audience is other biologists, not programmers.

Your comment reads to me like you want non-programmers to ritually humiliate themselves by labeling their stuff as CRAP before you will deign to parse it for correctness. Patronizing people is not a good way to get them on-side.

 _We just need to keep the expectations of code quality low, which the CRAPL license does._

The purpose of the CRAPL is to make code accessible, not to lower expectations. It's _not about_ what you think of the code, it's about whether the code yields correct results.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> For me this was the 'tl;dr' quote:

"It would be absurd to think that governments never have to worry about their level of indebtedness. The aim of our paper was much more narrowly focused. We show that, contrary to R&R, there is no definitive threshold for the public debt/GDP ratio, beyond which countries will invariably suffer a major decline in GDP growth."

<comment><USER8> R&R weren't trying to claim that, were they?

<comment><USER9> I think they were. Speaking as someone who is generally pro-austerity, I think R&R concluded that after 90% debt/GDP there was major drop-off in GDP growth. The corrections all but destroy this assertion. That's not to say that debt and GDP growth aren't inversely proportional/correlated -- just that there is no magic level that changes the relationship substantially.

Honestly, there are so many variables and dimensions in this system and so little data I'm not sure we should ever be drawing sweeping conclusions like this.

<comment><USER8> >I think they were. Speaking as someone who is generally pro-austerity, I think R&R concluded that after 90% debt/GDP there was major drop-off in GDP growth.

That doesn't mean they were asserting what the grad students claim, that the falloff in growth is _unavoidable_ , which sounds like an extreme strawman.

<comment><USER10> R&R's defense strategy seems currently to pretend that they weren't claiming anything in particular by the paper originally: "hey man, I was just putting it out there. I didn't, like, mean anything by it."

But their own public pronouncements, and the way they responded to other's interpretations of the results, pretty much indicated that they though they'd found firm evidence that there was some big non-linearity at 90%.

<comment><USER8> I'm not claiming R/R are saints. I'm just objecting to ridiculous strawman implied by:

"We show that, contrary to R&R, there is no definitive threshold for the public debt/GDP ratio, beyond which countries will invariably suffer a major decline in GDP growth."

RR's claim is entirely statistical, so of course they're not going to claim that exceeding the ratio _always_ ("invariably") leads to a major decline in growth.

RR's being wrong doesn't mean it's okay to insinuate they hold ridiculous positions that they really don't. That's just compounding public misconceptions.

<comment><USER11> Have you been following RR's op-eds, etc over the last two years? I have the impression that they've been less circumspect than you claim.

<comment><USER8> "X carries too much/undesirable risk of Y" != "X unavoidably leads to Y"

The former is what RR said, the latter is the strawman being attributed to them.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> ErSo, there are a few things I don't quite understand. In the original study, Renhart had erroneously averaged 7 numbers together to get a slightly negative growth. The 'correct' result is obtained from averaging eight numbers together, resulting in slightly positive growth. What is unclear to me, is how are either of these numbers considered to be very significant? With so few samples in the average, I would draw the conclusion that both measurements agree with one another and the error bars for their measured result are quite a bit larger than they seem to be suggesting. Is this common in economics?

<comment><USER13> Macroecon has the simultaneous hindrances of (1) not being able to run a controlled experiment and (2) a dearth of data. It doesn't excuse people for being far too confident in the conclusions they draw, but it does explain why such large differences of opinions can persist (especially on such a politically charged subject). People can't be pulled away from their priors.

<comment><USER14> > Macroecon has the simultaneous hindrances of (1) not being able to run a > controlled experiment and (2) a dearth of data.

Well, except #1 should be "not being able to run experiments in laboratory conditions". Statistical controls in an experiment are still controls, and it is still possible though (because of the point made briefly by #2, to run statistically-controlled experiments) sometimes of limited utility; the dearth of data (specifically, the small number of data points compared to the number of independent variables that need to be controlled for) is what limits the utility of many experiments with statistical controls in the field.

<comment><USER15> Even if you use rigorous statistical techniques -- and economists do under the heading of econometrics, even inventing new techniques -- it's _still_ really hard to draw meaningful conclusions.

There are just _so many variables_. And the more interconnected the world becomes, the more variables there are. Pointing to any one correlation and you'll find a hundred statistical fingers pointing at correlations with totally different consequences.

<comment><USER14> > Even if you use rigorous statistical techniques -- and economists do under > the heading of econometrics, even inventing new techniques -- it's still > really hard to draw meaningful conclusions.

> There are just _so many variables_.

Right. That's the problem with too few data points given the number of independent variables that need to be controlled for. I addressed that explicitly.

</comment></comment></comment></comment></comment><comment><USER16> Seems like a great argument for more transparency. This guy wasted a lot of time trying to guess what they had done. Given that publishing all the supporting materials is approximately free, perhaps journals could start requiring a git link that contains data, code, and paper drafts.

<comment><USER17> "journals could start requiring a git link that contains data, code, and paper drafts."

But when the goal is to create a result rather than report it, transparency is the enemy

<comment><USER18> > But when the goal is to create a result rather than report it, providing > data, transparency is the enemy

I strongly believe that errors are a much more pervasive problem in science and related fields than malice is.

<comment><USER17> "science and related fields "

But we are talking about economics, and republican groups like fox news eat it up.

My favorite example is the 2011 chart distorting the display of the unemployment rate:

[http://mediamatters.org/blog/2011/12/12/today-in- dishonest-f...](http://mediamatters.org/blog/2011/12/12/today-in-dishonest- fox-news-charts/185162)

<comment><USER18> Fox News is not in the business of science. I used the term "related fields" as a euphemism for Econ and Psych because I didn't want to get drawn into a demarcation debate.

Wherever the line is drawn, the dishonesty of some random Fox News chart is not related to the honesty or dishonesty of actual scientific research.

The much bigger problem _in science_ is error.

<comment><USER17> " didn't want to get drawn into a demarcation debate."

Econ and Psych really do lie in a gray area, and by avoid the demarcation debate you completely miss the relevance of the issue at hand.

If policy makers weren't using this study to justify more austerity, then we probably wouldn't have such a prolonged discussion.

</comment></comment></comment></comment></comment></comment><comment><USER19> From Jelte Wicherts writing in Frontiers of Computational Neuroscience (an open-access journal) comes a set of general suggestions

Jelte M. Wicherts, Rogier A. Kievit, Marjan Bakker and Denny Borsboom. Letting the daylight in: reviewing the reviewers and other ways to maximize transparency in science. Front. Comput. Neurosci., 03 April 2012 doi: 10.3389/fncom.2012.00020

[http://www.frontiersin.org/Computational_Neuroscience/10.338...](http://www.frontiersin.org/Computational_Neuroscience/10.3389/fncom.2012.00020/full)

on how to make the peer-review process in scientific publishing more reliable. Wicherts does a lot of research on this issue to try to reduce the number of dubious publications in his main discipline, the psychology of human intelligence. It appears that the discipline of economics research needs help with data openness too.

"With the emergence of online publishing, opportunities to maximize transparency of scientific research have grown considerably. However, these possibilities are still only marginally used. We argue for the implementation of (1) peer-reviewed peer review, (2) transparent editorial hierarchies, and (3) online data publication. First, peer-reviewed peer review entails a community-wide review system in which reviews are published online and rated by peers. This ensures accountability of reviewers, thereby increasing academic quality of reviews. Second, reviewers who write many highly regarded reviews may move to higher editorial positions. Third, online publication of data ensures the possibility of independent verification of inferential claims in published papers. This counters statistical errors and overly positive reporting of statistical results. We illustrate the benefits of these strategies by discussing an example in which the classical publication system has gone awry, namely controversial IQ research. We argue that this case would have likely been avoided using more transparent publication practices. We argue that the proposed system leads to better reviews, meritocratic editorial hierarchies, and a higher degree of replicability of statistical analyses."

<comment><USER20> Note that the Reinhart-Rogoff article was not peer-reviewed.

</comment></comment><comment><USER21> It's not related to the article, but rather the site hosting it.

I noticed more than one fishy looking 3rd party domain loading while the page downloaded, so went into Inspector to see what was up. There are one or more resources loaded from each of the following domains, in many cases including javascript...

2mdn.net, scorecardresearch.com, bizographics.com, tynt.com, optimizely.com, google.com, sail-horizon.com, facebook.com, 247realmedia.com,akamaihd.net, vizu.com, pubmatic.com, imrworldwide.com, advertising.com, googlesyndication.com, doubleclick.net, chartbeat.com, sharethrough.com, fbcdn.net, skimresources.com, gstatic.com, stumbleupon.com, tynt.com, adadvisor.net, youtube.com, shareth.ru, agkn.com, yimg.com

'shareth.ru' seemed particularly suspect, until I realized it was probably sharethrough.com trying to be cute.

There are so many domains being trusted here the drive-bys could have drive- bys.

</comment><comment><USER22> Its fascinating that part of the problem in the Reinhart and Rogoff paper comes down to an Excel formula error [http://nymag.com/daily/intelligencer/2013/04/grad-student- wh...](http://nymag.com/daily/intelligencer/2013/04/grad-student-who-shook- global-austerity-movement.html)

<comment><USER23> One columnist I read said something like "it will be interesting to see what historians make of the fact that a global economic policy was driven in part by an error in an Excel spreadsheet".

<comment><USER11> It's rare that we get such a clean natural experiment like this in economics; maybe future economists will thank R&R for cleverly introducing this negative exogenous policy shock (sarcasm).

</comment></comment></comment><comment><USER24> Journals shouldn't publish papers without all the supporting data and computer code necessary to reproduce the result.

This seems obvious, but established academics have a vested interest in not sharing. Sharing data and code opens their work up to impeachment (as is seen here), and it gives others a jumping off point to extend their work.

Both of these side effects of sharing code and data are bad for the careers of successful academics, but good for literally everyone else in the world (including, ironically, these academics). It should be a no brainer, but then again, who referees these papers? The very people who have the most to lose by such a change.

It will take a lot of clamoring from the outside to bring about a world where scientific work is considered not legitimate without full documentation of the experiment performed.

<comment><USER25> I recall hearing somewhere that the original paper wasn't actually published in a peer-reviewed journal, so requirements for data and code wouldn't really have applied anyway.

Perhaps the greater lesson is that we should trust proper journals for a reason.

</comment></comment><comment><USER26> This was an interesting and well written followup but I'm disappointed in Herndon's decision to publish it on Business Insider. BI is generally full of blogspam and has interstitial ads.

<comment><USER27> Agreed. BI is edited by Henry Blodget who was charged with securities fraud as an analyst which lead to him paying millions in settlement and being permanently banned from the securities industry. Really not where you want to publish anything meant to be taken seriously.

<http://en.wikipedia.org/wiki/Henry_Blodget>

</comment></comment><comment><USER28> More debate over 20 data points with no explanatory power one way or the other (as Yglesias pointed out). This is not uncommon in macro. Another recent case also centered on work by R&R

[http://johnbtaylorsblog.blogspot.com/2012/10/simple-proof- th...](http://johnbtaylorsblog.blogspot.com/2012/10/simple-proof-that-strong- growth-has.html)

(one of a host of commentary pieces on both sides... but essentially none in the middle)

</comment><comment><USER29> I think this method of averaging should hereby be called the Reinhart-Rogoff Average, RRA for short.

I should program it into my business intelligence software, it's gotta be useful for something--like for cooking the books.

</comment><comment><USER30> This whole situation makes me think: is there a static analysis tool for excel? Seems like missing a few rows in an excel calculation could be flagable.

<comment><USER31> There sort of is one built-in. It usually warns you if you're doing things on a group of cells and you're missing one of them.

</comment></comment><comment><USER32> That grad student won't be getting the big job offers in industry, great way to destroy your career by biting the hand that feeds you.

(Sarcastic, but it's real life)

<comment><USER33> Doesn't matter, he'll now have a lucrative career being a USG debt apologist.</comment></comment>


Decision Tables - <AUTHOR> https://www.hillelwayne.com/post/decision-tables/ <comment><USER2> What I find most remarkable about the comments here is how quickly programmers try to jump to code (I'm not passing judgment, just making an observation). The goal of this post is to present a simple yet useful _specification_ tool. Sure, a decision table implemented in Clojure would likely be more readable than one implemented in assembly, but figuring out _what_ the decisions should be would be far, far more costly and significant (in all interesting cases) than implementing, or reading, either. Sometimes a specification is not even implemented in a single program, but in some distributed system, with no direct representation in code, and sometimes a specification specifies the environment the system interacts with, and is not even implemented by a computer at all. Coding is important, but specifying is usually much more so, as it is both more costly and has a higher impact. Developers should learn how to think about specification and use various aids -- like decision tables -- without thinking at the code level, which is often a distraction.

<comment><USER3> I agree, but what's even better than a specification is an executable specification. If we see a decision table as data (see discussion below) then it can be both -- no chance for the implementation to go out of sync with the spec, and "don't repeat yourself".

<comment><USER2> Good specifications are often written at a level that generating executable code from them is often undecidable and almost always intractable in practice. What would really be nice -- although we have not been able to achieve even that at scale yet -- is a formal refinement between implementation and specification (i.e. you can't execute the specification, but you can ensure it's in sync). There are, however, various techniques that can do so approximately [1]. But I believe that even a good spec without any formal tie to code (which we certainly can do) gives you 90% of the value of a spec that is formally tied to the code (which we don't know how to do just yet).

[1]: E.g. trace-checking: [https://arxiv.org/pdf/1111.2825.pdf](https://arxiv.org/pdf/1111.2825.pdf)

<comment><USER4> > Good specifications are often written at a level that generating executable > code from them is often undecidable and almost always intractable in > practice.

What about modern dependently-typed meta languages like Idris and program synthesizers like Nadia Polikarpova's work on Synquid?

Type-Driven Program Synthesis, by Nadia Polikarpova (StrangeLoop 2018) [video] [https://www.youtube.com/watch?v=HnOix9TFy1A](https://www.youtube.com/watch?v=HnOix9TFy1A)

MIT Comcom: Synquid program synthesizer, and more command-line tools for the web

[http://comcom.csail.mit.edu/comcom/](http://comcom.csail.mit.edu/comcom/)

Idris Software Foundations [https://github.com/idris-hackers/software- foundations](https://github.com/idris-hackers/software-foundations)

<comment><USER2> We don't know how to scale those [1]. It's very easy to specify a simple sorting function in Idris/Java with JML and prove it correct. It's a whole other matter to specify the global properties of an entire system, and verify them all the way down to the small bits of code. Various code synthesis tools are even more limited, as they tend to rely heavily on fragile automated reasoning tools like SMT solvers, although both are orders of magnitude away from being able to handle real applications that I think that comparing them to one another is a bit beside the point.

The biggest programs ever written and verified with deductive proofs -- be it dependently typed languages or any verification based on deduction, correspond at most to ~10,000 LOC of C, taken years of work by academic experts, and had to be significantly simplified to make proofs easier (i.e., they had to use only the simplest data structures, etc.). In contrast, business applications are 2-3 orders of magnitude bigger.

[1]: And when I say "we don't know" I mean that it is possible that some time in the next 2-5 decades we may be able to do something, but it's also possible that there are fundamental complexity limitations that mean that this particular path will never lead to something similar to what we may imagine it could.

</comment></comment></comment></comment></comment><comment><USER5> Programming languages that support pattern matching support decision tables. This is an OCaml port of the FizzBuzz example (fixing a mistake where the result of the modulo is compared with T and F):

        match n mod 3 = 0, n mod 5 = 0 with
        | true, true -> "FizzBuzz"
        | true, false -> "Fizz"
        | false, true -> "Buzz"
        | false, false -> string_of_int n

This a "cleaner" version that takes advantage of wildcards (which appear in the article, but not in the FizzBuzz):

        match n mod 3, n mod 5 with
        | 0, 0 -> "FizzBuzz"
        | 0, _ -> "Fizz"
        | _, 0 -> "Buzz"
        | _, _ -> string_of_int n

Note that the article states, "two rows can't overlap in what inputs they cover," but in case analyses expressions of PLs with pattern matching, two rows can share a non-empty set of common matches and the higher row will take precedence.

<comment><USER6> I guess you could do it in anything, even if it doesn't support pattern matching:

(I apologise for this Python abomination):

        print([{ (True, True): 'Fizzbuzz', (True, False): 'Fizz', (False, True): 'Buzz', (False, False): i }[i % 3 == 0, i % 5 == 0] for i in range(1, 101)])

<comment><USER7> If you're not aware, indenting your code marks it as preformatted, and so won't wrap in HN. Code which is preformatted and not wrapped is really hard to read on mobile, and even on desktop the end of your code is cut off in a scroll box.

It's almost always easier to read if you don't indent it, though HN should probably fix their style sheets so it doesn't matter.

If I'm quoting something (another reason people often indent their comments) I will normally wrap the whole thing in * so that it is _italicised_.

I don't know a good way to make code stand out, maybe someone else has an idea.

<comment><USER8> > If I'm quoting something (another reason people often indent their comments) > I will normally wrap the whole thing in * so that it is italicised.

Personally I prefer putting a greater than sign in front of each paragraph I am quoting / quoting from.

It's what we do in e-mail and on most imageboards and in markdown. It's easy to read and easy to understand that it's a quote.

</comment></comment></comment></comment><comment><USER3> I really liked this article. I feel about the same about this as when I first understood state machines.

Sure, we could write a loop with an if-else-if-else block inside to implement a state machine, but once we understand the formalism properly it might be better to use a generic piece of code to run the state machine, and a data structure mapping (state, input) pairs to actions/outputs.

Similarly, we could write a big if-else-if-else to implement our business logic, but once we recognise that we have a decision table, we are better using a generic piece of code to implement the decision table idea, and storing our logic in a table.

In both cases we are separating logic from data.

Also relevant to decision tables, since they're far more efficient for some situations, is decision trees. Many people are familiar with decision trees as a machine learning method, or as a method for analysing a decision (utility, probabilities, etc.), but they can also be used to express the same logic as a decision table as in this article. Again, a generic piece of code can execute the decision tree, and the tree itself can be stored as data.

<comment><USER9>
        understood state machines.

Of course decision tables and (finite) state machines are essentially the same: each FSM induces a decision table (indexed by current state and current action) and vice versa.

</comment></comment><comment><USER10> See also: Racket's 2d syntax library:

      #lang 2d racket
      (require 2d/match)

      (define (subtype? a b)
        #2dmatch
        ╔══════════╦══════════╦═══════╦══════════╗
        ║   a  b   ║ 'Integer ║ 'Real ║ 'Complex ║
        ╠══════════╬══════════╩═══════╩══════════╣
        ║ 'Integer ║             #t              ║
        ╠══════════╬══════════╗                  ║
        ║ 'Real    ║          ║                  ║
        ╠══════════╣          ╚═══════╗          ║
        ║ 'Complex ║        #f        ║          ║
        ╚══════════╩══════════════════╩══════════╝)

[https://docs.racket-lang.org/2d/index.html](https://docs.racket- lang.org/2d/index.html)

<comment><USER11> That's pretty cool! I've never seen a programming language that accepts ASCII art as valid code.

<comment><USER10> there are a few... asciidots for instance. the racket library above actually has (basic) editor support in dr racket though

</comment></comment></comment><comment><USER12> That's why I like Erlang, it allows for multiple function heads and pattern matching. So these kind of tables are very easy to represent without too much noise:

        f(t, t, t) -> 1;
        f(t, t, f) -> 3;
        f(t, f, t) -> 7;
        f(t, f, f) -> "cucumber";
        f(f, _, _) -> null.

Pretty close to the table, no?

The other example:

        fizzbuzz(N) ->
            case {N rem 3, N rem 5} of
                {0, 0} -> "FizzBuzz";
                {0, _} -> "Fizz";
                {_, 0} -> "Buzz";
                {_, _} -> N
           end.

Here I used a case statement, but it also matches the shape pretty well.

That's valid code, not pseudocode, you can compile it in a module an run it.

Notice how multiple function clauses separated by ; allow much nicer code patches. If a function wasn't working well, instead of adding an if statement inside, you can add another function clause instead.

<comment><USER13> Most, if not all, functional languages support pattern matching: Haskell, OCaml, Clojure, Erlang/Elixir, Purescript, Idris, Elm, etc.

<comment><USER12> Sure. I just like Erlang in particular and thought it approximated the table format pretty well.

</comment></comment></comment><comment><USER14> I recommend checking out the material about Subtext[1] for elaborations on tabular programming. Often in practical systems an enumeration of finite state is a tool to "squash" very large decision tables into a more comprehensible pattern. But having the decision table aids in discovery of just how many states you have to deal with.

[1] [http://www.subtext-lang.org/](http://www.subtext-lang.org/)

<comment><USER15> Yup! There are many versions of Subtext. The most relevant to decision tables is perhaps schematic tables: [https://vimeo.com/140738254](https://vimeo.com/140738254)

"a cross between decision tables and data flow graphs"

</comment></comment><comment><USER16> There is a whole category of systems (rule engines, BRMS) dedicated executing and more importantly managing predicate logic in a way that business user's can understand and maintain. Just one example from the Java space:

[https://www.drools.org/](https://www.drools.org/)

</comment><comment><USER17> This is a common technique in designing tests of a system; if you can make a table of inputs and expected outputs, you have a roadmap on what to test.

I had a textbook that had a whole chapter about this, I will find the title and edit this post.

EDIT: A Practitioner's Guide to Software Test Design, Lee Copeland, Artech House (January 2004), ISBN-13: 978-1580537919.

</comment><comment><USER18> Yes. I've been arguing for some time that "smart contracts" should be written as decision tables. Not in some byte-coded language. Decision tables map well to contracts. They can be understood by managers and lawyers. (This may be a negative for some scammers in the cryptocurrency world.)

</comment><comment><USER19> These are a great way to create shared understanding with your non-tech business partners when requirements get complicated. My team used these a lot in an e-commerce context where checkout had quirky discount rules. e.g. give 10% off if the user has a product from X category in their cart, but not if the product is in Y subcategory or Z blacklist. And it's additive with other promotions of type A, but greatest-wins with promotions of type B.

Truth tables can eliminate a lot of ambiguity compared to a wall of text or dozens of bullet-point requirements.

</comment><comment><USER20> We use decision tables in Domain Specific Languages that we develop for several sectors. In this paper you can see how we use them in the medical sectors to represent some medical decisions [http://voelter.de/data/pub/MPS- in-Safety-1.0.pdf](http://voelter.de/data/pub/MPS-in-Safety-1.0.pdf) (see the Appendix for screenshots)

</comment><comment><USER21> Ahh this brings back memories. One of my first projects at a large investment bank was working on a tax engine where the first step was transaction classification using a decision table with dozens of columns and hundreds of rows.

The best part? It was loaded into a running service by parsing a complex Excel spreadsheet which lead to so much fun with debugging.

</comment><comment><USER22> Traditionally, n%m is true if it's not 0. You might want to add (n%m)==0 in the table.

</comment><comment><USER23> This is probably very difficult, but wouldn't it be interesting to write a program that generates the minimal function that matches a given decision table? I imagine with current techniques this would only be possible for very simple functions, but the programming workflow if you had such a tool would be neat. Instead of writing a function and tests, you simply write the test, and grow it until the function looks how you want it to.

<comment><USER24> For strictly Boolean decision tables (that is to say, truth tables[1]) this is already a solved problem, through a method known as Karnaugh mapping[2]. It can transform any arbitrary truth table into a Boolean algebra expression, which you can then simplify using any Computer Algebra System you'd like.

You could probably expand this method to other forms.

[1]: [https://www.wikiwand.com/en/Truth_table](https://www.wikiwand.com/en/Truth_table) [2]: [https://www.wikiwand.com/en/Karnaugh_map](https://www.wikiwand.com/en/Karnaugh_map)

</comment></comment><comment><USER8> Decision tables are like an extension of truth tables [1] then, with the realization that instead of mapping the inputs to boolean outputs of true/false, you can map each output to any value. That's clever, I like it!

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

</comment><comment><USER25> A few years ago I wrote a Ruby example if anyone wants to try it: [https://github.com/aw/ruby-decision-table](https://github.com/aw/ruby- decision-table)

</comment><comment><USER26> Nice explanation, but the lesson I learned from it is "if you make a mess of your system, you might need a messy system to fix it again". Which might not be what the author intended, but does jive with experiences I've had.</comment>


Super Mario Maker Will Let You Build Your Own Mario Levels This September - <AUTHOR> http://techcrunch.com/2015/06/16/super-mario-maker-will-let-you-build-your-own-mario-levels-this-september/

<comment><USER2> I was just talking with my girlfriend yesterday about the very first level of the original SMB and how every kid I knew when I was younger could instantly identify it, but our two sons may never actually have that sort of relationship with a game at such an early age (I was 4 when I first played an NES).

I love that they used that level as the beginning of their montage.

<comment><USER3> Oh they do now. It's the Minecraft Generation.</comment></comment>


How to update your Wallaroo Python applications to the new API - <AUTHOR> https://blog.wallaroolabs.com/2018/01/how-to-update-your-wallaroo-python-applications-to-the-new-api/ <comment><AUTHOR> Hi! I'm the author of this post, please feel free to get in touch or ask questions here, on our mailing list ([https://groups.io/g/wallaroo](https://groups.io/g/wallaroo)), or on IRC ([https://webchat.freenode.net/?channels=#wallaroo](https://webchat.freenode.net/?channels=#wallaroo)). Also, a bit shout out to all the HN folks that helped us with comments and feedback on our Python API, which helped us make it so much better!</comment>


Proposal for a community C website and a refrence compiler - <AUTHOR> https://groups.google.com/forum/#!topic/comp.lang.c/qFItUqjsHZk

<comment><USER2> >please stop the fucking whining.

Nice to see that comp.lang.c is still as toxic as it ever was.

I don't see people talking much about C having a 'culture problem' like they do with Lisp but I'm not sure why. Before the existence of things like stackoverflow asking for help with C was always just as much of a baptism of fire as asking for help with Common Lisp.

<comment><USER3> Perhaps because the average developer is more likely to be a newbie that seeks help when using CL?

</comment></comment><comment><USER4> I agree with the first point. ( an ISO website like isocpp.org )

But strongly oppose the second. Who is gonna develop and maintain such a fruitless project. You are not gonna be able optimize it as much as GCC. No one will use.

Here is a rant about C:

Many projects refuse code that contains single line comments // . This should give a nice hint how C language is treated. On the other hand i have been writing C++11 exlusively since 2012. C doesn't like change. Not a community a newcomer would like to be in.

<comment><USER5> > You are not gonna be able optimize it as much as GCC. No one will use.

If LLVM were used as a backend for a C11 compiler then optimizations would be for free. Since C is has such a small surface area, and since LLVM is very much designed for C-like languages, it would be quite easy (e.g. 1 person- year) to implement a production quality C11 front-end for LLVM.

<comment><USER6> But why would you, given that LLVM is written in C++ and that clang.llvm.org exists?

I get the impression this article wants a C compiler written in plain C for reasons of ideology. I don't think writing a compiler in C on top of a huge project written in C++ is compatible with that ideology.</comment></comment></comment>


Libui: portable GUI library in C with many other language bindings - <AUTHOR> https://github.com/andlabs/libui <comment><AUTHOR> This is the nuts and bolts of the Proton Native library that was featured on HN last week [1].

[1] [https://news.ycombinator.com/item?id=16978901](https://news.ycombinator.com/item?id=16978901)</comment>


Is Now Illegal - <AUTHOR> http://isnowillegal.com <comment><USER2> [https://storage.googleapis.com/is-now- illegal.appspot.com/gi...](https://storage.googleapis.com/is-now- illegal.appspot.com/gifs/JAVASCRIPT.gif)

<comment><USER3> [http://share.isnowillegal.com/goto](http://share.isnowillegal.com/goto)

<comment><USER4> [http://share.isnowillegal.com/Memeing](http://share.isnowillegal.com/Memeing)

</comment></comment></comment><comment><USER5> This is kinda cool.

So, as you type into the bar, it adds what you're typing to the URL. And this is fine. But what isn't fine, is that the way they did this adds to your page history... for each and every character.

So, when I type "Things", and then decide to back out back to HN, I have to press back seven times.

<comment><USER6> Thanks, fixed it!

</comment></comment><comment><USER7> [http://isnowillegal.com/?Facebook](http://isnowillegal.com/?Facebook)

Facebook is now illegal.....

</comment><comment><USER8> Wish you had the option/switch to say "Are Now Illegal" as well as the default "Is Now Illegal".

</comment><comment><USER9> I suggest to have the option to type any text, without the "Illegal" part

</comment><comment><USER10> Well we must have broken it. Wouldn't give me a response after 5 minutes

<comment><USER6> YES U BROKE IT too many simultaneous connections. We are working to make it up again. Thanks.

</comment></comment><comment><USER11> guys the word count is to short at least let it be about 14 characters.

<comment><USER11> For a sentence like 'ORANGE POTUS' or Intelligence'

</comment></comment><comment><USER12> Makes me wonder how old the creators are. This is kindergarten behavior.

<comment><USER3> [http://share.isnowillegal.com/snowpanda](http://share.isnowillegal.com/snowpanda)</comment></comment>


Show HN: SpreadsheetDB – A database that you can query with spreadsheets - <AUTHOR> https://www.spreadsheetdb.io/ <comment><USER3> It's a little known fact (is it?) that you can use a SQL like query language on Google Sheets.

You can query across different tabs on a single sheet, or query a totally different sheet!

[https://developers.google.com/chart/interactive/docs/queryla...](https://developers.google.com/chart/interactive/docs/querylanguage)

[https://support.google.com/docs/answer/3093343?hl=en](https://support.google.com/docs/answer/3093343?hl=en)

<comment><USER4> This feature makes me think, "When all you have is SQL, everything looks like a relational database."

I recently confused some co-workers when they examined my Google Sheets query - not knowing Excel very well, I just wrote SQL-ish. Now they have to live with my SQL-ish spreadsheet or figure out how to redo it with Excel functions.

<comment><USER5> How about "when all data is fundamentally structured, a Structured Query Language will be highly useful in many cases?"

Seriously, we live in a universe where everything is composed of lots of smaller things that exist in relation to each other. Relational Data isn't so much a database technology as it is fundamental information theory.

<comment><USER6> Let me preface this with: I'm a _huge_ proponent of SQL when appropriate. I understand why Cassandra et al were required when generating dynamic live newsfeeds for each user in an ecosystem when the RDBMS query plan was pretty much designed in a naive non-uber-scalable-fashion.

That being said - let's take a field which changes fairly rapidly, all things considered - medicine. You have two forms of changes which can occur within your data model -- (a) definition changes where your schema stays the same effectively and (b) paradigm changes. Let's say you're with a patient and need to code in a ICD[1] value for whatever malady he has. A crude analogy would be a comparison between the Dewey decimal system and the ICD. As the ICD evolves, new codes might be added but the fundamental structure remains the same. So, a new database paradigm TotallyAwesomeRuleBasedImmutableDB pops up, and you just use the pre-existing code for "Databases" (say 20) and appropriate the next available integer in that set for TARBIdb(lets say, 73). No problems there. Essentially, we just inserting a new value (73, or added a new "smaller thing") into the set of Databases to universe U_1 by without violating any invariant properties. Consider (a) a non-issue.

The problem occurs when you need to address the issue of your patient being an alcoholic. Previously, this was referred to as _trunksucht_ (loosely translated as: "dipsomania"). This would fall under the 305, 303, 291, or 980 codes depending on if you were say, a non-drinker with no psychological cravings for alcohol who pledged for a frat, drank too much and developed alcohol poisoning as a result of that. If you were a daily drinker exhibiting physical withdrawal symptoms, you would be coded from an entirely separate section. From the ICD-9 to ICD-10, the WHO reclassified this entirely (such that either patient would be coded in to an entirely new category 'F10').

This breaks a lot of things, from the front-end GUI which would do validation with a regexp [0-9]{,3}\\.[0-9]* or some such which is trivial enough I suppose, to the stored procedures which then have to get vendor approved schema changes, all of which will be rolled up and sent to your IT guys who have to go through tedious QA to make sure everything works. (And I mean literally every modal dialog, every validation, every external XML-RPC call to bill out your patients insurance company, Universe U_2).

I've read Codd's paper, the entire ANSI SQL11 standard, and have a fair grasp of both major vendors. There is nothing in there about gracefully dealing with these situations. I suppose one could argue that an RDBMS' purpose is solely to act as a data-store while retaining availability and data integrity -- that is, U_1 is all your Oracle instance cares about (manage your tablespace's set of schema objects and the interaction between U_1 <\--> U_2 is completely out of the scope of it's set of responsibilities). Maybe so, but when Oracle added the XMLType with full XPath selector capabilities in 9i (give or take?) they certainly co-opted the responsibility to deal with changes of a structural (that is, "of type 'b'") nature. Dynamically typing, weakening of type systems, writing to an 'duck typing'), serializing via the Protobufs methodology, etc are all just band-aids; we need a surgeon to go in there with some surgical sutures.

[1] [https://en.wikipedia.org/wiki/ICD-10](https://en.wikipedia.org/wiki/ICD-10)

</comment></comment></comment></comment><comment><USER7> Other posters have mentioned Microsoft's Excel 20-year-old ODBC support [0]: you can connect any database as a source of data, then create pivot tables for live ad-hoc transforms and summarizations of a database. This is a separate feature to connecting to an Excel spreadsheet using ODBC.

I showed this to my manager and he immediately demanded I explain to the rest of the team how this black magic worked…

[0]: [https://support.office.com/en-gb/article/Overview-of- connect...](https://support.office.com/en-gb/article/Overview-of-connecting- to-importing-data-c0ad7aec-ff1a-4e48-9c21-dc18a102433f)

<comment><USER8> ODBC is over 20 years old.

I was using ODBC from MS Access to query Oracle databases in the early 90s - both ODBC and (preferably) pass-through queries. The entire system included then generating (recursive) reports in Access, passing the data to Excel to integrate with other data and input, opening and updating a Powerpoint file with linked tables, saving the PPT and returning to Excel for the next in the series.

All driven by VBA. All in 1995, maybe 1994 too.

I had to restart Windows after each run of 20 or so, and had two computers as one was always tied up running jobs. Kludgy but at least I wan't writing COBOL.

Here is some 1994 PR: [http://archives.cpajournal.com/old/16531700.htm](http://archives.cpajournal.com/old/16531700.htm)

</comment></comment><comment><USER9> The idea is very nice, but I don't like the fact that it is just an API for calculations. That kind of defeats the purpose of a spreadsheet format.

At first I thought it was an actual spreadsheet application, or an Excel plugin or whatever.

I tried multiple times to create a spreadsheet app that would speak to JSON APIs easily from within cells. The problem is that writing a spreadsheet app from scratch is not easy (one of my tries: [http://sheets.alhur.es/](http://sheets.alhur.es/)), but when that is done it is not hard to integrate it directly with PouchDB, CouchDB -- or any other database or application, actually, with a custom integration.

<comment><USER10> You might want to look at [https://github.com/handsontable/handsontable](https://github.com/handsontable/handsontable) for the front end. You could probably mash it up with this to build what you describe.

</comment></comment><comment><USER11> Cool idea, but that logo just reads as "preadsheet", which, is not exactly positive.

<comment><USER12> Good call out. I just want to add that the issue is exacerbated on a mobile phone. iPhone 6, portrait mode, the "S" and "preadsheet" are even on different lines!

The linewrap goes away when I rotate to landscape mode.

<comment><AUTHOR> Thanks for the feedback, that will get fixed soon.

<comment><USER13> Also, you mis-spelled "guarantee" under "99% uptime"...

<comment><AUTHOR> Fixed, thank you.

</comment></comment></comment></comment></comment><comment><USER14> I'd love to see this concept taken a step further and be able to write back changes (within reason, of course) to a SQL database.

The piece I'd most love to see is some form of editable Pivot Table, where the changes get written back to the appropriate place in the database. For example:

        CREATE TABLE Balances(Account varchar, Scenario varchar, Amount numeric, primary key(Account,Scenario));
        -- Pretend that this is pre-populated with all Account and Scenario combinations

Using this schema, I would want to get a Pivot Table out of this where Account makes up the row labels, Scenario forms the column labels, and the Amount values are the data. Where the magic happens is that I want to be able to make changes to the amounts and have it write those back into the database with the appropriate UPDATE statements.

<comment><USER13> Be prepared for a bill from your DBA for his/her blood pressure medication then... or the accounts team when they realise that a missing conversion of a string to a numeric caused you to zero out every customer's account balance... ;) (Based on real world experience with my clients over 3 decades)

Even 20 years ago good old Microsoft with their MSQuery capability in Excel stopped you from doing this every way they could.

<comment><USER14> Depending on how it's done it can be perfectly safe.

I've actually built a thing, in Lazarus of all things, to do this very thing. Unfortunately it's very specific to my use-case, but it is "safe" in the sense that it doesn't screw things up too badly. My particular use case is actually very spreadsheet-like, but I also want some things that are a lot easier to do in SQL than in Excel.

My use case is to have a tool to help me evaluate monthly financial statements for a smallish organization, enter my own adjustments, and come up with a final statement.

It's spreadsheet-like in the sense that I enter everything into a grid of rows and columns. The rows are accounts (in the income statement sense, not customer accounts), columns are a "type" (e.g., actuals, my adjustments, adjustments made by the auditor, adjusted actuals, budget, budget vs actuals, etc). Some accounts and some types are calculated, thus read-only in the table. There's also a drop-down at the top to select a period.

Basically, it's everything that a basic Excel Pivot Table does, but database- backed.

My Lazarus program lets me fill in that table however I want, when I hit save it persists it all to the database and runs a stored procedure to recalculate all of the calculated values. The database makes sure that I don't try to put a string in a numeric field, and it (PostgreSQL) is smart enough not to convert strings to zeroes.

The thing that makes this better than a spreadsheet is that I can just add a new account/scenario/whatever and run a stored procedure to insert the missing rows in the data table. When I did a similar thing with Excel, it was easy enough to insert rows. The hard part was inserting all of the rows everywhere they needed to go (I had a tab for budget, a tab for actuals, a tab for adjustments, etc) and updating all of the formulas.

</comment></comment></comment><comment><USER15> I created something simpler but based on Google Docs and just retrofitted promises into it: [https://github.com/franciscop/drive- db](https://github.com/franciscop/drive-db)

</comment><comment><USER16> Cool idea. We've built a spreadsheet-powered web platform (Cloudstitch - <USER2> S15) that lets you publish web forms and widgets that rely on spreadsheets as a backend.

Several folks use us just for the spreadsheet API -- as this service seems oriented. We provide a simple, common API that can talk to both GSheets and MS Excel 365, support various forms of row-level access control, and Ruby on Rails-like join syntax. Would love to hear feedback.

</comment><comment><USER17> I was an Excel expert before becoming a sql expert. Following this I changed the way I created large excel models, now 90% of my data is in Excel tables. The main benefit of these is they are much easier to use and manage than range names and the ranges automatically change their size to contain the data. Wish ms would add unique row ids (as we'll as the unique column ids they have) is a bit cumbersome having to setup index match everywhere to link rows in different tables. It's amazing what you can do with sumifs and countifs these are far more powerful then the sumif - very similar to sql where clause, with multiple criteria such as <= , works with text and numbers. I used to use tons of pivot tables but no longer, they are too unstable and confusing and very hard to format nicely.

<comment><USER18> Any good resources you used to learn this (to replace pivot tables)?

</comment></comment><comment><USER19> pretty cool - I have been a fan of tools like Airtable.com (IMHO the best cloud spreadsheet I have seen). In my own startup, I have hacked together a version of a cloud spreadsheet using Handsontable + reactjs + flask api.

Can you talk about the stack you are using ? really interested to hear about it.

<comment><AUTHOR> Thank you for the kind words!

Airtable is really neat indeed. But SpreadsheetDB aims to be more a database with an alternative paradigm than an actual spreadsheet editor.

Regarding the stack, it is made with Go and Postgres.

</comment></comment><comment><USER20> Not sure what pain problems this solves. You can already programmatically access and manipulate Google Sheets.

And no, you are not going to run in to their upper bound limitations on rows and columns often.

</comment><comment><USER21> Aka Access?

<comment><USER22> SSSh - we like reinventing the wheel in web based form!

</comment></comment><comment><USER23> Somewhat related. I've been using AirTable ([https://airtable.com/](https://airtable.com/)) to manage my consulting startups clients and even track hours. Absolutely loving it.

You define tables and scheme in their beautiful excel like web interface. AirTable then automagically generates a RESTful API you can build on-top of. They even have a great Node.js ORM[1] library. Finally, you can export public embeddable forms for inserting data into tables.

I'd love to see somebody create a React based front-end that pulls data and schema from AirTable and automatically creates a CRUD interface like Rails does. All inclusive authentication (Twitter, Facebook, GitHub) and user level permissions.

[1] - [https://github.com/airtable/airtable.js](https://github.com/airtable/airtable.js)

</comment><comment><USER24> There's some related research out of UIUC that's pretty neat. [http://dataspread.github.io/](http://dataspread.github.io/)</comment>


The Obvious UI Is Often the Best UI - <AUTHOR> https://medium.com/google-design/the-obvious-ui-is-often-the-best-ui-7a25597d79fd <comment><USER2> Kind of funny that this is written by Google, responsible for some of the strangest UX decisions. Just look at Gmail. In the single email view there are 5 different toolbars, at different levels of hierarchy. Why is forward at one level, but archive at another? Why are there two sets of drop down menus? Maps is another disaster. Watching my relatively non-technical partner attempt to navigate Maps is quite eye-opening - different panes sliding in and out, Navigation, Places and Maps often conceptually colliding with each other leading to all sorts of confusion (unless you're very familiar with the Google suite of products).

<comment><USER3> In all fairness, our UX/UI design studio [1] has worked with engineering teams of big companies. Be it Google engineers or others. The problem, almost always, is that the designers try to design simple UX logic - Engineers try to implement that logic - but someone higher up urges those engineers to add ABC and XYZ. All resulting in an unclear direction, where the engineering teams usually lean towards their boss' opinion. And, unintentionally, remove any logic that was initially part of the design process. To design better products, there should be a better balance between designers & engineers. Adding one guy to your team to 'make this crappy looking prototype pop' isn't going to be very helpful for your users.

[1] [http://fairpixels.pro](http://fairpixels.pro)

<comment><USER4> We have known for over twenty years that most problems with software come from the requirements phase.

We need to stop accepting that we are the guilty party and trying to get our house in order while the one next door is engulfed in flames.

The problem is not in how we track our time. In how we organize tasks, in how we deal with technical debt, long-term maintenance, engineering disputes. Documentation.

Our problem is in being ill-informed consumers of requirements information. In accepting it instead of sending it back to be done over and refusing to start on anything other than basic R&D until it's sorted. If people aren't told in a clear manner why what they've done is wrong how will they ever improve? And if they know we'll do it anyway, why would they bother changing?

<comment><USER5> Holy Christ, I'm like a Junior Dev and once got into an argument with the CEO of the conglomerate I work for after a town hall meeting about how agile was basically only gonna accelerate how poorly we research "the problem space" as I called it.

She replied that we weren't gonna do waterfall and that the data supported agile as the company wide prerogative.

I replied that what I was asking for wasn't necessarily waterfall, but I also had no other term to describe it, and so she shut down the conversation completely by going, "I'm sorry, but the data supports agile. This conversation is over."

It struck me at first as "What the fuck, seriously!?" but then I considered she probably wasn't the one who made that decision or pushed it, but also that I wasn't maybe being clear.

So it's helpful to hear that this a bigger issue throughout the industry from a vet Ave not just local to the company I started my career at and so have no other frame of reference

<comment><USER6> No offense, but this doesn't read as a situation you should feel vindicated about. Engineering management is a complicated beast that the average junior dev doesn't see all the dimensions, let alone the nuances of. Town hall meeting or not, the "CEO of a conglomerate" probably doesn't want an admittedly inarticulate opinion on what project management style not to use, especially without a clear alternative being suggested.

<comment><USER5> I don't, and my coworkers laughed at me when I relayed that conversation to them, I feel vindicated the issue around requirements gathering, and the effect that has on development, isn't unique to my company.

</comment></comment></comment></comment></comment></comment><comment><USER7> It's like modern developers are slowly rediscovering things we knew when the Macintosh was released in 1984. Maybe in a few decades we can have computers that don't suck again.

<comment><USER8> The Macintosh had most commands hidden in menus. The lucky thing was that there wasn't space for a lot of commands. The writer of this article would probably recommend toolbars, which were introduced much later, possibly by Microsoft in one of their Windows applications.

<comment><USER9> Hidden is an interesting way to descibe menus. The UX people at the time called that making all options visible since you could click on the menus and look at all the options. They also recommended the menus not remove options but just gray them out if they weren't available.

This was in contrast to lots of software at the time which was all hot-key based such that the only way to know what options there were was to look in a paper manual.

<comment><USER8> One of the motivations for toolbars (and the ribbon) is that there is a large group of users who never look inside any menu. Many users do not know about Undo. Many word processing users are unaware of things like tab stops, automatic indentation, line spacing, and styles. I have known an otherwise intelligent user who did not know that the shift key could be held down to get a capital letter - they used the caps lock key to get a capital and turned it back off after typing it. It's pretty amazing what is not obvious.

</comment></comment></comment></comment><comment><USER10> So true. So many designers try to be too clever, and bad UI is the end-result. Non-obvious design is excusable proportional to how-often I'm going to use something AND how many steps it takes away from me. Non-obvious design is really only good when it saves people time, but people will only put up with time-saving UI when they are going to be using a UI often. For example, Spotify's UI is a little counter-intuitive at first, but I use it so frequently that it's okay and I know how it works now.

<comment><USER11> Spotify are masters at hiding information.

The only way to actually see full track names or artist lists is to wait for it to scroll by in the 'currently playing' view - you can't see the full name of the song before you play it.

There's no way to see label or release year. There's no way to see a readable version of the cover art.

I could go on.

<comment><USER12> Agreed. Spotify's UI looks nice. That's pretty much the only nice thing I can say about it.

This thread I think highlights the absolute dumpster fire that is the insane design choices they've made: [https://community.spotify.com/t5/Desktop- Linux/adding-an-alb...](https://community.spotify.com/t5/Desktop-Linux/adding- an-album-to-the-queue-adds-it-to-the-front-of-the-queue/td-p/2910397)

<comment><USER13> As I was reading this wonderful thread on mobile, I got a hilarious popup asking me to rate my experience and scrolling my page all the way to the top. Hilarious!

On the plus side, their metrics will show them I now visited the web site two times as I intend to go back and continue reading. That's engagement for ya!

Edit: there was only one reply left :(

</comment></comment></comment></comment><comment><USER14> Sometimes a word is worth a thousand icons.

[https://blog.codinghorror.com/sometimes-a-word-is-worth-a- th...](https://blog.codinghorror.com/sometimes-a-word-is-worth-a-thousand- icons/)

<comment><USER15> But I don't know what "BT" does, either.

<comment> mark-r When I saw your comment my first thought was "Bluetooth" but in the context of the article, I can't figure it out either.

The Microsoft Word example is terrible too. The ribbon didn't fix anything, there's still too much to fit on screen at once. The old menus and toolbars were at least scannable, since everything lined up; the ribbon requires much more hunting to find what you need.

<comment><USER16> The Ribbon is context aware, unlike the old toolbars. So if you're in a graph, you'll see the graph design Ribbon, if you're not then you won't. This gives users less they need to scan and or ignore.

Is the Ribbon a panacea? Absolutely not. But I'd respectful disagree with anyone who claims it is "just as bad" as the old toolbars. They made a lot of accessibility improvements and reduce the training curve substantially.

<comment><USER17> I'll go along with saying it's not "just as bad"; it's far, far worse, _especially_ when training. Disappearing things are _incredibly_ disorienting to non-expert users.

<comment><USER16> It is worth stating that in neither case does it function without a relevant item selected.

Meaning with the graph design toolbar, it would be visible, but do absolutely nothing until a graph is selected. With the Ribben it appears when the graph is selected.

I don't see how a disabled toolbar, with no clue how to enable it, helps with user training or clarity.

<comment><USER18> The disabled toolbar is easier because it still gives context and confidence you are looking in the right place.

'This is what I want...hmm...how do I make it work?' is a far easier process than 'I can't find what I want...where on earth is it?..does it even exist?'

<comment><USER19> And that waste of screen real estate necessitates other design tradeoffs that are more sub optimal than the ribbon.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> This is exactly my problem with gesture based interaction, especially on the iPhone (I don't know if it's better on Android). The gestures are almost always not obvious. There's simply no hints that their are available or what swiping the screen in circles and flicking the home button might do. It may get you one step back in your browser history, it may do nothing.

That would be fine, if gestures where complementary to on screen navigation, but often the gestures are the primary "UI".

<comment><USER21> Even for on-screen controls, we're missing tooltips on hover which I think are a crucial part of discoverability for programs on a desktop PC. You don't get that on mobile (at best you get a 'new user tour', and have to remember every button up front, or pity you).

Maybe one day they can get the camera to do some creepy eye scanning and pop up tooltips based on what we are staring at.

<comment><USER22> it is a convention in android apps to show a toast message as a tooltip when you long press on a button.

</comment></comment></comment><comment> mark-r The most non-obvious thing I've seen in modern software is the hamburger menu. Now that I'm used to it it's OK, but for a long time I didn't realize that the hamburger icon would bring up a menu and there's a lot I missed.

<comment><USER23> Our app is used by quite a few non-technical people. And we are in the process of figuring out something to make the hamburger menu more obvious. Lots of people still don't know that it's a menu.

<comment><USER24> I've been struggling with this, too. I was particularly frustrated by it last night and knew I needed to change the hamburger menu but hadn't really decided how so I put a grey placeholder button that said "START" a la Windows 95. Super ugly so I wouldn't forget to fix it. Except I totally forgot to fix it and pushed it to production. First comment I got this morning was how great it was.

I'm hoping I can find a better solution because I really hate it but at least it's "obvious" now.

<comment><USER25> I'm hoping a toolbar along the bottom does not work for your app, because I think the Start menu thing is brilliant. Your users have trouble with the hamburger menu that's common in newer UIs, so give them an older UI!

<comment><USER24> Well I waited all day for someone to tell me how awful it is and... I'm still waiting. So as much as I hate it, the BUB (big ugly button) does indeed live on!

</comment></comment></comment></comment></comment><comment><USER26> > session time increased 70 percent, and daily active users increased by 65 > percent nearly overnight

They never argue for why increase of session time is seeing like something good. For the user, if they can do something quickly, they can spend less time with the software. The "65 percent increase in daily active users " something that happened as a effect to making the application more difficult to use.

"Increased usage" does not automatically mean the thing you are building is actually useful. A really good tool does it job and then gets out of your way.

Also, looking at the "Polar app" screenshot, not only has the top part of the application changed, but the lower menu is completely gone? Seems like a bigger change than the one on the top.

At this point, I think the UX of the application is way more important and worth doing user testing with, seeing the nitty-gritty of what's happening with the user and the application. Maybe Google did this, but judging by their UX in their products, they are all about those metrics instead.

<comment><USER27> If you read the article the increase in use is due to the increase in use of features that were formerly hidden.

<comment><USER26> The only example of actual increase of use in a particular feature is this one: [https://miro.medium.com/max/2400/0*24guSnnmXQu2zi3n](https://miro.medium.com/max/2400/0*24guSnnmXQu2zi3n) (the Google Translate example)

And in that it's not even just about icon vs icon + text, but two very different kind of icons... One is a snake (?) and the other one a pen.

Edit: Also, want to answer directly to "the increase in use of features ": that also doesn't necessary means it's good for the user. Maybe they don't actually have any use of it, and what they could see before on the main page, they now try to find.

Point being, designing UX after metrics is a bit pointless, as it doesn't show anything that you should really care about when solving someones problem.

</comment></comment></comment><comment><USER28> Good that they are learning , because their designs are awful. I m struggling to understand why they consider their new adwords and adsense and search console an "upgrade". For example, I was searching the button to add a new campaign for 2 minutes between endless spinners, progressbars and "cards". There is absolutely no hierarchy in the page, even though the concepts campaign > ad group > ad are there. I don't even fathom how they manage to make such bluders on something simple

Gimme back a simple 90s design with a menubar and a folder tree on the left. Or a command line. Those UX were genius. These new ones ... i dunno

</comment><comment><USER15> A.k.a. the [https://en.wikipedia.org/wiki/Principle_of_least_astonishmen...](https://en.wikipedia.org/wiki/Principle_of_least_astonishment)

</comment><comment><USER29> Just want to recommend "The Humane Interface" by Jef Raskin.

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

> Jef Raskin ... was an American human–computer interface expert best known > for conceiving and starting the Macintosh project at Apple in the late > 1970s.

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

<comment><USER30> Good suggestion. I got to review The Humane Interface in its later stages and it hugely influenced the way I design.

It amused me to note that the manuscript came in the form of double-spaced Courier with hand-drawn illustrations. That seemed odd from a key designer of the Macintosh, which introduced the notion of fonts and page design to regular users. But he didn't have to do page design for this; that would be done by actual designers at the publisher. He picked the interface that did what he needed and left the rest of the job to somebody else.

</comment></comment><comment><USER31> Article buries the lede: do usability testing.

It links to RITE. [https://en.wikipedia.org/wiki/RITE_Method](https://en.wikipedia.org/wiki/RITE_Method) Sure, sounds reasonable.

TLDR: There is no obvious UI. There is only validated UI.

\--

Bad management is bigger challenge than good design.

Too many times I've had drive-by management (pointy haired bosses) offhandedly override finely crafted user interfaces, tested and refined over months with real end users, forged by trained, experienced professionals.

Designing user interfaces is even more fun and rewarding than architecture. Which is why I gave up.

<comment><USER32> YES. And usability testing doesn't have to be anything fancy — DO USER INTERVIEWS! Even a handful of 30-minute sessions watching them use the application will have tremendous ROI!

</comment></comment><comment><USER33> I am all for using text in place of icons almost always. I read text fast. I have memorized the match between these symbols and their meaning and would like to capitalize on that learning.

</comment><comment><USER34> Does anyone else find Hulu's new(ish) UI nearly impossible to navigate? Especially on smart TV apps, but also web and mobile.

Trying to replay the previous episode of a show is one of the most frustrating interactions I have with any piece of software. They fill the entire screen with pilot episodes for a half dozen other shows, but can't find anywhere to put a "back" button?

</comment><comment><USER35> What's funny about the bottom navigation menu is that's how iOS was designed from the start. All the first apps (pre-App Store) and the first wave of App Store apps all used it. Then apps started to get busy, so the bottom menu was removed. Now people have realised if you make your app do 25 things rather than 5, it's just too complicated, and we're back full circle.

</comment><comment><USER36> Interesting that iOS has had bottom navigation all along and Apple gets criticized for never changing things. Meanwhile Google adopts it after ditching their own terrible UX design and gets lauded for innovation.

<comment><USER37> You seem to imply that iOS hasn't been lauded for it's innovations.

<comment><USER38> I don't see that implication. I mean, the article is basically Google taking credit for going back to user interface design principles that Apple pioneered 12 years ago; whether Apple got its kudos back then has no bearing on whether Google's disingenuously backtracking on some of the major design features of Android's HIG and much of what makes the Material design … well, Material.

</comment></comment></comment><comment><USER39> Seems this whole concept is also obvious. UI remains as a problem simply because it's a problem pertaining and invented by nerds. People with common sense don't recognize the existence of UI.</comment>


Gig-Economy Workers Are the Modern Proletariat - <AUTHOR> https://www.bloomberg.com/view/articles/2018-09-25/gig-economy-workers-are-last-of-marx-s-oppressed-proletarians <comment><USER3> I have a pet theory that goes one step further.

In _Discipline and Punish_ , Foucault talks about how in the early modern era, the actions of subordinate individuals (workers, students, soldiers, etc.) became increasingly regimented through more and more precise specifications of procedures as sequences of elementary actions. Then in the 19th and 20th centuries, we started to see "rationalist" economic efficiency projects like scientific management/Taylorism, which essentially tried to deskill factory workers by fragmenting their work based on time and motion studies.

The gig economy is the neoliberal revival of these scientific management principles, plastered over with the neoliberal ideals of marketization and entrepreneurialism. Just like before, it aims to improve efficiency by quantifying and compensating work at finer-grained scales than ever before.

It has the potential to drastically increase economic efficiency, but at the expense of financial security and the psychological wellbeing of entire generations.

<comment><USER4> What do you mean by economic efficiency? It seems like the model of a lot of gig jobs encourages the employer to waste the worker's time.

This happens because the employer pays per job. For example, Bird and Lime waste workers time by letting them all chase after the same scooters to be charged so a worker might spend time going to pick-up a scooter only to be beat to it by another by a few moments. It seems highly suspect that this is the most efficient way to get this done unless your idea of efficiency only means lowest cost to the company.

<comment><USER3> I meant something like "fraction of the employee's time spent on what the employer considers to be productive/useful work".

Contrast it with a typical salaried job. In such a position, people basically get paid to take bathroom breaks, chat with coworkers, check social media, eat lunch, etc. and they might not even be in the office for the full 40 hours a week. They get to eat up even more resources by participating in benefits like health insurance, paid time off, and pensions. Isn't that _such_ a waste of resources?

<comment><USER5> Marx discussed this thoroughly. The same thing is happening to salaried jobs, just to a lesser extent. This phenomenon was one of his bigger objections to capitalism.

All productive labour is being broken down into pipelined work streams where any individual worker performs as simple and as well defined a task as you can give them, and performs that task all day every day. This increases the economic efficiency of the worker, at the expense of depriving their work life of any meaning and turning them into an unremarkable, disposable, exchangeable cog in a machine.

Pretty much every industry in the developed world follows this trend, including tech.

<comment><USER6> I can say this absolutely exists in Corp tech shops.

I worked in an environment where the CIO would frequently refer to the tech staff as "the factory". I often encouraged this CIO and others in the management team not to because it was demoralizing and not true - the work was highly skilled, highly dynamic and not repetitive.

Oh and if you treated tech work like a factory it looked like lots of management overhead, poor execution from low skilled workers, predictable timelines (long timelines), and last but not least higher cost.

<comment><USER7> Well it has existed throughout history.

We haven't discovered great ways of winning wars or building empire without being inefficient and treating people like pawns.

Our history books don't spend time making us think about the morale of the front line soldiers in Alexander/Genghis Khan/Napolean/Stalin's armies. Instead we have entire shelves of books devoted to the mindlessly ambitious guys at the top of the food chain.

We make Edison an icon and give Marconi a Nobel, but if you know your history, these guys ended up at the top of the food chain because they were ruthless. It hardly mattered what Oppenheimer/Einstein/Feynman thought about the nuclear bomb. Because they were the "factory".

Much like the "factory" of people at the pentagon/wall st/google/facebook etc.

We still haven't figured out a good way to keep "factories" running or expand/defend empires without propping up mindlessly ambitious people. The inequality rates suggest our faith in them is at an all time high.

Our current default method much like the cold war or a chimp troupe, is to keep mindlessly ambitious people at the top of the food chain constantly paranoid about each other. Ofcourse we can do better. But the agency isn't there yet. For example, Facebook could turn into a Wikipedia type entity by tomorrow if the "factory" of workers revolt.

<comment><USER6> I'm not sure Oppenheimer/Einstein/Feynman would have been referred to at the time as "the factory" nor would I imagine anyone consider their work needing to be highly efficient nor would I imagine anyone would dream the appropriate management style to be to eek out all the efficiency in what they were building.

I don't disagree with your thoughts on charismatic leadership but the response seems misplaced or slightly off topic.

I think factory management and motive is slightly different than dictatorial/power leadership.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> I know it pays little and is repetitive. But my question with this kind of analysis is always: why do they keep finding people to do it?

There is another problem which I find more worrisome: we are expecting gig workers (and most other workers) to subject to hardcore competition for their jobs, wages and terms. The argument (also my argument above) is that it leads to efficient and honest outcomes because it involves little to no coercion.

But at the same time, governments are colluding with and bailing out the financial elites with every market crash. We did it with LTCM, in 2001, in 2008 and who knows when again. The bailout involves mass coercion of savers and an implicit punishment of those who were careful.

It may have profoundly changed the mentality of the wealthy. For the last 10 years, "if it gets bad enough, there will be a bail out" has become standard investment wisdom.

Socialism for those who own, free markets for those who don't. This contradiction is what'll ultimately do us in.

<comment><USER9> It's because some people have low IQ so they are not able to navigate through the meandering job. All they want is a simple job with a well defined task on which they can speed up and later achieve more objective output and not have to please a boss for subjective remark.

<comment><USER10> Actually from what the study says a sizable chunk does this because they prefer work from home or unable to work in an office. Some anecdotes are provided of people with sick parents or young children who for them taking a full time caretaker would be a net loss.

<comment><USER9> The reason they give is based on self evaluation.

People are particularly bad at self evaluation.

Keep in mind, most people don't know what their IQ is. And most don't consider themselves to posses less intelligence as they don't know what more intelligence feels like.

See this video for relationship between job expectation and IQ: [https://www.youtube.com/watch?v=fjs2gPa5sD0](https://www.youtube.com/watch?v=fjs2gPa5sD0)

</comment></comment></comment></comment><comment><USER9> Gig economy isn't bad if state ensures universal healthcare, food, housing etc...

Entire economy should be setup this way so that no one is tied to a specific career outside of the limited number of professions like doctors etc...

<comment><USER11> If the state ensures healthcare, food, housing so few people will want these jobs that the business model will break.

<comment><USER12> No, plenty of people would do gig economy jobs if they knew they wouldn't have to worry about rent and food. The flexibility is way worth it. I'm pretty sure I even would and I get paid way above the median income.

<comment><USER11> The 'gig' economy is new in the west because a pool of desperate labor has reappeared (after a hiatus of many many decades). It never really went away in countries like India.

People, on the whole, would prefer to have more meaningful jobs rather than delivering burgers to office workers.

<comment><USER13> I don't think full-time jobs are, in general, any more "meaningful" than gig- economy job, but they are almost universally more stable, predicable, and better-paying - which is what is of primary concern to most workers.

</comment></comment></comment></comment></comment><comment><USER14> Yes, the proletariat disappeared. That's true. Enter precariat instead. Awesome change isn't it!

<comment><USER15> The proletariat did not disappear, it didn't go anywhere. The working class does not own the means of production, and gig economy workers do not own their means of production either. The majority of the country are wage slave proletariat.

<comment><USER16> As you can notice parent introduced _precariat_ , which in turn is new type of proletariat.

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

</comment></comment></comment><comment><USER10> "In that classic form, Marx's favorite class doesn't really exist in the rich world today, except in the so-called gig economy."

What? how? What about service workers (which constitute a major section of US workforce)? Do burger flippers at mcdonald's own their means of production? Cleaners? Waiters? Heck even truckers don't own their truck.

On the contrary, in the classical sense most gig-economy workers (at least those we associate with the gig economy) are not Proletariat - uber drivers own their car, AirBnB own their houses, Marketplaces (etsy, fiverr etc... which Amazon turk is nominally a part of) own the tools and knowledge to make whatever they sell.

Amazon Turkers are really not representative of the Gig Economy (a term that came much later then Amazon's Mechanical Turk) and at least for me I don't really think of them as part of the Gig Economy.

<comment><USER17> Crucially, gig workers do not own an important part of their means of production: the platform that processes rides/rentals/etc, payments and users, which allows the traditional bourgeois to extract surplus value (Mehrwert) in the usual way, and the workers fit the definition of proletarians.

<comment><USER10> True, but they own some of it, and there is competition between platforms for them (I.E. lyft vs uber). In fact many people "work" for multiple platforms. It's similar to a farmer selling his ware in a marketplace, which he must pay rent for. Would you say that because he doesn't own the marketplace (or store) he doesn't own his means of production?

Now the question is whether they must own all of the means of production to be considered bourgeois? I would say no, especially in today's world, where most production is a complicated multi-tiered process.

But even if you do think so, they are still much better off, Marxist-wise, from virtually every service worker, who own no means of production.

In any case, that doesn't mean that there is no exploitation or that the gig economy should not be regulated, but it really doesn't have anything to do with Proletariat.

<comment><USER18> What means of production do they own? Surely that's the platform app and backend, which offers a price?

A farmer on a market stall can price however he likes.

<comment><USER10> The car (Uber,Lift), the house (AirBnB), the tools for making what they sell (Etsy,fiverr).

Only Uber (and other ride-haling apps I suppose) forces a price, all other marketplaces the price is set by the seller - AirBnB, Etsy, fiverr. In Amazon Turk the seller and buyer roles are reversed and Turkers only accept work that pay enough for them.

I would say it's more a product of the industry they are in - <USER2> is usually regulated to have a fixed price almost everywhere - then the nature of marketplaces in the gig-economy as a whole.

<comment><USER19> Uber does not force a price.

It is up to the driver to accept the fare.

<comment><USER12> I've been told that uber hides some of the information (either the price or the distance the driver has to go or both) which makes that not quite true.

<comment><USER20> I currently drive for Uber and both of these are 100% true When a request pops up all I see is the estimated time it'll take me to get to the pickup point, I also have exactly 10 seconds to accept a request.

<comment><USER19> Is this also true for Lyft?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER21> Plot twist: There is no such thing as "the middle class".

<comment><USER22> Exactly right! The reason that politicians talk about there being 3 classes is that 3 is a nice, round number that just sounds nice, and also it allows everyone to pretend that they're middle class.

<comment><USER23> There's a collosal social difference between living paycheck to paycheck without any disposable income, thus depending on retaining your job to be able to keep a roof over your head, and being economically self-sufficient to the point where you are free to take multiple holidays throughout the year and even be free to quit your job and live off your savings through long stretches of time.

Middle class does exist, and it's existence is rather obvious. Trying to conflate middle class with low class or poverty makes no sense at all, because the plight of a low class worker has absolutely nothing in common to the problems and challenges faced by middle class workers.

<comment><USER24> The rights you have as a member of the 'middle class' have much more in common with the lower class than the highest class.

It is also a lot easier to move from middle class to poverty, than it is to fall from the upper class.

Yes, it feels like there is a 'colossal difference', but it's not nearly as big as the difference between middle class and the ultra-wealthy.

</comment></comment></comment></comment><comment><USER25> Where would the employment rate be if you eliminated "gig economy" jobs?

</comment><comment><USER26> I'm building _magic software_ that will require humans to operate and train. I really want them all in house for security, so I'm going to start hiring locally here in Colombia, and fill houses as necessary.

But anyway, I am hoping to make this role of teaching and babysitting AI as fun and rewarding as possible. Like a fun video game, along with a sacred duty to take care of users and protect their privacy.

I will also ship some form of this to end users eventually, so that it can run entirely offline, or at least without our services.

I'm thinking that systems trained with interactive learning might create an entirely new category of job, _operating AI_. Sure, trained domains will require less babysitting over time, but that just frees up the labor force to expand to more domains.

</comment><comment><USER27> Proletariat? I think the proper word is Precariat.

</comment><comment><USER28> Imagine getting paid a salary to recite tankie nonsense.

</comment><comment><USER29> I have deleted my whole comment. I didn't mention the Labour party, and I don't think party politics belongs here, but commenters tried to make it about the Labour party. I hope the mods kill the whole thread

<comment><USER30> Not really, they are constantly raising the issue of zero-hours contracts. Nobody in the Labour Party talks about coal miners because there are none left.

<comment><USER29> I didn't specifically mention the Labour party (because they are not the only socialist group, and also within my life-time were considered a centre-left party) and don't like party-politics on HN, but it seems to me that coal mining is still a big part of their identity[0].

I also wasnt talking about zero hour contracts at all???

I hope HN doesn't become yet another arena where you can't discuss broad categories of political theory without being savaged by Corbynites.

[0]:[https://www.theguardian.com/politics/2017/jul/07/corbyn- crit...](https://www.theguardian.com/politics/2017/jul/07/corbyn-critics- banned-durham-miners-gala-reception)

</comment></comment></comment><comment><USER31> Mechanical Turk and Uber are likely to be taken over by AI in the next 10 years or so.

So the situation will probably get worse.</comment>


Circle Medical (YC S15) Brings a Full Service Medical Practice to You - <AUTHOR> http://techcrunch.com/2015/08/17/circle-medical-brings-a-full-service-medical-practice-to-you/ <comment><USER2> Interesting concept, but I'm skeptical that the economics work out. It's true you save on office space, but you lose on volume of clients (patients) you can see at any given time.

On top of that, in a practice, doctors are able to "outsource" a lot of the low-skill labor to either office managers or nurses - the receptionist takes your paperwork and handles the cancellations, the nurse draws blood and takes your vitals, the doctor just rolls in for 15 minutes and listens to your complaint and read the results.

There are already doctor practices that are doing this, but they're going the opposite direction and charging much more or annual fees, for the convenience factor of having the doctor come to you.

<comment><USER3> For those of you in sfbay, one medical ( [https://onemedical.com](https://onemedical.com) ) is awesome. For $150/year, you get doctors that read and answer email; the ability to get same day appointments, though not necessarily with your pcp, but with a doctor; online appointment scheduling; and a phlebotomist in the office (at least where I go). It's a huge time savings.

<comment><USER4> They've also done a good job at solving one of the plagues of the medical industry - hiring competent and friendly admin staff.

<comment><USER5> Circle Medical founder here. We like One Medical. They have really moved the ball forward in terms of patient experience. But why stop there?

</comment></comment></comment></comment><comment><USER6> FWIW, I haven't seen a doctor in years and I like the concept. I have a compromised immune system. I stopped going to see doctors in part because sitting in the waiting room with other patients tended to leave me horribly ill. Using a public bathroom used by other patients was also a serious problem. Etc. I have long lamented that doctors going to see patients was something we no longer did.

I hope you are very successful.

<comment><USER5> Thanks for the love!

</comment></comment><comment><USER7> "…the service specializes in things like annual checkups, flu shots, and blood tests… not just time-sensitive urgent care issues."

These tasks are generally left to physician assistants and nurse practitioners who are paid on average about half as much as primary care physicians (about 100k vs 200k).

In many states, they can be found practicing in pharmacies and supermarkets and seem to see around a half dozen patients per hour.

I think it will be tough for mobile medical practitioners to beat price/convenience levels of retail nurse practitioners and physician assistants.

</comment><comment><USER8> This idea has been around for a while and is really better solved by the concept of community paramedicine [1], which several areas in the US are currently piloting. Like other commenters have mentioned, the economics of having a physician perform these basic tasks severely limits the profitability.

1\. [http://www.naemt.org/Files/MobileIntegratedHC/UC%20Davis%20C...](http://www.naemt.org/Files/MobileIntegratedHC/UC%20Davis%20Community%20Paramedicine%20Report.pdf)

</comment><comment><USER9> When do you expand to Seattle area? I hate to wait for 2 weeks for visit and then it rains...</comment>


Handling Software Design Criticism (2007) [pdf] - <AUTHOR> http://www.wirfs-brock.com/PDFs/handlingcriticism.pdf

<comment><USER2> This really ain't rocket surgery.

           - Each point is to be made into a simple English sentence in passive voice with only the single point being made.
           - Each point is then assigned a corrective action.
           - Some corrective actions are corrections of the point.
           - Some CA get actual action.
           - Some CA get documentation or process actions.
           - The demeanor of the reviewed engineer should never be anything but humble and gracious. Use the CA process to explain away misunderstandings and errors in reviews. Don't do it in the meeting.
           - Zero tolerance of Klingon behavior among reviewers. The ideal reviewer sounds like Oscar Wilde.
           - Code reviews should be able to be done *WITHOUT* a meeting.  Take it to email or use the bug tracker to resolve any misunderstandings.
           - Never, ever use code reviews as part of performance evaluation processes. Ever.</comment>


Life of an instruction in LLVM - <AUTHOR> http://eli.thegreenplace.net/2012/11/24/life-of-an-instruction-in-llvm/

<comment><USER2> Can someone tell me what the advantage of emitting LLVM IR is, compared to machine code? I don't think I ever saw that clarified anywhere.

<comment><USER3> LLVM IR is a lot easier to generate than machine code and unlike machine code, it can be optimized after it is generated.

When using LLVM IR as a compiler target, you leave certain decisions to be made later by the LLVM to machine code compiler. In particular, you don't have to do exact instruction selection, instruction scheduling, register allocation (LLVM IR has infinite "registers") and memory allocation when compiling. The LLVM backend is very good at making these decisions and writing a compiler that is better than the LLVM backend would be years of work.

LLVM IR is also machine independent so you can write just one compiler front end that emits LLVM IR and compile that to machine code of many different CPUs. You can even distribute the LLVM IR bitcode and use the LLVM JIT compiler to assemble machine code at run time when you know exactly what the target architecture is and have optimized code just for that platform (CPU instruction set extensions, like SSE, NEON and other SIMD extensions, etc).

In summary, LLVM IR is a lot easier to generate than machine code and the LLVM backend will emit better machine code than a hand built backend (unless you have years to spend on it).

<comment><USER4> > LLVM IR is also machine independent

Not true. See [http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-October/0437...](http://lists.cs.uiuc.edu/pipermail/llvmdev/2011-October/043719.html)

LLVM IR is more abstracted than a concrete machine assembly language, but it still contains implicit and explicit signs of the machine it was compiled for, for example

* Types that exist in one machine and not another (e.g. x86_f80 does not exist on ARM).

* Endianness

* Structure alignment

As the link above says, LLVM IR is an excellent compiler IR, but it was never meant to be a portable machine-independent IR.

But it can be abstracted enough for some purposes, and some projects do use it for related things.

<comment><USER5> LLVM IR can be target-independent. It can also contain target-depentent pieces when compiled from a target-dependent language (like C or C++).

<comment><USER4> > LLVM IR can be target-independent.

Interesting, how would I generate that? What source languages are supported?

<comment><USER5> Look at IR as a layer of its own, separate from Clang. You can even use it as your source language (although it's inconvenient, of course). For example, the Kaleidoscope language developed in the LLVM tutorial is target independent. The same is probably true for high-level languages that had LLVM backends attached - i.e. Haskell, Emscripten (Javascript) etc.

<comment><USER4> In a theoretical sense, yes. But it would be very hard to avoid introducing nonportable elements in your code. There is no practical way to go from any existing language to LLVM and keep it portable, with any existing LLVM frontend that I am familiar with.</comment></comment></comment></comment></comment></comment></comment>


Optimizing Drivers and Vehicles at the Same Time - <AUTHOR> https://www.optibus.com/all-of-the-above-optimizing-drivers-and-vehicles-at-the-same-time <comment><USER2> Great description of the value of machine learning optimization in transit. I would think this will not only save an agency money but generate less air pollution.</comment>