Ask HN: Why and how is Gartner Inc. still relevant? - <AUTHOR> I just came across one of Gartner's most recent publications (predictions, trends, ...).
I'm finding it hard to distill through the fluff to find meaningful insights.
Their trends are dated and it feels as if someone has spilled the buzzword paint on a slide deck.
I'm experiencing first-hand the mess they have caused by suggesting an operational/outsourcing model that makes it extremely hard to get anything done other than planning.
How are they still relevant? <comment><USER3> Is there a better corporate insights and research firm that you know of?

Their trends seem dated because they're not going to feed enterprises bleeding edge tech trends; they're going to go with trends that are mostly proven, so yes at that point they're probably going to be a bit stale. Large enterprises with minimal tech advocacy/leadership in the senior leadership team eat this stuff up because they don't know much better.

Frankly, if your business is struggling with operations to a point where they are bringing in third parties to get told to outsource operations, I feel like your business has a competency problem that you can't place squarely on the shoulders of Gartner.

<comment><USER4> So basically Gartner is there to gobble up money from incompetence.

<comment><USER5> You could look at it that way!

Some might describe Gartner as a company that dispenses reasonable advice on demand to companies who need guidance on subjects well outside their core competencies. This is very much making money from incompetence, but it's the sort of profiting from incompetence that every expert adviser does.

<comment><USER6> Well said, although I would trade "ignorance" for "incompetance." People in business have to regularly make decisions outside of their comfort zone. That means they often start as ignorant, not incompetent.

As for the thread at hand, I second the answer that Gartner exists to provide executives a backstop of something goes wrong. People dont often get fired for buying something in the magic quadrant.

</comment></comment></comment></comment><comment><USER7> There is a lot more to it than those magic quadrants and articles that vendors send you. It's not really fair to pick out an article or two and then say they are crap. It seems to be the cool thing to pick on them and most of the people that do have basically zero experience with them. I suspect most of the bad rap comes from the bullshit ads vendors send out that reference some Gartner article.

When you sign up with them you are assigned an executive partner who helps develop your strategy, you get access to over a thousand analysts that are SME's in various fields, access to a massive library of articles and it's a good networking opportunity. The EP is where it's at. It's someone with a lot more experience than you have who you can work with directly, bounce ideas off of, get advice from, etc. I guess sort of a mentor for hire is one way to look at it. I know people that swear by Gartner and renew year after year.

That said, it wasn't a great fit for me. I don't want to call it a complete waste, but it wasn't worth it. I am apparently an outlier among their clients because they have a very high retention rate.

<comment><USER8> Another important aspect of Gartner is that it provides a common language and common abstractions for the reality of managing organisations. Concepts like magic quadrants, et al, are not exactly correlated with the reality, but the correlation is strong enough and simple enough that if both you and a vendor are aiming for the same abstract goal, you have a decent chance of ending up in the same real ballpark with minimal effort.

That said, there are a million different conceptual frameworks out there and Gartner only specialise in a handful.

</comment></comment><comment><USER9> Most of Gartner's income comes from serving as a sort of strategic IT help desk rather than from the publications you cite. They provide as much of a sanity check for enterprise/commercial IT decision making as a customer desires.

Individually, their experts are actually pretty knowledgeable IMHO more so on average than IT executives tend to be. There are many morons out there in decision making roles and there are many worse advisors than Gartner e.g. "advisors" who are unduly influenced by vendor payoffs (1st hand knowledge not supposition).

<comment><USER10> >> They provide as much of a sanity check for enterprise/commercial IT decision making as a customer desires.

Exactly.

No-one gets fired for buying the vendor in the top-right corner of a Gartner matrix...

I'm also amused by vendors (often start-ups) releasing PRs about being listed in a Gartner Hype Cycle report. "Look we're here, at the top!". i.e. overhyped...

<comment><USER11> > I'm also amused by vendors (often start-ups) releasing PRs about being > listed in a Gartner Hype Cycle report.

It's outside validation, which to a prospective customer is more useful than those "content marketing" pieces these companies put out, which are usually thought pieces about problems in the target industry. Of course, they make sure to liberally sprinkle references to their own SaaS and how cheap and easy it is to switch from your existing BI/CRM/cloud solution.

</comment></comment></comment><comment><USER12> Don't look at them as providing advice. Look at them as providing these two things:

* They provide assurance against bad decisions. Every exec wants to have someone to point at when a few millions were wasted. Don't get me wrong here. The job of a higher-up exec probably implies wasting a few millions every now and then by taking the best course in adverse circumstances.

* They provide a neutral judge for execs surrounded by warring factions - and they don't even have to be internal. At our company I see how A is a sane option, but B is used by a competitor. Even if said competitor bleeds money as a result, we regularly hire the same contractors, and they love reusing their investment and see you bleed money (to them) by giving you also B. What do you do while they whisper in the ear of your boss?

When companies get big enough to become vulnerable to sociological dysfunctionality, Gartner can help a lot. Or make things much worse.

<comment><USER13> Gartner is a very expensive and unreliable CYA resource. This may sound brutal, but take a look at their authors. Most have never actually worked with the technology they are writing about and almost never have hands-on experience. They are pundits, on the sidelines, talking to a very small subset of users and making very broad conclusions. Often times the executives (and their subordinates) that rely on their reports are more knowledgable about the technology. Some even speculate that the more vendors pay for their consulting services, the better they write about you. I'm not convinced it's pure payola as much as it just bad analysis.

</comment></comment><comment><USER14> I've found the Gartner hype cycle paradigm to be vastly overrated after experiencing real hype cycles in several industries.

If you examine their hype cycle charts over about a decade, you'll notice that technologies join or leave the chart randomly, and very few actually move in a linear fashion along the hype cycle: the charts offer no real predictive power.

I think the "hype cycle" narrative only matches a small fraction of tech innovations. Sometimes tech is adopted in a fairly smooth sigmoid. Sometimes it dies suddenly pre-plateau because it was actually vaporware or a substitute became more competitive. Sometimes there's a single giant hype cycle (dot- com?). Sometimes there are several repeating cycles (looking at you today, cryptocurrencies).

<comment><USER15> Gartner's publicity pieces, including hype cycles and magic quadrants, serve the purpose of giving non-technical executives and decision makers a high- level understanding of the risk of choosing a particular technology or vendor. For these users, all that matters is getting a snapshot of the present moment.

Gartner also sells research and analysis reports, and subscriptions for these services. These materials, IME, are of higher quality and can be a good introduction or exploration of a particular issue or technology. But they are definitely more oriented toward the senior leader than to the person in the trenches.

<comment><USER14> Fair enough: I am most critical of the hype cycle itself, and haven't looked through the longer publications in detail.

</comment></comment></comment><comment><USER16> I've heard it claimed that those in leadership use it to justify the purchase of a product. Sort of a "nobody ever got fired for buying what Gartner recommended."

<comment><USER17> Gartner exists so that greasy salesdroids can convince Pointy Haired Bosses to buy enterprise shovelware without consulting with their technical staff. Then the technical staff have to try and implement said shovelware in the least odious way possible.

So much budget will be spent on this project that it will be deemed Too Big To fail. The shitty software will sit underused for a few years until everyone forgets about it then it will be quietly sunsetted.

It's sort of like a corporate job creation scheme.

