The 8-Byte Two-Step - <AUTHOR> http://zinascii.com/2014/the-8-byte-two-step.html

<comment><USER2> Thanks for writing this. It's great to see more articles this in HN.

The assembly in the article looks like it was compiled without optimization, which is going to change the exact numbers quite a bit. Contrary to what it sounds like, "without optimization" really means something like "output some strange dialect of antiquated assembly that's 10 times slower than it needs to be". It's really only useful if you are debugging the compiler. In particular, it's pushing all the variables onto the stack even though it doesn't need to, so that they are there in case you need to check them manually. 99% of the time you want to be compiling with -02, -03, or -0fast.

With gcc -O3 for x64, here's what they look like. The functions are shorter, faster, and in some ways easier to understand:

      align_1:
            leal    7(%rdi), %eax
            andl    $-8, %eax
            ret

The first integer arg always comes in %rdi/%edi. The compiler has recognized the idiom, and transformed it into (x + 7) & (0b11..11000). LEA is "load effective address", and in this case is a slightly shorter way of writing 'ADD', but no faster.

      align_2:
                    cmpl    $8, %edi
                    movl    $8, %eax
                    jbe     .L6
            .L5:
                    addl    $8, %eax
                    cmpl    %eax, %edi
                    ja      .L5
                    rep ret
            .L6:
                    rep ret

"If x < 8 (jbe == jump before or equal), return 8. Otherwise keep adding 8 until it's greater (jump after), and return that". The return value is whatever is in %eax on return. The 'rep ret' is a funny way of saying return, apparently done to be slightly faster on ancient AMD processors. At this point it's cruft. And there is no real reason to have two return statements --- that's the kind of wacky thing compilers like to do even when optimizing.

      align_3:
                    movl    %edi, %edi
                    subq    $8, %rsp
                    cvtsi2sdq       %rdi, %xmm0
                    mulsd   .LC0(%rip), %xmm0
                    call    ceil
                    mulsd   .LC1(%rip), %xmm0
                    addq    $8, %rsp
                    cvttsd2siq      %xmm0, %rax
                    ret
            .LC0:
                    .long   0
                    .long   1069547520
            .LC1:
                    .long   0
                    .long   1075838976

The first 'movl' wipes out any bits greater than 32 if they are there. This is because x was defined as an int, and not a long. In general, you might be better off always using long unless there is a specific reason not to. Then we convert the int to floating point. Floating point on modern systems uses the 128-bit XMM registers that are also used for vectors. We put it into %xmm0, because that is register for the first floating point or vector arg. Keeping the result in %xmm0, multiply by what is presumably a floating point constant equal to ALIGN and then call ceil(). The result is also returned in %xmm0. Then because multiplication is much faster than division, multiply by ALIGN and then call ceil(). Then because multiplication is much faster than division, multiply by another constant that is is approximately (and depending on the value of the alignment, this might be a significant fact) equal to 1/align. Convert that back to a 32-bit "signed integer quadword" (siq) and return it.

The trickiness with optimizing (which is probably why you used the mangled unoptimized version) is that the compiler has a tendency to optimize them out completely so you end up testing an empty loop. Your choices are either work in assembly directly so what you see is what you get, or to be crafty and come up with something that prevents the compiler from doing so: a checksum, or perhaps a comparison that you know the result of but hopefully the compiler doesn't.

Here are the timings in cycles on a Haswell system. I compiled with '-fno- inline', which would be faster, but might skew the results more in this case, even though function calls are fast on x64.

baseline: 5.3 cycles for a loop that returns x and compares against zero.

align_1: 5.0 cycles including the loop. Yes, in this case adding the two instructions of the function actually took fewer cycles than baseline loop. It's more than ILP voodoo, it's a whole way of life!

align_2: 62 cycles per iteration. Horrible, but not as bad as the uncompiled mess. But it worth pointing out that while you don't want to use a loop here, there are much faster loops. Perhaps while (x % align != 0) { x++ }? This gets you down to 11 cycles, only 6 more than the baseline. Interestingly, it's this fast because the processor apparently can perfectly predict the number of loop iterations after the first 30, which is a little scary.

align_3: 19 cycles per call. Faster than the silly loop, but really not a way you want to approach this problem unless you've really thought through all the floating point details.

I put my code up at [https://gist.github.com/nkurz/985470b01b999e67d04b](https://gist.github.com/nkurz/985470b01b999e67d04b). At the bottom are more numbers provided by Likwid for things like number of instructions, number of branch errors, etc.

<comment><USER3> >In general, you might be better off always using long unless there is a specific reason not to

I don't agree. That's trading off useful cache for almost invisible micro optimizations.

As a general rule, it's always better to use the smallest size possible.

<comment><USER2> I phrase it as "might be" since I realize it's controversial, but I think that rule is outdated. Yes, having a large static array would be a fine specific reason to use the smallest size possible. But what would be the benefit when you are dealing with the argument to a function in an example like this?

Most of the time the argument starts in a register, is passed in a register, and returned in a register. Using a smaller size often just means that the compiler adds some unneeded conversions as in this case. Usually this doesn't matter, but when it does, the benefit is almost always in favor of the simpler rule of always using 64-bit variables.

<comment><USER3> One argument? Sure, probably no difference. When you start using longs as local variables and arguments, even if they're all in registers in one function, if you call other functions inside they are going to be pushed on the stack. It all adds up and suddenly you're getting L1 cache misses.

Anyway, unnecessary conversions mostly go away when you use link time optimizations (fwhole-program or flto in gcc).

<comment><USER2> A reasonable argument, although not one I seem to run up against, perhaps because I'm rarely concerned about high performance when writing functions with that many layers of subcalls.

By contrast, when trying to optimize inner loops, I frequently encounter cases where the front-end limitation of 4 micro-ops per cycle is a limiting factor, and getting rid of any extraneous instruction is a speedup. And rather than worrying about a deep stack causing L1 data misses, I'm more concerned with missing L1 instruction cache, or with the extra micro-ops causing me to miss the ~1000 slot decoded micro-op cache.

These concerns are clearly at opposite ends of the performance spectrum, and which should dominate probably depends on the problem at hand.

(I glanced at your comment history. Welcome to HN! You have good insights. Please stick around.)

</comment></comment></comment></comment></comment><comment><USER4> The floating point version is dangerous and broken on platforms that have 64-bit ints. (Not sure what happens with ceil and negative numbers, it _probably_ works, but I'd have to try it). And while not an issue here, since this looks like it's user-space code, it's bad to use floats in a systems programming environment (floats are often in registers that can't be modified or maybe even _referenced_ in kernel contexts without some save/restore shenanigans).

The loop version works poorly for large queue sizes, and if I saw this in production code I'd replace it immediately.

I'd be okay with a division and re-multiplication (likely going to be optimized by the compiler, through it's foolish to depend on this).

I don't see any problem with the mask/not/and solution. This has been a programming idiom for decades, and should be no more mysterious than (say) a doubly-linked list.

<comment><USER5> I agree, the mask/not/and is standard within systems contexts. It need not be cognitive overhead, not to be elitist but if you don't have a copy of hacker's delight or the ability to understand constructs like this, you have no business writing systems-level code.

</comment></comment><comment><USER6> Maybe you shouldn't care about cycles, but using a loop for something that can be done without branches is a definite cognitive overhead.

If we want to avoid bit twiddling, how about this:

(mqhp->mq_maxsz + MQ_ALIGNSIZE - 1) / MQ_ALIGNSIZE * MQ_ALIGNSIZE;

I would expect a compiler to emit the same instructions as the original, but at worst you would have an add and two shifts rather than jumps or complex float operations.

<comment><USER7> Provided everything is unsigned, this should result in something somewhat similar. I think this form also makes it clearer what's going on.

Assume MQ_ALIGNSIZE is a power of two. Then if N is the power, MQ_ALIGNSIZE is 1<<N. Then you can replace divisions by right shifts, and multiplications by left shifts, and turn the expression into (value+(1<<N)-1)>>N<<N.

Consider x>>N<<N. The (unsigned - i.e., guaranteed zero-filling) right shift discards the bottom N bits, and then the left shift puts the remaining bits back where they were. The net result is to mask off the bottom N bits of x.

Another way of putting that would be x&~((1<<N)-1) - hopefully that is clear. In our example, 1<<N is MQ_ALIGNSIZE. So we have x&~(MQ_ALIGNSIZE-1), or, overall, (x+MQ_ALIGNSIZE-1)&~(MQ_ALIGNSIZE-1).

I suppose it's possible a compiler could transform this, or the divide-and- multiply version, into the add-then-and version, given enough things that are compile-time constants. But personally if I knew the alignment would be a power of two - which it pretty much always is - I'd just write the code I want. Life is usually simpler that way.

</comment></comment><comment><USER8> I'd agree with his last sentence: "My guess, this was done more as an idiom of systems programming than as an optimization."

<comment><USER9> Doubly agreed -- similar patterns appear elsewhere to avoid off-by-one errors and bitmasking is fairly intuitive to anyone regularly working at that level. I was surprised at the author not recognizing this idiom, but you have to learn it sometime!

I was further stunned by the seeming naivety of the author's align_2() implementation, but then it does get the job done, eventually. My naive approach would've been roughly align_3(), but using integer math and modulus.

On the other hand, younger team members were recently stunned by code I did for translation of a binary protocol into more easily handled pieces using what I think of as typical idioms, so this article might get sent around Monday morning.

<comment><AUTHOR> Hi, author here. My align_2 implementation is indeed very naive. Part of that was to show just how much overhead a naive implementation could add, in this case 3 orders of magnitude. I'm also new to systems programming. This article should serve as a reminder to experienced hackers that idioms are often only obvious _after_ they've been explained. My last 4 years were spent working on a distributed database; I could bring up "obvious" idioms from that world that might perplex a kernel hacker.

But you are right, this is indeed a very obvious line of code once you understand it. Thank you for your comments.

<comment><USER9> The key being "once you understand it." I look forward to sending this around to make sure folks "get it" \-- that which I grasp intuitively is magic for them[1], and kernel hacking is rarely the deep topic people imagine it to be. I doubt I have the right perspective to explain this as clearly, and if I could, I lack the time to do so as deeply.

[1]Their words, heard within the past month.

</comment></comment></comment></comment><comment><USER10> It's a fun trick I've used for years, I think originally I gleaned it from [http://graphics.stanford.edu/~seander/bithacks.html](http://graphics.stanford.edu/~seander/bithacks.html) (or maybe not, now that I look through that page - though it is full of goodies)

</comment><comment><USER11> This is really neat, thanks for the thorough explanation.

I have banned myself from using printfs to figure out things like this. Instead I would use a debugger and breakpoints to view the live variables in their different data formats.

In GDB, that's p/t for binary and p/d for decimal.

</comment><comment><USER12> Thank you for the careful writeup and submission here. I recently picked up a copy of _Beautiful Code_ , but I was hoping it would have more stuff like this.

</comment><comment><USER13> Holy shit, mind blown.

I've done this before, but usually take modulo 8 rather than bitwise-and negative 7 as the final step.

<comment><USER14> Same, I'd write it out using modulo and would assume the compiler would figure it out.

        void *p = x;
        p += 7;
        p -= (p%8);

Now that I've written it out I suppose it's not any clearer than the mask method:

        void *p = x;
        p += 7;
        p &= ~7;

</comment></comment><comment><USER15> Another great article from that site:

[http://zinascii.com/2014/a-posix-queue- implementation.html](http://zinascii.com/2014/a-posix-queue- implementation.html)

</comment><comment><USER16> if you don't know history, you are doomed to reinvent it. The one thing you should realize is that in the past, people were not more stupid. They just had less, or different context. Regarding bit trickery, chess programming is full of it.

Curiously, it's also the area where strong static typing breaks down, as it is sometimes preferred to view the same set of bits as a value of a different type to be able to manipulate it in another way.

</comment><comment><USER17> TLDR: round a number N up to the nearest multiple of M

<comment><USER18> ... where M is a power of 2.</comment></comment>


Analysis of whether IMDB ratings suffer recency bias - <AUTHOR> https://kyso.io/KyleOS/movies <comment><USER2> This is definitely not the 'recency bias' I expected.

I've always noticed that when a show is released it gets WAY higher ratings in the first week or so of the release date. I've learned not to trust the ratings until at least a 2 weeks after a release.

It looks like this analysis focuses on the year a film was released. This seems like it would be a lot harder to determine because film quality changes (subjective) and the audience writing reviews is probably changing over time.

</comment><comment><USER3> It's well known that movie rankings do. This was key to the resolution of

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

The time series of reviews of movies like

[https://en.wikipedia.org/wiki/Sucker_Punch_(2011_film)](https://en.wikipedia.org/wiki/Sucker_Punch_\(2011_film\))

and

[https://en.wikipedia.org/wiki/Batman_v_Superman:_Dawn_of_Jus...](https://en.wikipedia.org/wiki/Batman_v_Superman:_Dawn_of_Justice)

tend to have many early bad reviews by mainstream people who can't get past things that they find squicky and the lack of the usual "Hollywood Happy Ending" but that get better reviews from "true fans" later on who enjoy the fact that the directors tried to make something different even if it was flawed.

<comment><USER4> A quick Google shows a few sites that keep history of IMDB ratings. Unfortunately they seem to concentrate on movies actually in the IMDB 250

Some interesting ones:

Avatar - [http://top250.info/movie/?0499549](http://top250.info/movie/?0499549)

Se7en - [http://top250.info/movie/?0114369](http://top250.info/movie/?0114369)

Heat - [http://top250.info/movie/?0113277](http://top250.info/movie/?0113277)

Star Wars: Episode VII - The Force Awakens [http://top250.info/movie/?2488496](http://top250.info/movie/?2488496)

Terminator 2 - [http://top250.info/movie/?0103064](http://top250.info/movie/?0103064)

Note: There seems to be a big shifts in movie ranks in May 2005 and July 2012, probably due to a change in the ranking formula.

</comment></comment><comment><USER5> Recency bias came up a few days ago in a previous HN submission by the OP, and the OP also commented in: [https://news.ycombinator.com/item?id=20099023](https://news.ycombinator.com/item?id=20099023)

In that subthread, I posted a heat map data visualization I made of IMDB rating vs. release year, which is suspiciously similar to the one OP made: [https://news.ycombinator.com/item?id=20099344](https://news.ycombinator.com/item?id=20099344)

It's not plagiarism, but if the OP got the idea for checking for recency bias from the HN thread, they should explicitly credit that.

<comment><USER6> Hey - not OP but I wrote the article. There was a lot of discussion about recency bias in that thread, including the graph you shared and I decided to expand on the analysis. Note there are a few other graphs in my post. I did just draw this up quickly yesterday. But you're right, sorry - I should have cited your comment in my post. Adding it now.

<comment><USER7> Hi, there are what seem to me (not a statistician) to be a number of serious errors in the article. The most egregious is the first conclusion, which threatens to undermine the whole thing.

> There does not seem to be any strong connection between number of votes and > a movie's IMDB rating.

Well, this just isn't true. I happen to know this because I've looked at this data before myself. The issue is that you're cutting off the graph at a maximum of 60k votes with no explanation or even pointing out that you're doing it! I'm sure this is just an honest mistake, but it cuts out basically every movie that is actually popular!

This slowly ate at me until it was enough to get me out of bed to redo this graph myself. I've uploaded my quick and dirty result in R here: [https://i.imgur.com/TTuCFEL.png](https://i.imgur.com/TTuCFEL.png)

As you can see from the graph, there's a direct and obvious link between the number of votes and the average rating. The reason I say this threatens to undermine the whole thing is that I also know from previous experience that more recent films tend to have a lot more ratings on average. This (naively) suggests to me that we should see some recency bias if only because more recent blockbusters get a much larger number of votes than others and the sort of people who vote on blockbusters have different standards for what makes a great movie. (Avengers: Endgame was briefly the #1 movie of all time on the top 250 list.)

I don't have time to plot all the different graphs you did, but perhaps you can recheck your results after fixing at least this issue, and get back to us?

<comment><USER7> Follow up: I redid one of the graphs to satisfy my own interest in the question. Instead of averaging over all the movies ever released like the article did, I averaged over all the _votes_. This was an attempt to answer the question of whether the average viewing experience of a film from year x is better or worse than that of a film from year y.

I found that there has been a noticeable decline in the average rating of over half a point (out of 10) since ~1930 or so. [https://i.imgur.com/bY9vPvk.png](https://i.imgur.com/bY9vPvk.png)

I think this should be explained in a combination of two ways:

* History acts as a filter. If I choose to watch a movie from 1947 it's probably because a lot of people over the years have said it's good.

* To some extent, older movies may really be better than more recent ones.

I still suspect that the blockbuster effect means that the movies people are mostly to watch are going to receive higher ratings than the average film overall. And this is mostly because people rating blockbusters are less critical than the film-viewing community as a whole. So while there might be no "recency bias" of the kind this article was looking for, there might be blockbuster bias where in the last several decades studios have figured out how to capitalize on a less critical / cynical audience. (That hockey stick graph of 8-10 ratings in the article is certainly suggestive.)

<comment><USER7> Actually -- one more follow up for the zero people who will read this -- there's a simpler explanation, which other people who do these kinds of statistics should probably note.

The average rating between 1920 and 1980 fluctuated at about 7.5. Then the number of movies exploded, and the variability in quality of them exploded even more than that. Movies that were _better_ than the 1980 average had their ratings compressed (you can only do a little better than 7.5 on IMDB). Movies that were worse were much less compressed (you can easily do much worse than a 7.5). So the average gets dragged down since there are now both more movies getting 0-4s and movies getting 8-10s.

I realized this after plotting the median, not the mean, and observing that it stays remarkably constant, and possibly even shows a little recency bias for the last 2 years.

</comment></comment></comment></comment></comment><comment><USER8> Doesn't this analysis rest on the assumption that movies are equally good each year? Maybe I suffer from nostalgia (or survivorship bias) but I'm not sure this is a good assumption.

<comment><USER9> The problem with past movies is you only see the good ones. I've spent some time watching the bottom barrel movies from the past and they seem even worse than Today's movies - because while both suffer from horrible plots usually modern movies at least have interesting visuals.

However for certain categories the past was most definitely better. Dramas being the main one. Without a lot of fancy effects the plot was the only thing you had to carry the movie. They also don't beat things over your head and can embrace subtlety in a way modern movies do not.

I also really liked the 70s trend of movies that didn't really have a satisfying ending, you just get to experience the lives of people who don't really improve. 5 easy pieces or The Last Detail fit that category very well.

<comment><USER10> So you want to say that Shutter Island is a bad example of drama? It's all just old-farts rants, nothing more.

Everything is evolving.

In old movies actors play often too dumb, just few of them have good examples of how to play a role.

Some "legendary" movies from the past would fail in theaters nowadays without their legendary reputation.

We have more movies right now, more choices, so our demands are higher - otherwise we will not have enough time to watch them all. Also, we have much more choices of how to watch them - age of digital distribution.

Higher demands give higher quality, movies evolve both in visuals and in acting art.

<comment><USER11> " Higher demands give higher quality "

I would suggest an higher standard deviation on quality, meaning that you could reach very top notch standards (your point) meanwhile mass producing total flat works as in music and i presume, all of the arts (my view).

<comment><USER10> Lol, compare modern music with trash we had in 80s, 90s. Even nowadays' pop trash sounds significantly better than old hits made on synthesizers. Everything evolves, as I said. Maybe you just forgot low-quality movies of previous years, but they did exist, tones of them.

We only want to remember good things.

<comment><USER11> There were no meaning to mass produce and diffuse music in those decades like there are today. I'm not saying 80s and 90s music was perfect (why pick those decades?), i say the more the demand the more the money the more the highs and the lows.

The "quality" you're referring to, i don't know: you're talking about what features of a sound...fidelity, loudness, dynamic?

Anyway, truly the 80s were the years of trash music...but trash as in metal though.

<comment><USER10> Loudness, of course, man. What else is the measure of quality? Loudness, without any doubts. Of course I talk about loudness.

</comment></comment></comment></comment></comment></comment></comment><comment><USER12> I feel like author is missing the point. Shouldn't the recency bias show up in recent votes (while the movie is "hot" and trendy) vs. later votes?

<comment><AUTHOR> I think it's been interpreted as recent movies not recent votes.

</comment></comment><comment><USER7> Incidentally, in case the creator sees this, this site is borderline unusable for me on mobile Firefox. Text gets cut off in strange places, I can't zoom out properly to see all of the animations. "Request desktop site" seems to fix some things but break others - at least I can zoom all the way out but the text becomes hard to read.

Situation might be the same on Chrome (didn't check), but regardless it could use some work since it's pretty broken as is.

<comment><AUTHOR> Hi - founder of Kyso here, thanks for your feedback we will get to work fixing those issues now

<comment><USER7> Thanks! After playing with it a bit it's clear that part of the problem is that the charts are getting generated on the fly and that's very performance intensive. My brand new Android phone is just choking on the page, to the point I can actually feel the phone overheating. Perhaps static images would be an improvement for mobile devices, with the option to load the full data on request.

</comment></comment></comment><comment><USER13> I was recently thinking about this as Chernobyl (which was excellent to be fair) quickly became the highest rated TV drama ever.

<comment><USER14> I mean, if you can suggest other similar shows I will be only glad.

</comment></comment><comment><USER15> Of course, there are plenty of examples of that. Like the assassination of the NK leader movie, which at first received 10 star rating. Now look at it.

Sane goes with all the new blockbuster movies, you should usually wait awhile for the real ratings to show.

</comment><comment><USER16> > Number of Movies By Ratings

I'm dying to see all of these as percentages rather than absolute numbers! I was even thinking that while scrolling down through, and then there the totals are right at the bottom. @KyleOS are you up for normalizing them?

</comment><comment><USER17> I see from one of the charts that the average movie rating from 2019 is over .5 higher than the previous 5 years, in what appears to be a big jump. Is it possible that recency bias is only relevant on a shorter timescale? It looks like ratings are higher for movies that are a few months old, based on the data. I wonder if this is generally true, or if early 2019 happens to have higher rated movies.

<comment><USER18> Sure - for example, fans of a particular actor, director, or series are more likely to go see a movie soon after release in theaters as opposed to later via rental or streaming.

Fans are likely to rate higher than the general public, so over the first, lets say, 3-12 months, ratings often trend down.

</comment></comment><comment><USER19> I wonder if recording ratings now and then every month or so would show a decline in ratings. IMDb must know already.

</comment><comment><USER20> Great job! I'd love to see a similar analysis for Rotten Tomatoes since there's separate metrics for critics and audience, and I find RT ratings to be more extreme than IMDb. I'm often surprised to see how many bad movies get a rating of ~6 on IMDb.

</comment><comment><USER21> Series tend to be rated higher than movies, probably because people that don't enjoy them stop watching and rating after one or a few episodes.

That effect may well be spilling over into movies, considering far more movies are now sequels.

</comment><comment><USER22> An alternative way of reading the same data: "Analysis of whether movies are getting better over time"

<comment><USER23> The problem with your formulation is that 'better' is perhaps the most subjective word there is. Define it in measurable terms, and perhaps you have a reading there. There are many factors to consider which may lead you to find things less clear-cut, for example here's one or two, with some sub-factors \- Modern audience Preference for familiar patterns in: (eg) \-- acting styles \-- music used \-- visual tricks and norms \-- special effects styles \-- acting styles \-- soundtrack loudness \-- colour and high resolution \-- High Concept movies \-- Fantasy and Comic-related films \-- modern movie themes and topics \- Internationalisation of movies, so that fans from abroad prefer modern films which are more universalised and less American-specific (see literature)

<comment><USER22> Right, I'm not asserting that my alternative title is the correct one, I'm lampooning the assertion that IMDB is "suffering from recency bias" as opposed to a more neutral claim like "ratings for more recent movies are higher."

Answering the question of _why_ they went up is a lot harder to prove.

</comment></comment></comment><comment><USER24> What I find most amusing is ratings (and also awards/nominations) before a movie has been released.

</comment><comment><USER25> In terms of shows, Sopranos has long been dethroned, possibly due to this effect. Then again, production values will only get better over time, so maybe the latest shows are of the best quality overall.

Best line:

Fucking Queeahs! (Paulie throws chair at his murder victim spirits)</comment>


Kill hashtables, get shorter code. - <AUTHOR> http://herdrick.tumblr.com/post/825096887/kill-hashtables-get-shorter-code

<comment><USER2> This is actually a pretty common technique in Haskell. If you look at the Alex lexical analyzer generator's source code, it represents CharSets as functions from Char -> Bool: they return true if the character is in the charset or false if it is not. Internally, they work just like the article describes: the union of two CharSets doesn't actually enumerate every possible character in the set, it just calls the two CharSets and performs an OR.

There're other languages that do this two, eg. JavaScript written by functional programmers often ends up looking like this. In Arc, the distinction is completely meaningless, because you "call" a hashtable to index an object anyway.

The problem with it, I've found, is the lack of debugability. You can enumerate a hashtable, and you can inspect it in the debugger. You generally can't enumerate a function. I've found that with complex systems, the biggest correlation to programming productivity is the amount of debug information available, _not_ the size of the code. Trading off debugability to get short code is usually a poor trade-off, once you get past a certain code size.

<comment><USER3> _I've found that with complex systems, the biggest correlation to programming productivity is the amount of debug information available, not the size of the code._

I don't think this point is made often enough. Brevity is a virtue certainly, but ultimately what counts is not LOC, bug counts, iterations/sec etc but features delivered to users. Worse is better reigns supreme here which is why you so often see engineering and design disasters like php, craigslist, myspace, and windows brushing aside far more elegant but less engaging alternatives. For most of us the pride we take in our craft makes this a very hard pill to swallow but swallow it we must.

</comment></comment><comment><USER4> "But it's hard to argue with brevity."

No, it's really not. Brevity != clarity. Clarity is hard to argue with, brevity is not. By his own admission this new code is harder to write and harder to debug.

It's interesting to me that in the article the author dismisses any performance impact of his changes because "we can profile and deal with it latter", but fails to realize that by attempting to reduce the length of his code he is at risk of creating exactly the same type of needlessly hard to read, hard to debug, code that premature optimization does.

<comment><USER5> That's a pretty old debate. I think brevity does a lot for clarity, and the more you work at making your code brief the better you'll be at reading brief code.

Of course if other people are reading your code then you should consider what current programming practice is. But the current practice in Clojure is, for cultural reasons, to make things really succinct. So you can assume those reading your code are ok with that.

<comment><USER6> > That's a pretty old debate. I think brevity does a lot for clarity

Up to a point, that's true, but if you start shortening words by removing letters, you've gone too far.

<comment><USER7> I disagree in two senses. First, it's a poor measurement of brevity that depends on identifier length. Even LOC (surely the gold standard of bad metrics) doesn't depend that much on that. Second and more interestingly, as code gets more concise, long explicit identifiers begin to detract from readability. Well-written concise code discloses valuable information just by the shape it takes. With experience reading such code, you start to grok it at a whole-expression level. Lengthy identifiers interfere with this gestalt: they provide an initial boost when reading the code, but at the long-term cost of overwhelming the code with lexical noise.

Concise programs often appear laughably unreadable to people who are used to a definition of "clarity" that derives from more verbose languages. At one time they appeared that way to me too. But with time spent working in less verbose languages, to my surprise I found myself wanting to use shorter and shorter names, not to interfere with clarity but to enhance it.

<comment><USER6> Then length of an identifier name should be proportional to it's scope. But specifically I'm talking about non descriptive function names shortened for brevity: map, filter, join, split are better names than mp,flt,jn,sp no matter how often you use them.

It takes less effort to read a word than to trip over an unfamiliar abbreviation, so while the code may be more concise, it is less clear. If your code relies upon the reader to know a bunch of specific idioms, then it might be concise, but it isn't clear; it's jargon.

<comment><USER8> All words are arbitrary collections of letters. map, filter, join, and split - for at least 2 of those, the most common meaning is so far removed from the programming meaning that they might as well be something shorter like 'mp'.

<comment><USER6> That might be true if your users were a blank slate, but they aren't, they have existing language skills and it's easier to remember words from ordinary language than it is some library writers abbreviation.

Nor all all words arbitrary collections of letters, most words have some form of alternating consonant vowel structure that makes them easy to speak and remember. Write a program that just arbitrarily combines letters and I doubt you'll get much out that looks like words; there are lots of patterns in how we create words, it isn't arbitrary. If you can't read your code aloud and sound reasonable then you've probably inappropriately abbreviated your identifiers.

Map is by far a better name than mp; there is no shortage of vowels; map is already a short identifier and a real word.

<comment><USER5> _map is already a short identifier and a real word_

This is heresy, but I actually think it might be better if it weren't a real word. I find I benefit from inventing names for functions or data abtractions. It helps to clear the mind of what those things might be.

Plus making map into mp or whatever makes it much more googleable. And don't get me started on Clojure having map and a Map.

<comment><USER6> I don't care if you invent words, if you call your function zork that's fine, it's still a pronounceable word. When I say real word, I mean it has consonants and vowels and is speakable. It's abbreviations that annoy me.

<comment><USER5> Really? OK, that's interesting. I guess I prefer speakable ones too.

<comment><USER7> Agreed all around. Whether or not a name sounds right when you say it is one of the criteria we use on our project for naming design ideas. If you're interested in the rationale behind this, Eric Evans' book _Domain Driven Design_ articulates a concept of design as the "ubiquitous language" of a project that I have found very useful.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> One of my favorite features of Coffeescript (and other languages) is destructuring assignment, which lets you use pattern matching over an object to pull out values from nested structures. It's way more useful than this proposal: brief when you want brevity, but you still get the full object returned from the method when you need to debug, and apis don't have to be adapted or rewritten with the usage pattern in mind.

<comment><USER10> Coffeescript is certainly cool, but Clojure has sophisticated destructuring assignment as well.

<comment><USER9> The point was not "Coffeescript is better than Clojure", it was "destructuring assignment (like in Coffeescript, for instance) is a better solution than the one proposed in the post". If Clojure has sophisticated destructuring assignment, awesome. Use that instead.

<comment><USER10> I suppose I failed to see how destructuring assignment on hash-maps accomplishes anything interesting at all related to the post. The post eliminates hash-maps altogether.

<comment><USER9> It eliminates them from the api, but how does memoize work? There are still hashtables, you just never get a hook on them.

I'm just saying that I prefer having that hook, and that destructuring assignment lets me do so with brevity and clarity.

</comment></comment></comment></comment></comment><comment><USER11> Good stuff. My only comment is to make a macro like defmemo. That way instead of writing something like: (def set-m (memoize set)) you could write (defmemo set-m set).

<comment><USER5> Yep, that'd be better. I didn't want to have to explain a macro, though I guess anyone bothering to read the code can handle a simple macro. Thanks, maybe I'll change that.

</comment></comment><comment><USER12> When he talks about performance, he mentions that memoization allows performance to not suffer very much, but what he doesn't mention that almost the entire performance gain comes from memoizing _frequencies_... which stores the hashtables anyway; it just does it behind the scenes. This is fine for CPU usage, but it does have a significant storage penalty depending on the characteristics of the input.

There's some low-hanging fruit to cut down on the required storage, namely wrapping to-words and frequencies together, and memoizing that. This doesn't reduce the number of hashtables, but at least there's no need to store the entire word lists. As it stands, this will simply fail if your corpus is too large to fit in your RAM all at once.

<comment><USER5> Without profiling it I'd guess it's memoizing the function that does the disk i/o that makes the biggest difference.

<comment><USER12> Right, I realized after writing that that I was forgetting about that one. Still, memoizing frequencies takes it from O(n^2) to O(n) right now, so it's easily the _second_ largest increase.

</comment></comment></comment><comment><USER13> In summary: instead of getting a hash back from a function and pulling out the (single!) desired key, pass the key to the function and get the value back directly.

A limited-use but handy technique, and they're not arguing for dogmatic adherence to the rule. Something to keep in mind, but don't go re-wiring old code unless you're bored. You could also code the function so if you pass no key-args, you get the whole hash back.

I'm personally a fan (sometimes) of code like this when I _really_ want to one-line something but need multiple values:

      # ruby
      value1, value2 = [(x=aFunction(arg))[:key1],x[:key2]]

:)

<comment><USER3> I hate it when I see code like that. It's so much harder to maintain. You've saved two lines of code but made the intent at least 10x harder to infer. I've been wading through the Rails codebase lately and this kind of thing gets to be annoying fast, particularly when you're trying to debug a function that's littered with these kinds of expressions, often nested.

Honestly it's this kind of thing that makes me wonder if the Pythonistas don't have a point about clarity vs cleverness.

<comment><USER14> That's just excessive "cleverness." I don't think you should equate that with concise coding. I could write an equally "clever" snippet that takes 12 lines to do the same thing. Really, you're only saving one line of code over a perfectly readable version:

      x = aFunction(arg)
      value1, value2 = x[:key1], x[:key2]

And you can still write a one-liner much better than the original:

      value1, value2 = aFunction(args).values_at(:key1, :key2)

In essence: That style of coding is not really clever, and I would argue it's not idiomatic. It's doing more work to compensate for a missing tool (in this case, not knowing about the values_at method).

<comment><USER15> Aside from the use of a temporary variable (which can be used for self- documentation anyway), people aren't saving any operations with the one-liner. They are just cramming more operations into a single line.

If LOC was so important for readability, we could just write in C without using any newlines.

<comment><USER14> The point isn't to save operations or lines of code — it's to reduce semantic load and make code more readable. In most languages, calling a function actually results in _more_ operations than just doing copy-and-paste with the same code, but I don't think you'd dismiss well-factored code on those grounds.

A rough gauge for better code might be how much a skilled coder can grok by glancing at N lines of code. This means that reducing LOC _can_ be helpful, but it's not a 1:1 correspondence — your example of C with no newlines would make it harder to read. On the other hand, putting what is essentially a hash destructuring on one line actually does tighten up the semantics.

</comment></comment></comment></comment></comment><comment><USER16> Aside from the maintainability of this technique, it sounds as though it's taking one of the least efficient routes towards doing its job. (I'm not a LISPer, and although I should stop and think about the code there until I grok it before commenting, I'm looking for a lazier answer.)

So, let's say we have two documents, and want to calculate their distance. Each document has 2,000 words. We can either scan each word in each document once, counting them in memory and processing a total of 4,000 words, or we can start with a word in one document, scan both documents for all occurrences of that word, move on to the next word, scan both documents for all occurrences of that word, and so on, for a total of ~N! scans. Given a choice between a really efficient function running in factorial time, or a longer, uglier function running in constant time ... I'd kind of prefer the latter.

Am I way off the mark here? Is there something I misunderstood?

<comment><USER5> Sorry, I don't understand what you're asking. The way it works now is: each document is read and summarized into a bunch of word frequencies, once. It looks like each is being read many times, but since I'm memoizing, it only happens once. Is that helpful or are you suggesting something else?

</comment></comment><comment><USER17> "That sort of sucks. Further, it makes some functions, like euclidean, hopelessly non-general, since euclidean now has to know what function to call to get a frequency [3]."

No. You can just pass in the appropriate, memoized frequency function to call. In the new code, that just means that "freq" would be an additional argument to euclidean, instead of a globally defined function.

<comment><USER5> Right. That's what I said in the footnote, [3].

</comment></comment><comment><USER18> Yup, that's what abstraction does for you. The less policy the caller has to implicitly understand, the more flexibility you have in the underlying representation, and the less code you have to write.

</comment><comment><USER19> I can't remember which philosopher it was but he said something like: "If you have something that you can actually express, you can then also express it concisely."</comment>


Have you heard the one about Apple's data center? - <AUTHOR> http://www.cringely.com/2011/06/have-you-heard-the-one-about-apples-data-center/ <comment><USER2> "Maybe the Olympics isn't a good comparison, but where [IBM's Special Events Web Service] has 2000 square feet, Apple has one million square feet — 500 times as much."

How about "data center" is just a cover story, and the real purpose of the building is manufacturing? The big (water) tank would make more sense for a manufacturing facility than a data center (Cringely's speculation of diesel doesn't make sense - it is _awfully large_ for diesel).

Some aerial footage: <http://www.youtube.com/watch?v=hDXSSi1qStA> The end of the building nearest the helicopter looks like a loading dock for semis.

Overhead imagery of the completed building: [http://tech.fortune.cnn.com/2011/06/01/apples-new-data- cente...](http://tech.fortune.cnn.com/2011/06/01/apples-new-data-center-is- visible-at-last-from-space/) There is very little parking - that hurts the manufacturing theory (unless it is highly automated...).

<comment><USER3> Wouldn't you want a large amount of on-site water to drive your cooling loops in the event local utilities break down?</comment></comment>


Democrats' immigration reform plan tightens H-1B rules, loosens others (sec. IV) - <AUTHOR> http://big.assets.huffingtonpost.com/REPAIRProposal.pdf

<comment><USER2> I don't know enough about the details of H1Bs to comment on the changes made, but this looks promising:

-Green cards will made available to foreign students after completing a STEM-related MS* (or greater) assuming they've stated an intent to immigrate.

-Per-country immigration caps will be lifted for these individuals.

* Corrected, thanks jorgeortiz85

<comment><AUTHOR> Well, green cards are immediately available to anyone who already has a STEM degree from a US university, and a job offer - regardless of their previous intent. Not quite pg's founders visa, but close - a US partner with some capital to employ the person would qualify, I think..

Caps on immigration are lifted for anyone applying for permission to study an advanced STEM degree.

The H-1B modifications fix (or attempt to fix) a lot of things about that program which critics of immigration say allow foreign workers to displace US ones, which should reduce opposition.

<comment><USER3> This is factually incorrect. There are various work permits available to students of US universities (CPT, OPT), as well as work visas for people with degrees (H-1B, etc), but people with STEM degrees from US universities with job offers don't have a green card (permanent residency) immediately available.

<comment><AUTHOR> My post above is meant to summarize the changes suggested in the reform proposal, not current law. Sorry if my uae of the present tense resulted in confusion; I thought the context was obvious.

<comment><USER3> Ah, sorry for misreading you.

While I think these changes are great, they'd actually be a kind of anti- founder's visa. Entrepreneurial foreign students would be encouraged to take normal jobs to get the green card, rather than start startups. (In general you can't have a significant equity stake in a company that's sponsoring you for work, as it's considered a kind of "self-sponsorship".)

<comment><AUTHOR> Hmm, that's a good point about the equity test; although a green card rather than a visa tied to a single sponsor is a much more flexible residency document. I'm going to be asking my representatives to support this (reform in general) so I'll throw in a link to pg's essay to emphasize that possibility.

</comment></comment></comment></comment></comment></comment><comment><USER4> We don't need a national id card...we will have a biometric social security card.

<comment><USER3> That caught my eye too. But the proposal also says:

 _It will be unlawful for any person, corporation; organization local, state, or federal law enforcement officer; local or state government; or any other entity to require or even ask an individual cardholder to produce their social security card for any purpose other than electronic verification of employment eligibility and verification of identity for Social Security Administration purposes._

Of course, the cynic would say those restrictions will be easier to remove once the biometric ID card is already in place.

<comment><USER5> It used to be illegal to use an SSN as an ID number for other purposes (e.g. in place of a separate employee or student ID number). Now it is not.

A bad mechanism put it place with a good policy will almost invariably be abused in the future; it's easier to change policy than to create a mechanism.

<comment><AUTHOR> What's bad about it?

<comment><USER5> Having a universal government-issued ID number makes it easier for both government and non-government organizations to track various aspects of your behavior. If you don't intuitively understand how that's problematic, I'm not sure I can properly explain it.

<comment><AUTHOR> But a social security number already works this way. It's tied to bank account, credit score, driving license (in California) and what-all else. The difference being proposed here is that a modern ID card would replace the frankly ancient SSN card which is just a piece of card with a name and number typed on it, and incredibly easy to fake/exploit. I mean, people are still churning out fraudulent documents with the aid of _typewriters_ : <http://www.networkworld.com/community/node/46911?t51hb>

A modern ID card with basic authentication and anti-counterfeiting features isn't exactly the gateway to totalitarianism, unless you're one of those people that thinks the IRS isn't really legal or something.

<comment><USER5> _But a social security number already works this way. It's tied to bank account, credit score, driving license (in California) and what-all else._

Until the 80s, _that was illegal_.

A more universal isn't the gateway to totalitarianism, nor is CCTV on every street corner, data retention laws for private ISPs or warrantless searches of private email[0]. All these add up, but they're not enough on their own.

Imagine though what might happen if we had someone like Dick Cheney as president and some disaster allowed him to declare a state of emergency. I think it's a good idea to be extra careful with this sort of thing; it can get out of hand long before you know it.

[0] <http://www.eff.org/press/archives/2010/04/13></comment></comment></comment></comment></comment></comment></comment>


Web 2.0: Shifting from "Get Fast" to "Get Massive" this - <AUTHOR> http://www.process-one.net/en/blogs/article/web_20_shifting_from_get_fast_to_get_massive/ <comment><USER2> The overall point is valid -- having a lot of users is the main way that a lot of companies make/want to make money, therefore companies should focus on scaling issues, therefore... "use Erlang."

However, conflating Web 1.0 "get fast" with Ruby on Rails "develop fast" is:

1) wrong: with extremely limited resources and a long list of priorities, startups need to start with fast, basic tools in order to get a functional site up -- to then discover what people want to use. scaling comes later, if ever.

2) self-serving: this guy seems to be intent on getting more companies using what he has to offer

Conclusion: mind the hyperbole.

<comment><USER3> Hello,

Of course, it is self serving, like 37signals buzz on Ruby was self-serving too. I does not mean that you have to trust me. You can check by yourself and make your own opinion. I really doubt that people will switch to Erlang because I said it is the way to go.

They will do so because they have assessed the technology as an alternative. My goal is only to make Erlang known as an alternative for large scale infrastructure, which is not the case now. Nothing more.

</comment></comment><comment><USER4> there are no 'silver bullets'.

google has solved the 'get massive' partly in using the 'Map Reduce' [0] algorythm written in cpp. So looking at one particular language [1] alone to solve the problem(s) of parallel processing is bogus.

Reference

[0] Map Reduce, 'Google MapReduce tool'

http://en.wikipedia.org/wiki/Mapreduce [Accessed Tuesday, 6 March, 2007]

[1] Joel On Software, 'Can Your Programming Language Do This?'

http://www.joelonsoftware.com/items/2006/08/01.html [Accessed Tuesday, 6 March, 2007]

<comment><USER3> I am not talking about silver bullet. I am talking about alternatives. For now people largely think that ther is only one way to do it. The point of my article is to show that there is more than one way to do it and that it might pay off to think about this before hand if you have to make a living of a web- based service.

<comment><USER4> _'... I am not talking about silver bullet. I am talking about alternatives. For now people largely think that ther is only one way to do it. The point of my article is to show that there is more than one way to do it and that it might pay off to think about this before hand if you have to make a living of a web-based service ...'_

I totally missed this in the article mickael. I'll go with TIMTOWTDI [0] anytime. I'll go back and read it again :)

Reference

[0] TIMTOWTDI, 'there is more than one way to do it, perl motto"

<http://www.perlmonks.org/?node_id=52073>

[Accessed Wednesday, 21 March 2007]</comment></comment></comment>


10 EdTech startups that received the most funding in 2014 - <AUTHOR> http://www.hottopics.ht/stories/lists/2014-review-top-10-edtech-startups/

<comment><USER2> Something's wrong with those numbers. Udacity raised 35M in 2014, but it says "valuation"</comment>


Amazon sellers marking products as collectible to get around price gouging rules - <AUTHOR> https://www.theverge.com/21273383/amazon-price-gouging-collectible-loophole-dumbbells-hot-tub <comment><USER2> Would price gouging not just apply to essential products (with the caveat being 'who determines what is essential')? My city flooded a few years ago and gas stations were selling bottled water for super high prices. I think that's an obvious case of price gouging. However, a dumbbell set that is sold out online, listed for $300. I think you could argue that's just free market at work.

<comment><USER3> Even if we could easily draw a line between essential and non-essential goods (pretty much impossible), you'd still have the problem that banning "price gouging" doesn't help anyone.

Sure, it keeps prices down, but by artificially lowering prices when under high demand, it incentivizes hoarding and exploitation. It also decreases the incentive for increased supply. When local prices increase drastically, it gives incentive for non-local suppliers to enter the market, increasing the quantity of supply.

<comment><USER4> That's what I don't understand about the argument against price gouging. Fresh water is hard to come by, ergo the price goes up.

If the product wasn't in demand it wouldn't go up in price. By artificially forcing a low price it guarantees there's going to be shortages.

By allowing the price to go up it will also enforce people use water wisely. That is they won't start taking showers or watering plants with bottled water as it will be expensive.

<comment><USER5> When the price of water spikes:

\+ Some people in need are priced-out, which is very bad. \+ Many for whom the price isn't really a problem given it's become a 'health issue' will stock up dramatically, further driving prices up and hoarding from others.

The 'shortage' FYI is probably inherent in a flood type situation.

By far a better solution is rationing, which is exactly what is done in these situations and has been for quite some time. Rationing can be enforced at the point of sale i.e. 'Max 3 per household', definitely through social conditioning, i.e. making sure community members are aware of the need to do this, much like mask-wearing and social distancing, and possibly through more specific measures, i.e. 'ration cards'.

The immediate problem with rationing maybe 'lineups' which is the visual epitome that many people like to point to from the Soviet Era as an example of 'bad economics' from centrally planned economies, and it surely is in the long run, but in the short-run, i.e. in disaster type scenarios, rationing is often a very obvious and useful strategy.

</comment></comment></comment></comment><comment><USER6> Sigh... Amazon needs to let prices rise. The market elastic goods is dictated purely by second and third order consequences.

When prices go up, people realize there's more money to be made. More sellers/manufacturers enter the marketplace in response, increasing the overall supply pool and eventually causing a price crash.

Conversely, limiting prices rewards hoarders as they can justify their actions. It also rewards antisocial actors by constraining supply an increasing the amount of time they can be profitable. Finally it delays the onset of the price crash keeping prices high and making sure the poor can't afford said goods.

Also keep in mind stuff like hand sanitizer, lysol wipes, and tp all have replacements. Soap has been shown to be more effective than hand sanitizer, and bleach on a reusable rag is more effective effective than lysol... And for the last one I'll just let you figure it out ;)

<comment><USER7> Gouging denies essentials to people who need them that can't afford "surge" pricing.

It's unethical in times of emergency, when the response needed is too short term for more capacity to be spun up to meet immediate needs. It allows the worried (wealthy) well to buy up supplies needed by petty, inconsequential bodies like health services.

So no, Amazon does not need to let prices rise.

<comment><USER8> Not gouging also denies essentials to the same people, because the problem is the shortage but with low prices some people will buy larger quantities and leave less for others.

<comment><USER7> > Not gouging also denies essentials to the same people

No, it doesn't, especially when used in combination with controls on the amounts bought or who can buy.

Greed is not always good, however much you try to contort yourself to believe so.

</comment></comment></comment></comment><comment><USER9> Sellers gonna sell :-).

There are a lot of retro computer kits these days, I can imagine next up we'll see, "Vintage KIM-1 Computer kit, shipped using 500 N95 respirator masks as packing material to protect it in shipping, only $6,000"

<comment><USER10> Can you provide examples of these kits?

<comment><USER9> [https://obsolescence.wixsite.com/obsolescence/kim-uno- summar...](https://obsolescence.wixsite.com/obsolescence/kim-uno- summary-c1uuh)

</comment></comment></comment><comment><USER11> I still don't understand why price gouging is not accepted. Only high prices are an incentive for new producers to enter a market. Or rather: high prices promise huge return on investments so that investors allocate money for producers to open new production facilities.

With fixed prices, there is not enough profit in opening new production lines to balance the risk of entering a new market or spending more money on fast transportation methods. It makes the situation even worse because those with free distribution channels will buy all price-fixed products and leave nothing for Amazon customers.

<comment><USER12> Price gouging _is_ accepted normally. It's just temporarily prohibited for the duration of an emergency for the products related to that emergency.

Most emergencies are sufficiently short-term that they don't meaningfully reduce incentives for new producers to enter a market, because there's no time to adapt. E.g. an hour before a hurricane strikes, the price of water bottles and gas won't motivate new producers to enter a market, but there's a social interest to keep these prices stable.

The main problem here is a prolonged "emergency with default rules" that's happening now, because the default rules are targeted at short emergenices. It's reasonable to announce an emergency now and figure out the details later; but now it's been many months and the "later" should have already arrived with specific "pandemic laws" replacing the generic emergency laws, but that's been problematic in many areas.

<comment><USER13> What gouging does in an emergency is allocate the needed supplies to where they are needed the most. If people in the zone have extra supplies, they'll sell them rather than hoard.

> the price of water bottles and gas won't motivate new producers to enter a > market

It absolutely does. Before the anti-gouging laws, when there was a hurricane, people outside the zone would fill up all their gas cans, get supplies, etc., then drive into the zone and sell them for high prices. After the laws were enacted, that put a stop to that - no gas until FEMA got around to showing up a few days later.

Anti-gouging laws produce shortages, hoarding, mis-allocation, and crime (black markets, theft, etc.).

<comment><USER14> > What gouging does in an emergency is allocate the needed supplies to where > they are needed the most

This statement is disconnected from reality.

The concept you're thinking of is that the supplies will go to the people who will pay the most for them.

Who will pay the most for them is unrelated to who needs them the most. It has more to do with who has disposable income.

If everybody is panicking, then the goods go to the panicking people who have the most disposable income. This has absolutely nothing at all to do with where the goods are most needed.

E.g. the ultra wealthy can easily outbid hospitals for PPE. You are free to argue that the ultra wealthy need PPE more than hospitals, but it's going to be a hard sell.

<comment><USER15> > If everybody is panicking, then the goods go to the panicking people who > have the most disposable income.

Higher prices often discourage people from over-buying an item.

For example, at the beginning of the pandemic, people sensed toilet paper might soon become hard to find. Its not perishable, so when they found it at a normal price, they stocked up. Why not? They know they'll use it eventually and they don't want to be hunting for it a month later. You don't need to be a super wealthy person to pre-purchase a years worth of TP.

But, if TP had been selling for double the normal price, they would have bought less. There's no need to pay pandemic prices for TP that you'll be using next year.

<comment><USER16> And the doubled price would keep people who are least able to pay from getting necessary resources, also potentially encouraging them to continue working in risky conditions to earn extra income to do so, helping in some small way to perpetuate the pandemic itself.

If you're looking for a market-based solution to hoarding, there are others besides price gouging. Amazon's approach, at least in areas where they have complete control like their pantry, fresh, and whole foods services, can serve as an example: They want happy customers. Happy customers return and buy more stuff. Customers who can't buy what they need because it's sold out due to hoarding are not happy. Amazon institutes a policy for orders through fresh/pantry/whole foods that limit TP purchases to a single package. More customers get needed supplies, stay happy return to buy more, make Amazon more money in the long term.

Supply/Demand price curves & price elasticity are not the only rational market-based methods of price discovery. More subtle and long-term considerations breed other strategies.

<comment><USER17> A doubled price of TP isn't going to prevent almost anyone from not having enough. (Yes yes, I know there are edge cases where $5 matters, but weigh that against the alternative.)

On the other hand, a doubled price of TP means that hoarding 10,000 packages becomes far more expensive, and less profitable.

<comment><USER16> You have likely never been in a situation where you have to weigh the purchase of food against the prospect of eviction. I grew up that way, and labelling those circumstances "edge cases" is a tidy way of dehumanizing the situation that many millions of people find themselves in. I won't do the work for you: lookup how many people are on SNAP programs. These are not edge cases.

Think market forces can solve all economic problems? Fine. But don't let that blind you to the fact that _they have not done it yet_ and large numbers of people _live in poverty and misery_ at the bad end of the economic scale.

<comment><USER18> While not perfect free market/capitalism pulled up more people from poverty than any other system. It is usually about who you compare yourself to. If you compare yourself to 1% of the most wealthy country in the world then you are most likely going to look poor. But if you compare yourself to the bottom 1% of the poorest country you most likely going to turn out sickly rich. And when you do the same comparison to the poor in the far past then it gets even more crazy.

<comment><USER19> >While not perfect free market/capitalism pulled up more people from poverty than any other system

Nope not true - that award goes to communist China

>China lifting more than 800 million people out of poverty since the start of its economic reform is a "great story in human history", World Bank President Jim Yong Kim said today, underlining that there is "lessons to be learned" from this Chinese experience.

[https://www.business- standard.com/article/international/chin...](https://www.business- standard.com/article/international/china-lifting-800-million-people-out-of- poverty-is-historic-world-bank-117101300027_1.html)

>Over the past three decades, China has successfully led the greatest poverty alleviation program in the history of the world. During that time, an estimated 500 million Chinese were lifted out of extreme poverty.

[https://news.trust.org/item/20140408110950-ndf6e/](https://news.trust.org/item/20140408110950-ndf6e/)

I'm sure I'll be downvoted for this for some reason or another

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> I know they're huge and I'm just pissing in the ocean, but I do just about everything I can these days to buy elsewhere. Several months ago I started ordering from a local bookstore with a lackluster interface and slightly higher prices. Books sometimes take a week or more to arrive (gasp!) and I drive two miles to the shop to pick them up. I've been patronizing Amazon since roughly 1999. No longer. Amazon is a cancer.

EDIT: changed "them" to "Amazon" for clarity.

<comment> GuB-42 So, more expensive, slower, and less convenient. You are basically buying from your local bookstore for charitable reasons only.

It makes me really uncomfortable. Bookstores are businesses, subject to the market, they should be able to make money by their own merit.

I can only see these solutions:

\- They will disappear, not a pleasant outcome, but it is not the first time such a thing happen. Movie rental stores suffered this fate for instance.

\- They become public or subsidized in some way. I don't expect this to happen in the USA.

\- They find some way of staying competitive. The way it is usually done is by creating local communities and events. Maybe host a variety of nerdy activities, like tabletop roleplaying. But they can also focus on the used market, or partner with schools to offer convenient "school year" packages, which could possibly also include used books.

While I think suffering in order to support local businesses is a noble thing to do, it is not sustainable, "pissing in the ocean" as you say. I am curious to know if there are local bookstores that managed to be successful against Amazon, and how they did it.

<comment><USER20> Yes. I was born and bred a capitalist. The last twenty years have nearly wrung it all out of me. That said, it's not all suffering. Sometimes it is nice to get out of one's place for some air after staring at a screen all day. Like you said, though - it is not sustainable.

<comment> GuB-42 About getting out of one's place, I remember seeing a lot of kids sitting on the floor reading comics in bookstores. I was one of them. It was well tolerated as long as you weren't in the way (if you were, they just politely asked you to sit somewhere else). I don't know if it still happens, it certainly doesn't look as common but maybe that's just me not paying attention.

Of course, by spending way too long in bookstores, I often ended up actually buying books. I used it essentially like a library, except I bought books to bring them back home instead of borrowing them.

</comment></comment></comment></comment><comment><USER21> Pre-Covid it wasn't uncommon to see crazy prices on the amazon marketplace. I remember seeing a 10 year old 256mb MP3 player on amazon marketplace for like $600.

You can find most these items for normal prices on amazon too so this seems a bit like making a story where there may not be one.

<comment><USER22> > You can find most these items for normal prices on amazon too so this seems > a bit like making a story where there may not be one.

My understanding is that there are generally 2 reasons for "outrageous" prices (in normal times).

1\. Some vendors specialize in being the seller of last resort. They price their products high and wait out the market until they're the only game in town. This definitely happens with books, although I'd hope that with the advent of ebooks, this will be less viable.

2\. Algorithmic pricing gone wrong. Sometimes multiple companies will set their prices on each other's current prices, resulting in gradual price drift.

<comment><USER23> 3\. Sellers don't want to deactivate a listing or set their account in "Vacation Mode", so they price it so high nobody sane would buy it.

(deactivating listings has an impact on future search visibility and other metrics)

<comment><USER24> 4\. Money Laundering/proxy buying of drugs.

This has happened with everything from bottles of tide, to ingame items in online games, it was no suprise it made it to amazon.

</comment></comment></comment></comment><comment><USER25> > $279.99 "collectible" Nintendo Switch games that previously went for $79.99.

Why would anyone pay this for a switch game they can get from the nintendo store for the original price?

<comment><USER26> The only games that retailed at $79.99 were ring fit adventure (which had a separate joy-con attachment) and some "limited edition" sets for games (which are artificially scarce -- oftentimes there's enough demand for another run)

</comment></comment><comment><USER27> _But I'm not looking to be in a situation where I make the front page of the news for being that guy who hoarded 20,000 bottles of sanitizer that I'm selling for 20 times what they cost me_

Whoops.

</comment><comment><USER28> Laura Ingalls Wilder's father and the feed store during the blizzard?

</comment><comment><USER29> How much does the price increase , in how long a timespan, before its considered gouging? Who gets to decide?

</comment><comment><USER30> Are nurses guilty of 'price gouging' for being paid $10,000 per week in NYC, which is significantly higher than normal?:

[https://www.aei.org/carpe-diem/are-nurses-guilty-of-price- go...](https://www.aei.org/carpe-diem/are-nurses-guilty-of-price-gouging-for- being-paid-10000-per-week-in-nyc-which-is-500-above-normal/)

</comment><comment><USER31> Better approach is bundling.

Hand sanitizer on sale now. Includes a baseball card. $40.

</comment><comment><USER32> make it easy for viewers to flag false collectibles, or other rule breaking, and this problem would be near instantly solved.

</comment><comment><USER33> life finds a way

</comment><comment><USER34> Price gouging laws don't make sense: [https://fee.org/articles/the-crackdown- on-price-gouging-help...](https://fee.org/articles/the-crackdown-on-price- gouging-helps-no-one-except-politicians-and-the-media/)

[PDF] [https://www.cato.org/sites/cato.org/files/serials/files/regu...](https://www.cato.org/sites/cato.org/files/serials/files/regulation/2011/4/regv34n1-1.pdf)</comment>


The Business of AI Startups - <AUTHOR> https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3293275 <comment><AUTHOR> Specifically this is about what business customers of AI startups report about the impacts of AI adoption. Main result is for professional positions it creates more than it destroys, reverse for manual labor and clerical</comment>


Show HN: Pocket Meets Pinterest - <AUTHOR> https://jooseph.com/ <comment><AUTHOR> Hello Everyone,

Jooseph is a place where you can create lists from articles, videos and more.

You can create learning paths or best of list to organize your tabs or share your best online content.

You can use our extension to make your browser leaner and create yourself a read later list.

Or you can share and discover great learning paths

Also, any content in Jooseph can be ranked by like/dislikes. It's much more easier to filter out noise than going through search and encounter bunch of SEO pumped content.

I hope you like it

<comment><USER2> a recent ShowHN, [https://news.ycombinator.com/item?id=22999742](https://news.ycombinator.com/item?id=22999742)</comment></comment>


What Makes Work Meaningful or Meaningless - <AUTHOR> http://sloanreview.mit.edu/article/what-makes-work-meaningful-or-meaningless <comment><USER2> > _our research showed that quality of leadership received virtually no > mention when people described meaningful moments at work, but poor > management was the top destroyer of meaningfulness_

Spolsky:

> _Administrators [_ code name for managers _] aren't supposed to make the > hard decisions. They don't know enough. All those super genius computer > scientists that you had to recruit from MIT at great expense are supposed to > make the hard decisions. That's why you're paying them. Administrators exist > to move the furniture around so that the people at the top of the tree can > make the hard decisions._

[http://avc.com/2012/02/the-management-team-guest-post- from-j...](http://avc.com/2012/02/the-management-team-guest-post-from-joel- spolsky/)

<comment><USER3> I follow an imaginary and totally-not-backed-by-science model whereby I view managers as a force multiplier on their teams. The number can be anything between 0 and 10. In this model, a PHB[1] hovers between 0.2 and 0.8 (it depends on how well the team can ignore him/her), whereas the average manager hovers somewhere between 0.8 and 1.2; their effect on their teams is neutral, give or take. Good managers are between 1 and 3 -- they can double or triple their team's output -- whereas excellent managers are 3 and up. Such managers also tend to possess very strong leadership skills.

[1][https://en.wikipedia.org/wiki/Pointy- haired_Boss](https://en.wikipedia.org/wiki/Pointy-haired_Boss)

<comment><USER4> What types of things can a good manager do that increases an output by triple? That seems incredibly high to me. The little bit of research that's been done looking at how managers increase employee output have found the vast majority of force multiplication comes from training.

<comment><USER3> Using political capital to shield the team from political BS, remove obstacles and have more resources allocated to the team can make a big difference.

</comment></comment></comment></comment><comment><USER5> Full text: [http://webcache.googleusercontent.com/search?q=cache:PV10pZW...](http://webcache.googleusercontent.com/search?q=cache:PV10pZWoBB0J:sloanreview.mit.edu/article/what- makes-work-meaningful-or-meaningless/+&cd=1&hl=en&ct=clnk&gl=us)

<comment><USER6> How odd. I was reading it on mobile this morning and the whole article was (still is, just checked) fully available.

<comment><USER5> Paywalled for me, but that was from .au.

</comment></comment></comment><comment><USER7> Workers often blame their superiors for lack of motivation or inspiration, but that wouldn't account for the good workers who show up to work inspired already. They find it before work, and if they can't find it, they move on.

They don't stick around and dig for it. That's why you want people who have other options to work for you, and when you work for others, you want to know you could be doing something else. Meaning is defined from the choices we exercise. Why here instead of there is what is meaningful.

No one can tell you how to live your life. Similarly, no one can tell you why you're doing your job. You need to figure that out yourself, and seeking it should involve finding other jobs, not just repeatedly digging at the same spot.

Good teachers and good managers alike can help you immensely if you already have your reasons. They provide a synergy. And for that, they need you to be inspired and be passionate. Synergy fails if either is void. So if you show up inspired to a boss who isn't, that's a sign you may need to revisit your choices also.

Eventually meaning always comes. Maybe it finds us. But if you want to make the most of it, never wait and never settle. All one needs is the courage to move on.

<comment><USER8> Nicely written.

I would attribute blame to a manager who is a void however.

</comment></comment><comment><USER9> This article strikes a chord for me. I also read a book sometime back, called Flow [1] by Mihaly Csikszentmihalyi which draws similar conclusion and is good, quick read.

And then I feel sad, because all the effort to seek that personal connect with work at my current workplace, have been taken away by a disconnected and immature middle management, which only works for meeting the goals and deadlines given to them...

1\. Flow: [http://www.goodreads.com/book/show/66354.Flow](http://www.goodreads.com/book/show/66354.Flow)

<comment><USER10> Pair this with 'Give Yourself a Flow Test' > [https://www.farnamstreetblog.com/2016/07/the-motivation- tool...](https://www.farnamstreetblog.com/2016/07/the-motivation-toolkit/)

</comment></comment><comment><USER11> Ever since reading [http://strikemag.org/bullshit- jobs/](http://strikemag.org/bullshit-jobs/) I have been thinking about this. One problem with this is the definition of 'meaningful', it is not very concrete. But I think the phenomenon is true - more and more work feels like doing something unnecessary (bullshit). I don't agree with Graeber explanation why this happens - which is basically a grand conspiration by all business owners to give worthless work to people so that they don't revolt. I think it is the result of the growing complexity of our work - we encounter more and more rules that we suspect to be stupid. Many of the rules are stupid indeed - based on some random past events, but many are not - they are just covering some cases that we have never thought of. It is easier to assume that the rules are stupid than admit incompetence. But as the complexity grows less and less people understand the rules, the bad rules are not revised and it all goes in a vicious circle.

<comment><USER12> I've seen the scenario where every time something goes wrong a new rule is handed down from on high, eventually you get to the point where you aren't allowed to prepare food in the kitchen or use the shower to have a shower or more importantly you aren't allowed to do the work you are there for.

<comment><USER13> This is "power corrupts" at play.

People in power almost always try to increase their level of control, essentially centralizing the power structure of the entity. At some point of time the entity is completely inefficient and collapses under its own weight (rules, bureaucracy).

You can see this everywhere where power can be centralized: companies, organizations, nation states.

Ironically, successful leaders these days often do the opposite of leading, they decentralize, making the company much more efficient (assuming there are still sub-entities that can/want to be efficient).

<comment><USER11> This might be a part of the story - but it is not the most important one. It makes a good story - a fight between the good and the evil bureaucracy. But what I have seen is rules created in perfectly good faith and often they are reasonable answers to some immediate threats. The problem is with revising them when the situation changes or understanding how they work in the presence of other rules etc.

It is quite analogue to how code becomes bloated - this might be an effect of some programmers believing that this is their work security - but more often than that the programmers hate it. Bureaucratic rules are quite literally the code that the administration runs - and we need them, it is just very hard to understand them all.

</comment></comment></comment></comment><comment><USER14> Once thing that always strikes me with those studies, and a lot of other medical, economical or psychological studies and tryouts are the sample size...

A study that interviews 135 people? And this is seen as significant? It seems to me saying something like "we tried this on 150 people, and we saw that 60% of them X" proves nothing because of how small the sample size is.

what I am missing?

<comment><USER15> In statistics, what matters far more than the _size_ of your sample is the _method_ of your sampling.

This is where lay and academic understandings of statistics diverge dramatically. There's far more discussion of how to ensure an appropriate sample size (determined generally by the independent variables you're tracking and how you plan on subsetting the sample) and _tests for randomness_. Which is why the time to call a statistician into your study isn't when you want to run algos over your data _but before you even begin collecting data_.

Oh, and _large sample_ statistics is a thing. You need to have a minimum number of observations before large-sample methods are generally considered accurate, described by _n_.

 _n_ = 30.

 _If_ (and that's a crucial if) your sampling _is_ random, you can draw tremendous inferences from small datasets. This is why many national-level polls rely on samples of about 300 individuals. The key isn't the size, it's making sure those 300 are _really, really_ random. Goof that and you end up with a "Dewey Defeats Truman" headline. Or Trump as the GOP candidate.

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

(Both owe a lot to how phones are used -- in 1948, landline phones were still a sufficient luxury item that it skewed phone-polling methods. In 2016, cord- cutting is having similar effects.)

I had the interesting experience a while ago of looking at data as it came in generating an estimate of a population of 2.2 billion individuals, based on a sample of 50,000 (Google+ activity, relying on a sitemap file of profiles, where sitemaps are restricted to 50,000 entries per). Well within the first 100 records, the long-term trend of ~8-10% (my final value was 9%) of profiles showing any public activity was established. Given web polling and delays introduced (I tried, and succeeded, to avoid tripping any bot-denial mechanisms), the data rolled in slowly, so I simply set my stats script to loop over the incoming files every minute or so.

Somewhere in my testing I also ran a set of resamplings based on the data I'd ingested -- taking small sets of data from within the larger one and looking for any wildly anomolous trends. This would have suggested that the sitemap file itself wasn't randomly constructed, but eyeball tests of various aspects (including account age, region, and activity) strongly suggested it was. This spared me some more complex sample-generation.

(My conclusions were independently verified from a much larger sample of 500k profiles by Stone Temple Consulting and Eric Enge, a pretty heartening validation.)

________

Edit to add: another crucial point is that statistical error is governed by sqrt(n) -- SE = 1/sqrt(n). To halve your error, you've got to _square_ your sample size. So if 30 doesn't work for you, you're looking at 900, not 60. Assuming sampling costs increase with n, reducing error gets expensive fast.

And for the pedants, SE is "standard error", as I'm aware.

<comment><USER16> > statistical error is governed by sqrt(N)

Yup.

> To halve your error, you've got to _square_ your sample size.

Nope. You've got to multiply it by 4. (It's the 2 that gets squared.) The square root of 1/120 is half that of 1/30.

<comment><USER15> Thanks. I was thinking that through. Math is getting too hard ;-)

Doubling (and repeatedly doubling) occurs through _doubled powers_ of 2. So halving = 2^2, quartering = 2^4, reduce to 1/8, 2^6.

So insteady of n = 30, 60, 120, 240 (initial, halve, quarter, eighth), you end up with 30, 120, 480, 1920.

</comment></comment></comment></comment><comment><USER17> It was like reading a description of Amazon. Thousands of talented and intelligent employees with thousands of ideas that could make or save godless amounts of money, 99% of which were shot down after they bubble their way up through a leadership telephone game which eventually totally misrepresents the idea, and the remaining 1% of ideas get the resource strangle after some VP decides his pet project needs all the resources and allocates his budget accordingly.

Amazon is a place where intelligent ambition is rewarded with plenty of money, but never used for anything but implementing other people's ideas.

</comment><comment><USER18> There is a word "ikigai", which is a Japanese concept meaning "a reason for being". Pic related: [http://i.imgur.com/k6UCbN0.png](http://i.imgur.com/k6UCbN0.png)

Ideally, your work should fall in the center. If only it was so easy though

<comment><USER19> And the French have "raison d'être", literally, "reason for being". Maybe part of the problem is that the language of business does not have a strong idiom for this.

<comment><USER20> That is not the same point that diagram illustrates.

<comment><USER19> No, it is not as complete. It does not cover as many points of view. But it is analogous, and it is better than anything that English has. English has enough going for it that it can get away with dropping the ball many times. I like to call it every time ;)

</comment></comment></comment></comment><comment><USER21> PDF full text is at [1]. Looks like it is legitimately published by the principal author's university.

[1] [http://sro.sussex.ac.uk/61282/1/What%20makes%20work%20meanin...](http://sro.sussex.ac.uk/61282/1/What%20makes%20work%20meaningful%20or%20meaningless%20accepted%20version.pdf)

<comment><USER22> Reading the full text, I can't help but notice the mention of "Episodic" meaningfulness, which means that meaningfulness peaks at certain times rather than being present at a constant level throughout.

Does this apply to the feelings about what someone is doing that day, or does it apply to the job as a whole?

</comment></comment><comment><USER23> There are so many examples of the 'deadly sins' of poor management because the concept of work is not far removed from slavery, and managers are essentially the slave masters.

Good jobs and good treatment are the exception.

Hierarchies are poor organizational structures.

<comment><USER2> The French word for work, _travail_ used to mean _torture_ , and still designates suffering induced by child delivery (as does _labor_ in English).

In Latin there isn't even a word for work, it's just "non leisure" (neg-otium) (I think... it's been a while since I've studied any Latin...)

Work isn't supposed to be fun or meaningful.

<comment><USER24> I can agree that work isn't supposed to be fun (it's orthogonal really) and if it is fun one should be thankful. But the earliest forms of work mankind engaged in was as meaningful as it gets. It was work done to survive. It's no surprise that work you can't derive meaning from is so emotionally problematic when we evolved in an environment where survival was a day-to-day battle. I wouldn't be surprised if the lack of fulfillment that motivates the wealthy to engage in all kinds of good, bad and weird behavior is driven by the same innate need for one's work to have meaning.

</comment></comment></comment><comment><USER25> > Individuals tended to experience their work as meaningful when it mattered > to others more than just to themselves.

Can this be applied to art as well? Isn't the meaning of a work of art the greatest to the artists themselves?

<comment><USER26> Yes, but for me the meaning isn't necessarily in the finished work outside of creating something I like to look at. Considering I'm pretty prolific - I work on art most days, and have stacks that people haven't seen, I truly have to say I do it for my own benefit. Sometimes I put things that others find meaningful in the work because folks like that stuff.

It does give a flutter when other people see meaning in my otherwise meaningless work, though, and I still get giddy when I happen to sell a piece, as I don't sell often. There is some sort of encouragement to be had from others finding meaning in it. Much like getting a better than expected review at work. But I'd do it regardless of outside encouragement.

</comment></comment><comment><USER27> I wonder how much counter-signalling there is on the part of the interviewees. They are going to be prone to say things that associate far-mode, positive ideals with them.

Like, they won't say, "I found a lot of meaning that time my hard work, blood, sweat, and tears were actually meritocratically rewarded with that large bonus" because it makes them sound near-mode, greedy, overly materialistic, etc.

Instead, they'll say something far-mode, about how they related to the human element of an experience or a coworker or a client, or how their family finally appreciated the deeper meaning in their work.

I'm not sure I really believe that people find work meaning mostly in these far-mode, idealistic things. Rather, I think they want _to be seen as someone who values these things_ because then people will associate good stereotypes with them.

This also helps explain why it's more reflective, episodic, and after-the-fact rationalized to be meaningful, rather than being tied to concrete properties of the work itself.

I think for myself, I do have some moral and ethical baselines that I don't want the byproducts of my labor to violate, like harming others, perpetuating government oppression, wasting resources.

But beyond these things, I don't actually get more or less meaning out of any different topical type of work than some other type.

What _does_ make me feel like work is meaningful is to experience lots and lots of _autonomy_ in my workplace decision making and my approach to solving problems. I also like to feel that I have the freedom to pursue whatever quality standards are pragmatic for the problem, and am not constrained by bureaucracy to pursue inelegant solutions when there's no pragmatic reasons why they actually need to be inelegant (this happens all the time).

After that, I feel meaning at work most when I am given adequate quiet and private physical space and can reach a state of psychological flow.

I could be writing code to process ATM transactions or to cure cancer and I'll feel the same amount of meaning if (a) I can mostly do it my own way within some loose context of the broader team's needs, and (b) I am left alone to actually get work done and I am not interrupted or inundated with an unhealthy, oppressively wide open working space.

For me, these resonated more with the comment in the article that good managers are rarely even mentioned in the context of meaningful work, whereas bad managers are often to blame for work that is not meaningful.

Good managers are invisible geniuses who know how to fade into the backdrop, get out of your way, allow you to make decisions, and do not feel fear that they have to micromanage or create empty superficial artifacts to justify that they are working. They are so, so hard to find, and when you find one, you are so happy that you will give so much loyalty to working for that manager, and forgive so much other crap the company might pull.

<comment><USER28> At my last interview with a medium-sized tech company I had about 5 positive interactions with 5 interviewers. However, there was a "culture component" chat where I was asked what I had found difficult in the past.

I mentioned that in my previous role I'd been in a unique position to work with both customers AND development, and as a result had built a rich toolset for solving customers' problems. Note that this was a company with a small number of high-paying customers, so losing anyone was a big problem. At least enough customers had specifically stated they stayed with my employer as a result of these tools to show that I earned my keep.

I mentioned that making the tools had been my favourite part of that work, and being told by my manager (after making them) that it was a poor use of time the worst. Mind you, I'd been mentioning these things to him for some time and getting "mmhmmm ok" in response. I asked the interviewer "is this a company where somebody with an idea can develop a prototype and try it out without getting approval from three different people?"

The interviewer hemmed and hawed and we got to an awkward silence. I was actually relieved not to have to worry about an offer.

<comment><USER2> > _is this a company where somebody with an idea can develop a prototype and > try it out without getting approval from three different people?_

What a fantastic question to ask as a candidate!!</comment></comment></comment>


Abseil: A set of OSS C++ libraries extracted from Google's internal codebase - <AUTHOR> https://abseil.io/ <comment><USER2> [https://github.com/abseil](https://github.com/abseil)</comment>


If Google has hired all the best hackers, why do they still buy companies? - <AUTHOR>

<comment><USER3> Joy's Law: "No matter who you are or what company you run, the majority of smart people do not work for you."

</comment><comment><USER4> Google rejects hiring loads of "the best hackers" every day through their way- too-high standards.

Then when inevitably some of these "not quite the best" hackers build a popular site, Google is forced to come crawling back and pay several million to acquire the company, instead of the several hundred thousand they would have payed them as salary.

</comment><comment><USER5> The smartest hackers are too smart to work for the man. In fact they are too fringe to even be recognized as the 'best'.

</comment><comment><AUTHOR> Wouldn't they be able to copy any web based product within hours? Yesterday I read that even Guido van Rossum is on their payroll - basically anybody who has the slightest amount of fame is on their payroll (have they hired Linus yet?).

So either everybody else can just go packing, or all those brilliant people will somehow get lost in the Googleplex and never be heard from again. Perhaps it is actually good for "the rest of us" that Google buys so many talented hackers. Perhaps they will never create anything useful again in their lives (a bit like the stellar scientists retiring at Princeton), and we have so much less competition left.

<comment><USER6> No matter how hard Google tries to create an environment where people are creative and get things done there's no way to truly duplicate a few really smart people getting together, coming up with an idea and making it.

As I think PG mentioned in another thread, when companies buy a startup they are not only buying the code but the founders too. This means that in essence, they are still hiring the best people out there.

<comment><USER7> And you will never work as hard as an employee as you would when you're working for yourself.

No matter how much you like the company you work for.

</comment></comment></comment><comment><USER8> Google hasn't hired all the best hackers. They have hired the best hackers that don't have the balls to start their own company.

</comment><comment><USER9> Good ideas and companies are not always created by the best hackers in the world.

</comment><comment><USER10> Because there is more to building a tech business than just tech?

</comment><comment><USER11> I'm sure its not just the talent they acquire but they acquire the ability of a team who can execute on a concept which has traction.

The intangibles of execution can't be repliated like market share, customers, brand loyalty, UI design.

I mean look at how much street cred Google Video has compared to Youtube - <USER2> enough to just slap a google logo on it and wait for the world to beat a path to its door.

</comment><comment><USER12> Forget about inventing new stuff, Google has problems keeping the current apps running: <http://slashdot.org/articles/07/04/26/2030239.shtml>

</comment><comment><USER7> Because they _didn't_.

There are too many of them to be hired by one company, regardless how big google is getting.</comment>


Ancient, scary and alien-looking specimen forms a rarity in the insect world - <AUTHOR> http://oregonstate.edu/ua/ncs/archives/2017/jan/ancient-scary-and-alien-looking-specimen-forms-rarity-insect-world-%E2%80%93-new-order <comment><USER2> "With its long neck, big eyes and strange oblong head, I thought it resembled E.T. I even made a Halloween mask that resembled the head of this insect. But when I wore the mask when trick-or-treaters came by, it scared the little kids so much I took it off."

The bug itself bothers me in some deep way I cant quite identify.</comment>