<comment><USER18> Yes, gartner is an evil creature of the corporate idiocy world. Instead of getting someone in your company that knows about an area, idiot bosses consult the gartner oracle to make choices. I've worked at several tech companies that overobsess on gartner, because they believe (apparently truely), that gartner love can really help your product.

</comment></comment></comment><comment><USER19> Executives hire Gartner to tell them in PowerPoint format for $100,000 what their own engineers/professionals could have told them for free over lunch if they ever actually got out of their offices and talked to the people who run the nuts and bolts of the company.

</comment><comment><USER20> Gartner provides plausible deniability for inevitable leadership mistakes. "Hey, it was in the Magic Quadrant! It wasn't our fault our implementation failed!"

<comment><USER21> Where the opposite conclusion would actually make sense... right?

"Lots of people have succeeded with Brand A, but we failed... so I guess it must our fault."

<comment><USER22> That's exactly how I would have reacted to the parent in real life. Your failed execution is your fault.

</comment></comment></comment><comment><USER23> At one point a few years back, while people were being holier-than-thou agile evangelists, Gartner was putting forth well reasoned arguments about having steady slow teams and innovative fast teams. Pretty much arguing an end run around the whole Agile-everything political movement in a way that an Enterprise would be able to benefit from what they know works and also from the Agile development front.

</comment><comment><USER24> It's what happens when you have too many non-technical people in decision- making positions. They never heard of big O notation or hashsets but they all know about Gartner.

It provides a way for them to say "I think we should do X" without knowing anything about X except that Gartner recommended it. Gartner gives them a right to have an opinion.

<comment><USER25> I'd challenge you, as a thought experiment, to try and inwardly answer a question s.a "should we pick azure, aws or gcp". You may use your vast knowledge of O notations.

<comment><USER24> Oh please, you know exactly what I mean.

<comment><USER26> He's right though

<comment><USER22> Point being made is that actual experience with aws, azure or google cloud would be preferable to reading some white paper.

</comment></comment></comment></comment></comment><comment><USER27> Gartner is useful because they have tons of data on just about anything in the IT space. The Magic Quadrant is the tip of the iceberg and the thing that people know they for best, but they do tons of research (as they are a research company), which helps people in leadership positions who need to make big technical decisions make those decisions (with help from other data points, of course). They also have the whole "every IT exec uses Gartner; why aren't you" effect going for them.

</comment><comment><USER28> I've used their public reports to discover vendors. I always find more than I was aware of with Google and Github searches.

</comment><comment><USER29> They speak with customers who have purchased product X. Although most T&C prevent sharing pricing information with others, customers will share that info with Gartner. Want to buy product X, how do you know you're getting a fair price? That's where Gartner earns its value. Did you remember to negotiate for future price lock-in for "no greater than"? Gartner will advise you on what to look out for and how to negotiate your contracts. In a world with information asymmetry, Gartner helps deobfuscate the pricing.

</comment><comment><USER30> It's still relevant because it's for job security.

When IT management needs to decide which product/service to use, they need to explain to the business (e.g. front office) why they choose A instead of B. Showing the report helps.

When product/service A messes up, IT management needs to come up with an explanation on why they've chosen a bad product/service. Showing other products/services look even worse in the report again helps. In other words, the chosen one is already one of the best in the market.

Given that the company pays for the report, why would IT management not ask for a copy as it costs them nothing?

This is not to say all IT management uses it to make their job safe but they can't lose by using those products/services in the report. In other words, they are taking enormous risk using a product not suggested/covered in the report and what would be their incentive to do so especially having gone through the financial crisis?

</comment><comment><USER31> Most people, even those in positions of authority, are morons.

<comment><USER32> "...when it comes to my area of expertise"

</comment></comment><comment><USER33> If you're purchasing or renegotiating something for the first time on a large scale (say a monitoring tool or key—value database) a 30 minute call with one of their analysts can save you hundreds of thousands of dollars. They add an enormous sales team on top of that.

<comment><USER13> Nonsense. Most Gartner analysts have never touched the tools they write about. The interview a small set of users to draw broad conclusions. Overpaid journalists at best.

<comment><USER33> The writing is weak, but if you want to buy a product with opaque pricing, they know what people are paying for it.

</comment></comment></comment><comment><USER34> Bullshit companies like this (they aren't alone - there is also Accenture, Deloitte, and plenty others) will be around as long as there are idiots who believe in their bullshit and are happy to pay them good money to produce it.

</comment><comment><USER35> Nobody ever got fired for buying IBM, right?

<comment><USER36> Nobody ever got fired for choosing the vendor in the upper right quadrant of the Gartner Magic Square.

<comment><USER37> And honestly, they shouldn't.

Engineers wanting shiny resume padding to play with can hate on it all they want, but they're not the ones doing the firing.

</comment></comment></comment><comment> tony-allan In a corporate IT environment this is a cheap way for IT professionals to augment local skills especially for high-level strategy and planning. I always found it useful to quote from Gartner reports in internal reports -- an easy way to summarise an issue.

You do need to push past the buzzwords and it needs to be used with some care by non-IT people who cannot always see the corporate implications of some recommendations.

Gartner conferences are also good value.

</comment><comment><USER38> 1\. Gartner charge vendors money for their services and they charge clients for distributing their. 'Knowledge'.

2\. If you could see the $$ signs charged to vendors by Gartner for every vendor they list in the magic Quadrant would it colour your opinion of the magic quadrant and their recommendations ?

Journalists who have a vested interest have to declare it in any report - <USER2> should Gartner be any different ?

</comment><comment><USER39> It's relevant the way organizations like CNN are. In an age where there's very little information asymmetry and everybody's equally an expert, legacy brands serve as a credentialing baseline.

</comment><comment><USER40> 90% of the working world has at best indifference and at worst outright hostility to technology, and research firms are IT equivalent of the Gell Mann Amnesia.

In the land of the blind the one eyed man is king.

You are an outlier. Take advantage of it, but also don't overvalue it.

</comment><comment><USER41> Here's a part of the answer. They surround themselves with the trappings of power. They know how to "speak" the nonverbal language of power, how to do it well, and they never fail to do it.

That is probably some huge fraction of it, right there.

</comment><comment><USER42> I wonder what their accuracy rate is? I imagine there's a bias towards them looking good because people accept their suggestions ("nobody got fired for buying IBM") and it becomes a self-fulfilling prophecy.

</comment><comment><USER43> [https://www.thoughtworks.com/radar](https://www.thoughtworks.com/radar) is relevant?

</comment><comment><USER44> At least, they predicted one thing: smartphones

</comment><comment><USER45> Same as Oracle, they're an excellent sales org with a commodity product.</comment>


The Most Important Social Media Company You've Never Heard Of - <AUTHOR> http://www.inc.com/magazine/201504/will-bourne/banjo-the-gods-eye-view.html

<comment><USER2> I'm impressed with Banjo and its ability to get me local news for our area. I've shown it several times to other developers when events were breaking locally and the most common reaction is to wonder how come they've never heard about the app?

I am disappointed that apparently they won't be updating the app as they chase the more lucrative corp clients.</comment>


Show HN: Ready-to-use API to convert any web page to PDF using headless Chrome - <AUTHOR> https://www.apify.com/jancurn/url-to-pdf <comment><USER2> Saving a webpage to a PDF is literally one command line away:

chromium --headless --disable-gpu --print-to-pdf=google.pdf [http://google.com/](http://google.com/)

What does Apify add in this case?

<comment><USER3> This is exactly what I do bundled into a nice function added to my .zshrc

        chromepdf() {
            chrome --headless --disable-gpu --print-to-pdf="$1" $2
        }

<comment><USER4> Is there anyway to make chrome wait until the page loads?

<comment><USER5> Looks like it prints automatically once Page.loadEventFired is triggered.

Alternatively, you can run Chrome headless with the remote debugging API (--remote-debugging-port=9222) and send a Page.printToPDF ([https://chromedevtools.github.io/devtools- protocol/tot/Page/...](https://chromedevtools.github.io/devtools- protocol/tot/Page/#method-printToPDF)) after some delay.

</comment></comment></comment></comment><comment><USER6> I've been working on something similar: [https://www.prerender.cloud/docs/api](https://www.prerender.cloud/docs/api)

      // URL to screenshot
      service.prerender.cloud/screenshot/https://www.google.com/

      // URL to pdf
      service.prerender.cloud/pdf/https://www.google.com/

      // URL to html (prerender)
      service.prerender.cloud/https://www.google.com/

<comment><USER7> Heads up that I'm getting a "Too many requests for the month, sign up for an account at [https://www.prerender.cloud/"](https://www.prerender.cloud/") when trying to go to any of those links.

<comment><USER6> Thank you - I had an overaggressive rate limiter for non auth'd accounts, it's _improved_ now.

<comment><USER8> Nope. Still getting - Too many requests for the month, sign up for an account at [https://www.prerender.cloud/](https://www.prerender.cloud/)

</comment></comment></comment></comment><comment><USER9> By the way, is there an opposite service that converts PDF's into plain HTML for reading? I know about [https://www.arxiv- vanity.com/papers/](https://www.arxiv-vanity.com/papers/) but it only works on arXiv PDFs.

<comment><USER10> Best one I have found. [https://github.com/coolwanglu/pdf2htmlEX](https://github.com/coolwanglu/pdf2htmlEX)

</comment></comment><comment><USER11> Off-topic, but Apify as a service looks really good. I was spinning up a dedicated VM on AWS with Docker installed only to get a simple webscraper running. Apify solves this elegantly and removes an significant pain in my workflow.

</comment><comment><USER12> Any info how this compares to commercial html to pdf renderers like PrinceXML?

<comment><USER13> In my experience, Prince is great for static HTML + CSS rendering, but its JavaScript engine is pretty lackluster -- I couldn't get it to work with rendering React components, for example. So it depends a lot on your use case and if you can server-side render everything. It's also pretty pricey[1] -- not that I mind paying for quality software but that sticker could be prohibitive for a lot of folks.

[1] [https://www.princexml.com/purchase](https://www.princexml.com/purchase)

<comment><USER14> I'm a developer at [https://docraptor.com](https://docraptor.com). We're an official Prince partner with a SaaS pricing model, but we've got a separate JavaScript engine for that very reason.

</comment></comment></comment><comment><USER15> Also check out [https://urlbox.io/](https://urlbox.io/). YC alum, super helpful.

</comment><comment><USER16> I built Screen.rip, which also supports PDF generation. [https://screen.rip/#pdf](https://screen.rip/#pdf)

Screen.rip gives you more control over the generated PDF beyond Puppeteer's options (like it can wait for certain elements to appear, inject CSS or switch to screen stylesheet instead of the print stylesheet).

</comment><comment><USER17> I love this service! I think ease of adoption you can allow pre-made scripts to be shared so the non-technical can easily set up work flows that go right into their email. For the technical folks, I think it would be great to have examples of things you can do with Apify that is a hassle to do with your local chrome headless.

Great job!

</comment><comment><USER18> If you're interested in running your own personal Way-Back machine that uses Chrome headless for archiving (among other methods), check out Bookmark Archiver.

[https://github.com/pirate/bookmark- archiver](https://github.com/pirate/bookmark-archiver)

</comment><comment><USER19> We are not too happy with our EvoPDF license so in the basis this is a good option. However, I do not think this allows adding headers, footers, page numbers etc.

</comment><comment><USER20> Is there a similar API around that accepts HTML instead of a URL? I've build one for my project, but I would prefer to delegate this to an external service.

<comment><USER21> Bear in mind that you'll need to either embed all your resources, or only use CORS-enabled resources, or fake the origin for your HTML document so that it can access non-CORS-enabled resources on a particular domain.

Encoding your HTML as a data: URI might work for this service as-is (provided you use no non-CORS-enabled resources). Haven't tried it.

</comment></comment><comment><USER22> Question: does this create accessible PDFs? That would be a really nice _possible_ work around for screen reader users having issues with a website.

<comment><AUTHOR> I believe it's possible, by adding something like "scale: 1.5" to "pdfOptions" you might render an accessible PDF

</comment></comment><comment><USER23> you could rpobably launch this service free, and someone will probably create a docker image, and make it one click.

</comment><comment><USER24> As long as GPU support is not functional in headless, "any web page" is a misnomer. A large enough percentage of sites use GPU acceleration so that headless mode is useless. This needs to be addressed by the Chrome team.

<comment><USER25> What do you mean "use GPU acceleration"? Are you saying that a large percentage of sites use WebGL? Using GPU acceleration for web page rendering is just a browser performance optimization. They can render the same page without GPU only slower.

<comment><USER24> I'm more specifically talking about WebGL. We'd love to use headless chrome at our company but we can't. But even for things like CSS transforms, we do a lot of really heavy 3D work and software emulation won't cut it.

<comment><USER18> CSS transforms work just fine without the GPU. We use it extensively for screenshot testing our CSS transform-based animations on [https://oddslingers.com](https://oddslingers.com).

<comment><USER24> We are using a ton of them to create 3D heads up display camera overlays. They are too slow with GL software rendering.

<comment><USER18> Not sure what you mean? Usually people use either CSS 3D Transforms __or __WebGL, but not both.

<comment><USER24> What do you mean? We are using both right now. Why can't they both be used on the same page?

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> Does this work if the page is behind a password/SSO wall?

And is it possible to print multiple Chrome tabs?

Printing pages to PDF is pretty straightforward. It's the above two issues were I've run into problems. Anyone know of a good solution to the second one?

<comment><USER27> Assuming you want this done automatically, what's the advantage of 'printing' multiple tabs to PDF in a headless browser, over just sequentially loading and printing the pages you want done?</comment></comment>


Ask HN: How to harden an android phone - <AUTHOR> As a paranoid owner of a new nexus, what recommended steps should I take to enhance security and privacy? <comment><USER2> The first thing any competent practitioner is going to ask is this:

What is your threat model?

Are you the next Edward Snowden? A Russian doing drug deals on dark markets? A clerk at a locally run convenience store? Some tech worker in the Bay Area? A journalist in Western Europe? A Wal-Mart employee organizing to form a union? A free-software proponent and developer?

The answer here is to do some threat modeling. What activities are you involved with that may be interesting to those with power and capabilities? Are you concerned with powerful state or corporate actors? Are you concerned with the run-of-the-mill privacy invasions in typical Android apps?

<comment><AUTHOR> Threat model: I'm an ordinary consumer doing ordinary consumer things, and I don't want to have my identity stolen or my browsing habits being sold at auction. Highest feasible level of protection against state and nonstate adversaries. I assume a TLA could defeat me in a targeted attack, but don't want to get ensnared in a dragnet (hmmm, you just read a page on torproject, into the suspect list you go!)

<comment><USER2> Assuming you have a Nexus running Android 6.0, there's quite a bit you can do by denying capabilities to applications. This is a new feature of Android 6.0 that lets end users deny specific capabilities per app (Calendar, camera, contacts, location, microphone, phone, SMS, storage).

* Navigate to Settings -> Apps -> Config -> App Permissions, and disable permissions in each category.

* When you install a new application, only those targeting Android 6.0 or later will prompt you for permissions, so go in and edit the permissions for newly installed applications before you run them.

* Depending on your cellular provider, it may be helpful to setup a forward-all VPN through either your own server or a trusted VPN provider (feel free to read about Verizon X-UIDH supercookies). I don't trust VPN providers, so I do this myself.

* Enable device encryption, and use a sufficiently complex password. Assume when your device is powered on that all data on the device can be obtained.

* Set Firefox to your default browser, and install relevant extensions like uBlock Origin.

<comment><AUTHOR> Thanks, much appreciated. I am new to android having used iOS for most of my phones in the past. I decided to switch to get away from Verizon and a general dissatisfaction with the way iOS makes decisions for you. So any practical advice for an android newb is helpful!

<comment><USER3> I'm in the same exact boat as you - always had iOS and am supposed to get my Nexus 6p on Monday (leaving Verizon for Google Fi) - I'm intently watching this thread for some suggestions/tips as a new Android user.

<comment><AUTHOR> Yup, I finally got disgusted enough by Verizon's complete disregard for their customers that I was willing to switch to Android simply to try Google Fi. The tipping point for me was when I realized that 10 months had gone by after I'd paid off my iPhone and Verizon continued to charge me for it. When I called their CS, the best they could do was refund me 3 months of it. So I'm done.

I got my 6p yesterday and still learning my way around it. Overall I'm impressed but feel like such a noob and not sure what to do to stay safe. There's a decent checklist here: [https://security.utexas.edu/handheld- hardening-checklists/an...](https://security.utexas.edu/handheld-hardening- checklists/android)

It's a bit generic and not specifically to Android 6.0, but helps point in the general direction of how to think about securing android.

</comment></comment></comment></comment></comment></comment><comment><USER4> For Nexus phones there's CopperheadOS [1], a hardened Android version focused on security. It sounds great but I haven't tried it. It's also nice that they try to upstream some of their work.

[1]: [https://copperhead.co/android/](https://copperhead.co/android/)</comment>


Ask HN: Tumblr Followers List API - <AUTHOR>

Does Tumblr have an API to get a blog's follower's list.
I know some themes can access this functionality.
How would I go about getting a followers list <comment><USER2> How does one ask questions without question marks.</comment>


It's time to stop blaming Internet Explorer  - <AUTHOR> http://www.nczonline.net/blog/2012/07/11/its-time-to-stop-blaming-internet-explorer/

<comment><USER2> Whether it's IE, FF3.6 or whomever else, I'll blame them for stifling my creativity and ability to make things work and look good in a timeframe that doesn't make me pull my hair out. Telling us that we're not meant to work in web if we can't handle these things is a weak argument; I expect a bit of pull and tug in any line of work, and I'll gladly do it, but when the time spent troubleshooting for older/inconsistent browsers is so detrimental to a team's ability to meet deadlines time and time again that you have to hire people specifically for it instead of using that money to innovate elsewhere, something's amiss.

I can only assume how many developers there are at Yahoo!, no less redundant roles and people that have been debugging these issues for a decade+ and know the problems they'll run into like the back of their hand. Smaller agencies and development teams don't have those people to rely on and they shouldn't have to.

</comment><comment><USER3> "What makes the web beautiful is precisely that there are multiple browsers and, if you build things correctly, your sites and applications work in them all."

I work for a company that develops web applications, and I can tell you that the above statement is absolute hogwash. It's a major PITA to implement features such that the user experience is uniform and consistent across all major browsers. In a lot of cases we have had to decide against implementing certain features because they required technologies that were available only in browser X (and X almost always turns out to be Chrome or Firefox).

This is not good for the web, and it does not make the web "beautiful." It's basically fragmentation.

<comment><USER4> Exactly. If you build things correctly it does not work. If you build things _precisely_ incorrectly, it works well.</comment></comment>


"The C Programming Language" -- Answers to Exercises  - b-man http://users.powernet.co.uk/eton/kandr2/

<comment><AUTHOR> <http://clc-wiki.net/wiki/K%26R2_solutions> for more updated solutions</comment>


Every 10 Mins You Don't Touch Your Phone A Child Have Clean Water For Entire Day - <AUTHOR> http://www.businessinsider.com/unicef-tap-project-2014-3?utm_content=buffer1704b&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer

<comment><USER2> Awesome idea - saw this a little bit earlier in the day - not very conducive to when you're out and about because it requires you to be active on the website and the phone unlocked.</comment>


Google and Android have your back by protecting your backups - <AUTHOR> https://security.googleblog.com/2018/10/google-and-android-have-your-back-by.html <comment><USER2> This should have a (2018) flag on it.</comment>


Sun CEO Jon Schwartz to Resign - <AUTHOR> http://digitaldaily.allthingsd.com/20100125/sun-ceo-set-to-announce-resignation/ <comment><USER2> While I personally liked him, I couldn't figure out their strategy, leading me to believe that they didn't really know what they were doing.

You used to be able to buy low-end SPARC systems for $995 (v100, Blade 100) now the cheapest system is much more than that - the same pricing strategy that ruined SGI: as their market share declined they retreated to higher end customers, which led to more market share declines.

<comment><USER3> Companies that are getting eaten from below have very few options. Do you really think Sun could have made a profit selling equipment at PC margins? That requires an entirely different cost structure. If they had tried, you could have written a slightly different comment:

 _Sun used to make really high-quality equipment, but now they are making crappy PCs like everyone else - maybe they should have focused on the customers willing to pay for quality._

Schwartz's task was essentially impossible, and selling to IBM or Oracle was probably the best outcome he could have hoped for.

<comment><USER4> > Companies that are getting eaten from below have very few options.

Companies die if there isn't an entry point that makes sense for customers.

It doesn't have to be at the same price point as the folks eating them from below, but it does have to be some place where customers are willing to enter.

The mid/high-range sun systems are about as expensive as comparable PC based systems. However, the PC systems have a low cost option for development. Suns, not so much.

It doesn't have to cost $500, but it can't cost $10k either.

<comment><USER5> Sun had pretty great entry points on 1U servers around the $1-2k mark. The Fire X2xxx line was price-competitive and worked well with Solaris

</comment></comment></comment></comment><comment><USER6> "...leaving the company in the hands of new owner Oracle (ORCL) and its very profit-minded leadership"

Maybe I'm reading too much into the above statement, but the point of a company is to make profits. There are these things called "charities" for cases when you don't want to do that.

That said, Sun's approach in recent years has certainly been a mess. They have failed to really make open source work for them as a strategy in the same way companies like IBM and Apple have.

<comment><USER7> Apple's open source strategy is well defined, but not, shall we say, integral to their company. They take what works for them, give a bit back here and there, and mostly do proprietary, closed software and "ecosystems". In some ways that's better than a mess (Nokia), but they're not really big open source boosters in the way IBM are.

Sun has given a _lot_ to open source, but they don't seem to have gotten as much back as IBM. I think once again the issue is that there wasn't a particularly clear strategy.

<comment><USER8> Yep, it sucks being the company that owns Java and puts open source on a pedestal, but gets beat badly in creating the ecosystem for Java development... i.e. Eclipse. NetBeans was never even a contender.

<comment><USER9> >Eclipse. NetBeans was never even a contender

The sad part is that it is far superior now. A friend of mine converted me 8 months ago and I am petrified that it will get lost in the shuffle now. The thought of going back to Eclipse is mortifying after having such a consistent experience with Netbeans.

<comment><USER10> I'll concur, as I've been getting quite comfy using Netbeans. If Netbeans gets hung out to dry, it does mean going back to Eclipse (I'm not really into the idea of buying an IDEA license).

<comment><USER11> Actually, the new IDEA 9 now has a free, open-source version, with most of what you'll want. There's still a commercial version with some more features enabled. [http://www.jetbrains.com/idea/features/editions_comparison_m...](http://www.jetbrains.com/idea/features/editions_comparison_matrix.html) NetBeans' profiler is great though. IDEA doesn't have any - I use YourKit, a 3rd-party commercial profiler.</comment></comment></comment></comment></comment></comment>


Ask HN: What online code tutorial was most valuable learning experience for you? - <AUTHOR> This can be anything. It doesn't matter the language, framework, skill level required, etc. - Just a time that comes to mind where a specific internet source helped you accomplish or learn something you.
At the programming bootcamp I went to a few years ago, I ended up adding gmail-like chat to my "final project", a Ruby on Rails application using this tutorial (which I noticed I still had bookmarked):
http://josephndungu.com/tutorials/gmail-like-chat-application-in-ruby-on-rails
I knew I wanted to add live chat to my project in the weeks leading up to it, but started to think it was too daunting of a task for a noob like myself. I almost dropped the idea and when the javascript wasn't working at all with only days left before having to present to a bunch of companies, but I took a deep breath and kept at it and managed to make it look and function perfectly in real-time. I was pretty pumped.
Some of the last GIFs at the bottom of that project's repo show the resulting chat in action. You can visit the site but no one uses it so the chat is useless... and I think it still makes you sign in with the linkedin oath.
https://github.com/EWarringer/Freelanswers
Anyway, it helped me realize some things in programming are less daunting than they might seem.
I'd love to hear some fun or purposeful websites/tutorials that boosted your interest (and/or skill level) in programming at any point in your career. Maybe I'll learn something awesome. <comment><USER2> You know what I found to be the greatest source of knowledge for me?

[https://github.com/sindresorhus/awesome](https://github.com/sindresorhus/awesome)

They also have lists for all languages and almost anything you can think of

<comment><AUTHOR> This is great, thanks!

</comment></comment><comment><AUTHOR> My Bad if I posted this question wrong. I thought I followed the rules:

 _" Leave url blank to submit a question for discussion. If there is no url, the text (if any) will appear at the top of the thread."_</comment>


Ask HN: Hacking Android, what's out there? - old-gregg

I'm thinking about getting an Android phone, either Nexus One or Motorola's Droid. I'm a programmer and I have a few ideas in mind, absolutely non-commercial, personal little hacks.
I have absolutely zero interest in their official Java-based SDK. Google's front page on Android development stinks XML at me. I can comprehend Android idea only from "Linux in my pocket" point of view, and that's the kind of tinkering/development I have in mind (taking existing unix apps/utils and porting useful parts of them to run on mobile devices).
Where to go? I tried searching Google but the Internet is just filled with SDK/NDK blog posts targeting commercial developers.
If one wants to hack on mobile Linux, is Android a viable platform? And if so, there must be a community around it, where do those people hang out? <comment><AUTHOR> The one thing to keep in mind here is that beyond the modified Linux kernel, there's not much if anything about Android that looks like a "traditional" Linux distro. Android has recreated a whole new userland toolchain on top of the kernel, centered around Dalvik (Androids' JVM). If you want a more traditional Linux system to tinker with, buy a N900 instead, which comes with a Maemo Linux distro.

Most Android development in the actual OS level seems to be based around patches to the AOSP codebase. Cyanogen has created a github repo with his build environment/overlay, which supposedly should allow you to start hacking on the internals, and then build/flash that new image to your phone. Building on top of that, the NDK will at least allow you to write Androids apps in C/C++ that could potentially hook into any changes you make to the core OS build, and would give you the most options for tinkering how you like.

I'd recommend the Nexus One for any Android OS work though, as Google made it trivial to gain root access from the bootloader and flash your own image to the system. If you really don't like T-Mobile, you could always wait a bit longer for Google to start selling the Nexus One in CDMA format for VZW.

<comment><USER2> Someone (Mark Pilgrim?) recently pointed out that Android is so divorced from standard "Linux" once you get above the kernel that it's relatively easy to have a completely separate debian that sits alongside Android without much overlap.

If it is just personal hacks then that might be a way forward.

<comment><AUTHOR> Yes, that's true, but because Android uses a completely new/private windowing system, none of your Debian-based applications can access either the framebuffer or the windowing system, so you'd be completely limited to running CLI packages. The best this would really offer is the ability to run an SSH daemon on the phone that you could access from a remote system, although be careful to avoid the iPhone SSH / root password vulnerabilities...</comment></comment></comment>


Diffrence between waterline and Node-Data - <AUTHOR> https://github.com/ratneshsinghparihar/Node-Data<p>The waterline is a greate opensource porject and has been an inspiration for us but there is a big difference between Node-data and waterline . The Node-Data is not an another ORM , its a wrapper over famous ORMs like(mongoose , seqlize , neo4j) . Node-Data provides an abstraction over these famous ORMs so that Developer don't have to deal with them individually and they can write models and transaction over these ORMs with same codebase. <comment><USER2> Can't wait to try it out. I hope you don't mind a slightly tangential question: why TypeScript?</comment>


Turning Geeks Into Rock Stars Is A Game Changer - <AUTHOR> http://techcrunch.com/2011/04/29/geeks-turning-into-rock-stars-is-an-education-game-changer/

<comment><USER2> I agree that giving the people who create things the tools to create and control their own destiny is a game changer. It makes me nervous when only science and math are mentioned in this context, however, as art, entrepreneurship and even computer science encompass much more than those two subjects.

</comment><comment><USER3> Oh great. The last thing this country needs is all our geeks dying of drug overdose in hotel bathtubs.

How about we reward hard work and technical ability in healthy moderation? Take it to a broad base of students and make it a systemic part of our culture.

How about we publicly rebuke the Disney Channel's constant ridiculing of smart kids?

We already reward the top 1% well enough. In this project "high schoolers across the country are invited to enter" and three teams get $5K. Hopefully all are enriched for the effort.

I know this is a site devoted to startups and VC funding. But the neither the dotcom jackpot or the rockstar mentality is going to rebuild the technical talent of a country.

<comment><USER4> Nice straw man.

1) Most rock stars don't die from drug overdoses.

2) If you've ever been around elite performers at the top of their game in the music industry, you'd think differently about their work ethic.

<comment><USER3> 1) Of course, they die from plane crashes. That part was mostly a joke. But not entirely.

2) Truly elite performers need no defending from comments from the likes of me, but I'm sorry if I slurred them anyway.

3) The term 'rock star' means something quite different in common usage than a statistically representative "elite performer at the top of their game in the music industry".

4) This discussion has nothing to do with actual music performers. You get the point.</comment></comment></comment>


Closures – A Simple Explanation (Using Ruby) - <AUTHOR> http://www.skorks.com/2010/05/closures-a-simple-explanation-using-ruby/

<comment><USER3> "the most popular languages that are in use right now don't support closures ( _Java_ , C++)"

That is blatantly wrong. Closures, that is, the implementation structure which stores along with a code pointer the references or values to which local variables referenced by said code are bound, have been in Java since version _1.0_. Otherwise you could not write code such as:

class foo { final static int bar = 6; static class baz { int bla() { return bar; } } }

and expect "(new foo.baz()).bla()" to return 6.

What Java _is_ missing (and I suspect what the author is conflating closures with) are _anonymous functions_ , which require closures to function properly for the same reason inner classes require closures.

 _Closures are not anonymous functions._ Closures are an _implementation detail_ which allow anonymous functions (among other structures) to act as expected in statically-scoped languages.

Scheme has anonymous functions and closures.

Java does not have anonymous functions but _does_ have closures.

Emacs Lisp has anonymous functions but does _not_ have closures (and thus does not exhibit static scope).

BASIC has neither anonymous functions nor closures.

(It is worthwhile to note that there are other methods for implementing static scope such as alpha-renaming but they are usually much less efficient than closures.)

<comment><USER4> What happens if bar is not final and/or not static?

<comment><USER5> If it's not static you wouldn't be able to reference it from the static context (the inner class baz). It could be non-final though, because it's a field not a local.

The second part is the more interesting part, and is part of what people are talking about when they say that Java doesn't have closures: you can't modify closed over local (stack allocated) variables. However you can call methods that modify or otherwise modify heap-allocated objects, for instance if bar was an array you could modify it's contents, or if it was a Vector you could call addElement() or whatever.

In the GP's case, bar is a member field, not a local, so I don't think it needs to be final, and a quick test checks out. But if those were variables local to a method and you referenced them from an anonymous inner class, they would have to be final.

See: [http://c2.com/ppr/wiki/JavaIdioms/ClosuresThatWorkAroundFina...](http://c2.com/ppr/wiki/JavaIdioms/ClosuresThatWorkAroundFinalLimitation.html)

If I recall correctly, from digging into the famous Guy Steele quote "we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp." I think this decision was made at the time because programmers didn't like the idea of heap-allocated local primitives. I could be totally off base here though. That wiki page mentions something about preserving the threading model, which sounds reasonable, but I don't know enough about Java's history to be totally clear on the motivation.

edited because I'm a pedant.

and the relevant message from Guy Steele: [http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/m...](http://people.csail.mit.edu/gregs/ll1-discuss-archive- html/msg04030.html) (that whole thread is fascinating, massive respect for GLS as if I didn't already, and helped quell some of my hipster Java hatred.)

<comment><USER3> Glad you know more about Java than I do :) I never knew about the restriction on mutating local variables in the closure. It's strange to think about that coming from the FP world where all mutable values are references to cells that (conceptually) live on the heap.

</comment></comment></comment></comment><comment><USER6> From the succinct description of closures:

        It remembers the values of all the variables that were in
        scope when the function was created. It is then able to
        access those variables when it is called even though they may
        no longer be in scope.

No! It doesn't remember the _values_. It binds the _variables_. This is a major misstep in describing closures. The most important point: when the values of the bound variables change _the closure sees the new values_.

Please, fix this!

A better simple description of closures:

* You can pass a closure around as a value (to be called later).

* When you create a closure it is bound to the variables in its current scope. When you call a closure, it sees the _current_ value of the bound variables (not their values at the time the closure was created).

Follow this with a simple example, like:

        i := 0
        inc := func() {
            i++
        }
        println(i) // prints "0"
        inc()
        println(i) // prints "1"
        inc()
        println(i) // prints "2"

<comment><USER7> Depends on the language. "Closure" (at least to me) doesn't imply this bevaior in a language with mutable variables. And then you have pure languages and languages which only support mutation through reference values, in which his explanation would be correct.

<comment><USER8> Indeed. Python is a prime example of a language with closures that doesn't do variable-name binding, due to the way variables and specifically assignments work in general with Python.

<comment><USER9> I'm sorry? Python is the same way:

        >>> i = 10
        >>> def x():
        ...   print i
        ...
        >>> x()
        10
        >>> i = 11
        >>> x()
        11

The value is not closed over in any language I can think of off the top of my head. It's a reference to a variable in lexical scope.

What python does slightly differently is writing to variables in outer scopes. But it still closes over references.

<comment><USER8> The writing to variables in outer scopes is what I meant by a lack of actual name-binding, due to the way Python does assignments; it seems I expressed that poorly. Here's a better attempt. The top poster's example simply doesn't work in Python:

        >>> i = 0
        >>> def inc():
        ...   i += 1
        ...
        >>> print i
        0
        >>> inc()
        Traceback (most recent call last):
        File "<stdin>", line 1, in <module>
        File "<stdin>", line 2, in inc
        UnboundLocalError: local variable 'i' referenced before assignment

So variables are name-bound in the sense that you can read from their original name and reference but you can't assign in normal ways. (Python has closures, which I said, just not typical closures that other languages might have.) Leading to the pattern of wrapping an array or dict or class around the thing you're interested in.

        >>> i_wrapped = [0]
        >>> def inc():
        ...   i_wrapped[0] += 1
        ...
        >>> print i_wrapped[0]
        0
        >>> inc()
        >>> print i_wrapped[0]
        1

One could argue that one shouldn't really have such mutable state inside a closure of the enclosed items, which I do, but a person expecting to (set!) or the like is going to be surprised.

Edit: I guess it should be said that Python 3 has the 'nonlocal' keyword, and Python 2 has the 'global' keyword for global cases, which allows for expected behavior. So the functionality is still there, but still needs an extra statement.

        >>> i = 0
        >>> def out():
        ...   i = 0
        ...   def inc():
        ...     nonlocal i
        ...     i += 1
        ...   print(i)
        ...   inc()
        ...   print(i)
        ...
        >>> print(i)
        0
        >>> out()
        0
        1
        >>> print(i)
        0

<comment><USER6> Python is a bad example here, as its scoping rules are inconsistent and frequently surprising.

</comment></comment></comment></comment></comment></comment><comment><USER10> For me one of the coolest ways of using closures was to implement undo system. It's not very efficient, but easy to write and compose.

Basically every editor operation can return a function that does the opposite. For example (some lua-like language)

function DeleteLine(lines, line_number)

       local deletedLine = lines[line_number]

       -- do the actual deletion - move elements up

       return function() InsertLine(lines, line_number, deletedLine) end

     end

     function InsertLine(lines, line_number, deletedLine)

       -- do the actual insertion

       return function() DeleteLine(lines, line_number) end

     end

Again, not very efficient - but easy to grasp. Without closures would be hard to compose - you would have to take care of a lot of extra parameters where they need to be stored, etc.

<comment><USER11> That's pretty neat, but returning the undo operation puts the responsibility of actually keeping track of undo operations on the caller side. I think it'd be better having each function push it's corresponding undo operation onto some global undo stack, thereby ensuring every operation gets recorded, without the caller having to do any work (or even know about the undo functionality).

But of course, you don't really need closures for that. For example, Cocoa does it this way:

       - (void)deleteLineAtRow:(NSUInteger)row {
         NSString *deletedLine = [self lineAtRow:row];
         [[self.undoManager prepareWithInvocationTarget:self] insertLine:deletedLine atRow:row];
         // do actual deletion
       }

       - (void)insertLine:(NSString *)line atRow:(NSUInteger)row {
         [[self.undoManager prepareWithInvocationTarget:self] deleteLineAtRow:row];
         // do actual insertion
       }

That -prepareWithInvocation: stuff tells the undoManager to store the next message sent to it, along with it's parameters, on an internal stack. This is of course depends on Objective-C's dynamic nature and there's a whole lot of complexity hidden inside the undo manager object.

But mixing this undo manager concept with closures should be pretty straightforward, resulting in something like this (note that this is a hypothetical example; Cocoa does not currently implement this functionality):

       - (void)deleteLineAtRow:(NSUInteger)row {
         NSString *deletedLine = [self lineAtRow:row];
         [self.undoManager registerUndoWithBlock:^{
           [self insertLine:deletedLine atRow:row];
         }];
         // do actual deletion
       }

       - (void)insertLine:(NSString *)line atRow:(NSUInteger)row {
         [self.undoManager registerUndoWithBlock:^{
           [self deleteLineAtRow:row];
         }];
         // do actual insertion
       }

<comment><USER10> Thanks for that! I was mainly thinking that by returning functions, one can compose for more complex editor operations, more functions at once, and even simplify them (if they cancel each other). Off course this is not currently possible, unless the returned functions are some kind of AST tree, and there is something that can optimize them at runtime (dynamic programming?)... Probably overkill....

For example deleteBlock might delete 10 lines, and if there is better composability, instead of returning undo to insert 10 individual lines, it can be merged as one operation with 10 lines, basically by having rules, if you have production like "insertLine * insertLine * insertLine * insertLine" - <USER2> can make this as "insertLines[lines collected]" - but that's beyond the discussion.

All this just to avoid making insertBlock/deleteBlock special, but reuse insertLine/deleteLine.... lost my thought already - too late in the morning....

</comment></comment></comment><comment><USER12> To save you time, you can skip the initial rant about how closures are not taught in universities and start reading from the heading "A Concept Explained Simply".

</comment><comment><USER13> This explanation did not add anything to help me better understand closures and anonymous functions. I already understand that closures allow you to pass an anonymous function around and it maintains the variables that were in its scope when it was created (whether by copy or reference).

The problem, at least for me, is finding a non-trivial example of using an anonymous function. Does anybody have other examples like malkia's[1] that demonstrate why anonymous functions and closures are useful? Or maybe just a good explanation of functional programming?

1\. <http://news.ycombinator.com/item?id=2919149>

<comment><USER5> I think the classic example of using anonymous functions is probably as arguments to map, filter, reduce, etc:

      > (mapcar #'(lambda (x) (+ x x)) (list 1 2 3 4))
      (2 4 6 8)

In that case, the anonymous function doesn't close over anything. Here's an example where it does (from On Lisp):

      > (defun list+ (lst n)
          (mapcar #'(lambda (x) (+ x n))
                  lst))
      > (list+ (list 1 2 3) 10)
      (11 12 13)

In this case `n` is closed over.

Both of these ARE pretty trivial, but the point I'm trying to make is that anonymous functions in many cases just make some code a bit more concise and avoids the need for nested named functions, which I guess is common in Python where `lambda` can only contain an expression.

I'm reading On Lisp now, and there are some examples early on of functions that return functions. In those cases, the functions being returned are almost always anonymous, just because naming them would be kind of verbose and unnecessary.

There are other, more complicated uses, for instance closures can be used as a sort of crude way of making objects, and supporting hacky encapsulation, which is described in a lot of Scheme textbooks, like SICP: [http://mitpress.mit.edu/sicp/full-text/book/book- Z-H-21.html...](http://mitpress.mit.edu/sicp/full-text/book/book- Z-H-21.html#%_sec_3.2.3)

As for functional programming, it's a lot more than just first-class, anonymous and higher order functions. It also encourages or enforces pure functions: functions in the mathematical sense that do not have side effects, and always return the same value given the same arguments.

SICP is a good start, if you're curious about Lisp. It's a great book. There's other places too though, to get this stuff, if you wanted to dive into the Haskell world via Learn you a Haskell I'm sure you'd see some of what FP is about. I'm less familiar with it though.

edited for clarity and fix the SICP link

</comment></comment><comment><USER14> Back to the Future II is the best explanation of closures I've ever seen.

<comment><USER3> I consider myself well-versed on both closures and BttF II but I don't understand this comment. Care to explain?

<comment><USER14> I'm referring to the scene in which Doc draws a diagram on a blackboard to explain to Marty why the two of them still exist even though they've screwed up history and created an alternate 1985. Essentially, they exist because they're in a time closure and they carry their own pasts with them into 1985-B.

It's not a perfect analogy, but it's close enough that I've been able to use that scene to help make closures click for someone who was having trouble understanding them.

</comment></comment></comment><comment><USER15> Closures are functions plus their bindings for its free variables. The references to the bindings have lexical scope and indefinite extent.

</comment><comment><USER16> I dont understand the difference between a closure and an object's state. Is an object one example of a closure? You can pass it around and it contains instance variables.

What are lambdas for in this context? Simply calling the object's attribute would return the value set at creation - even if modified afterwards.

<comment><USER16> Hope this helps: (Python)

def closure(x): return lambda y:x+y

a = closure(5) #'a' is a function now a(2) #returns 7 a(3) #returns 8

The function 'closure' can be carried around and it remembers the value of x from when it was created.

Got the example from this article: <http://linuxgazette.net/109/pramode.html> (I believe it was shared a few weeks ago) - great reference for other FP concepts and a good way to get started in FP if you already like working with Python.

</comment></comment><comment><USER17> Wow, I've seen functions like these in Erlang, but I didn't realize their usefulness until reading this.</comment>


'Super Recognizers' Like Me - <AUTHOR> https://www.vice.com/en_us/article/ep487p/how-police-are-using-super-recognizers-like-me-to-track-criminals <comment><USER2> The article reads a lot like a PR piece. The 100% accuracy claim in particular seems... unlikely.

<comment><USER3> Forensics loves junk science...

[https://arstechnica.com/science/2020/02/the-wear-patterns- of...](https://arstechnica.com/science/2020/02/the-wear-patterns-of-your- jeans-arent-good-forensic-evidence/)

</comment></comment><comment><USER4> I'm certain I have the ability to super recognize people from audio and smell, but not visual. I'm very nearly face blind, and can hardly remember close people's faces. Usually I can detect a voice actor from a single spoken word, or which co-worker walked down a given hall just from sense of smell.

The audio one is hard to explain, almost like I can visualize their voice thumbprint, hearing each aspect of intonation, syllable spacing, and cadence. It's so clear I can often see it matching over other words by the same person. Rarely an actor might put on an accent good enough I don't "recognize" them, and it's deeply unsettling, like an acustic uncanny valley, hearing the wrong voice on top of a face.

I went without glasses for almost six months when I was little before my parents realized, so I've always wondered if my audio and olfactory centers just overdeveloped.

</comment><comment><USER5> I've been fascinated by the mechanisms behind human facial recognition ever since I read Peter Watts 'Blindsight'. Near the end he introduces an idea similar to the Chernoff face[1], plots of multivariate data in the shape of a human face. The idea is that humans are so keyed into recognizing subtle nuances in facial expressions, we're better at interpreting mulitvariate data graphed as a facial expression. Some interesting parts from this interview:

\- She surprisingly claims that she's not good at recognizing emotions.

\- She can recognize adults based on how they looked as children. This suggests there's a sort of 'fuzzing' process that allows her to interpolate aging.

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

</comment><comment><USER6> I remember listening to something on my local public radio station (KUOW) once, I'd guess on "This American Life" or "Hidden Brain" but I'm not sure, about extremes of human memory and related things.

They talked about two people who were at opposite ends of facial memory ability. There was a woman who had total face blindness. She could tell she was looking at a face, but could not recall who it belonged to.

If you had her boyfriend walk out of the room she was in, and then come back in with a couple other people dressed the same as him, she could not tell by sight which one was her boyfriend.

The other person had perfect facial memory. For example, if some random stranger at an airport asked him what time it was, and then ten years later he was introduced to that same person at, say, a party, he'd recognize instantly that they asked him the time ten years ago at the airport.

They say opposites attract, and in this case there was some truth to that--the man with perfect facial memory was also the boyfriend of the woman with total face blindness.

</comment><comment><USER7> Any mechanism (biological or otherwise) for seeing patterns in limited information is sure to also see a lot of erroneous patterns. Furthermore if one part of the brain is often seeing patterns that aren't there, other parts of the brain are likely doing the same. For this reason, I wonder if being a 'super recognizer' is correlated with schizophrenia.

<comment><USER8> >seeing patterns in limited information is sure to also see a lot of erroneous patterns

I don't think that the brain uses general pattern recognition on faces, but rather a distinct and specialized facial processing module. Without reading more about super-recognizers, my guess is that their facial processing module is OP. These people will never forget or confuse a face in the same way that you will basically never confuse your mom for someone else, except for a split second in edge cases. We don't worry about confusing our mom for someone else.

<comment><USER9> How much of that is context, though? I certainly wouldn't (and haven't) recognize my mom or my wife or anyone else, really, in the wrong context when I wasn't expecting to see them.

<comment><USER8> That's fascinating. It sounds like you might be in the minority. I don't think I'm particularly good at recognizing faces, but I've recognized several old acquaintances among many passerby in a big city. I don't even have to look at them directly - sometimes my "spidey sense" kicks in when they enter my peripheral vision.

<comment><USER8> Edit: I took the test and it said that I am probably a super recognizer. I didn't think it was likely since only 2% of people have the ability, but maybe I extrapolated too much from me not remembering names as much as I'd like to.

I'd still be surprised if the average person can't quickly recognize their mom out of context.

</comment></comment></comment></comment></comment><comment><USER10> I first heard of the concept of super-recognizers from this documentary video from Australia: [https://www.youtube.com/watch?v=i6AVF0GhxNk](https://www.youtube.com/watch?v=i6AVF0GhxNk) "Passport Problem | Testing out fake passport | Tricking passport scanner"

</comment><comment><USER11> They didn't answer the question that I wanted to know, what about identical twins, can she distinguish between them?

<comment><USER12> I'm sure they can. I grew up with identical twin mother and aunt and while many people regularly mixed them up, I never had an issue. I always thought it was quite obvious. So my suspicion is that whatever it is that I could see due to familiarity, is likely what super recognizers can see immediately.

<comment><USER13> Ditto; I had a couple friends that were identical friends, and it only took a few days of interaction I think to start consistently differentiating them -- and I have terrible memory of people.

They're identical for the most part, but there's always obvious cues; how they walk, different expressions/reactions, different tones when talking, slightly different slang, etc. It's like a deterministic lockstep game that desynchronized when they were born -- the desync slowly but surely cascades.

</comment></comment></comment><comment><USER14> Amazing!

I fear I have the opposite. I try really hard, but I can't remember faces or especially names. Until I really get to know someone, I'm not quite certain who I'm dealing with. It's a curse.

</comment><comment><USER15> I passed some university test for this "superpower" a few years ago.

A lot of it was just recognising faces they'd previously shown me from very fuzzy images.

Overall i got the impression they wanted insight into training an AI.

I still get the odd email asking me to participate , in more studies (i did one or two more)but i ignore them now because of the above, and it's an unrewarding time sink.

It was actually the same test that is linked in the article and here.

</comment><comment><USER16> Amazing skill. Congrats and all but do color me scared.

<comment><USER17> It's not skill, it's pure woo. I'm not impressed.

</comment></comment><comment><USER18> Reminds me of William Gibsons Iduro's Colin Laney. Likely we will see more of these newly type of jobs going forward.

</comment><comment><AUTHOR> I think John le Carre had a character who did this?

An older women who worked admin for MI6 and did all the unknown id's.

It might be been a different author. But it was written in the 90's at the latest.

<comment><AUTHOR> "It is the almost hilarious case, but perfectly true, that while the CIA "cousins" use banks of computers in which are stored millions and millions of facial features to try to match up the incoming daily flow of photographs, Britain uses Blodwyn.

An elderly and often ill-used lady, forever harassed by her younger male colleagues for a quick identification, Blodwyn has been in the job forty years and works underneath Sentinel House, where she presides over the huge archive of pictures that make up MI6's "mug book." Not a book at all, it is in fact a cavernous vault where are stored rows and rows of volumes of photographs, of which Blodwyn alone possesses an encyclopedic knowledge.

Her mind is something like the CIA's computer bank, which she can occasionally defeat. In her memory is stored not the tiniest detail of the Thirty Years' War or even the Wall Street stock prices; her mind stores faces. Shapes of noses, lines of jaws, casts of eyes; the sag of a cheek, the curve of a lip, the way a glass or cigarette is held, the glint of a capped tooth in a smile taken in an Australian pub and showing up years later in a London supermarket --all are grist to the mill of her remarkable memory."

(The Fourth Protocol, Frederick Forsyth, 1984.)

</comment></comment><comment><USER19> There's a test linked to see if you might be a super recognizer. It only used Caucasian faces. Insert epic facepalm here.

<comment><USER20> [https://greenwichuniversity.eu.qualtrics.com/jfe/form/SV_e3x...](https://greenwichuniversity.eu.qualtrics.com/jfe/form/SV_e3xDuCccGAdgbfT?Source=Website)

So you don't have to hunt for it too.

<comment><USER21> Did you do the test? It seemed very basic and simple, to me. I got 13/14 which it says 'may be a superrecognizer', but I definitely don't think I am, so assume the test isn't much good. Curious to know how others fare.

<comment><USER22> I tested everyone in my family with an online test of facial recognition (probably it was [https://facetest.psy.unsw.edu.au/](https://facetest.psy.unsw.edu.au/)). The results from the online test did not correlate with our real-life experience: a person who is very bad at recognising people in real life got a slightly better score on the online test than a person who is very good at recognising people in real life.</comment></comment></comment></comment>