Show HN: Servant – A Haskell web framework with type-level API DSL - <AUTHOR> http://haskell-servant.github.io/

<comment><AUTHOR> We came up with a way of reifying specifications of web APIs at the type level, and built a web framework around it. The basic idea was, I believe, first developed by Ralf Lämmel and Klaus Ostermann [0], as a Haskell solution to the expression problem, but I think it's the first large-scale application of these ideas.

Checking for correctness and deriving functionality from that comes pretty naturally after that, so it's easy to reduce boilerplate (e.g., generate client libraries and documentation automatically) and make static guarantees (e.g., that a link exists within an API, and won't 404).

[0] [http://www.informatik.uni- marburg.de/~kos/papers/gpce06.pdf](http://www.informatik.uni- marburg.de/~kos/papers/gpce06.pdf)

</comment><comment><USER2> Having the type-system statically verify that your API is correct and that your usage of it is correct, but oof, that syntax is quite hard to read. I wonder if you could use Template Haskell to generate that from an easier-to- read routes file similar to Yesod.

<comment><AUTHOR> We had QQ originally, but removed it because it wasn't extensible (you can define new expressions in the type-level DSL, but you couldn't add them to the QQ). We've figured out how to do that now, and there's an issue someone opened asking for it back ([https://github.com/haskell- servant/servant/issues/55](https://github.com/haskell- servant/servant/issues/55)), so it'll probably soon return.

You do get kind of used to it, though, for what it's worth. And you can always break things up. E.g.:

        type MyAPI = "users" :> Get '[JSON] User
                  :<|> "users" :> ReqBody '[JSON] User :> Post '[] ()

Can generally be rewritten as:

        type GetUser = Get '[JSON] User
        type PostUer = ReqBody '[JSON] User :> Post '[] ()
        type MyAPI = "user" :> (GetUser :<|> PostUser)

etc.</comment></comment>


Show HN: Movie Sniper – movie discovery service - <AUTHOR> http://moviesniper.com

<comment><USER2> Good work!

but I was typing "supercars chase LA" and got this result: [http://moviesniper.com/movies/la-hija-de- moctezuma?q%5B%5D=s...](http://moviesniper.com/movies/la-hija-de- moctezuma?q%5B%5D=supercars+chase+la)

maybe because the LA was mistaken?

<comment><AUTHOR> yeah, that's the case, everything is lowercased, so it could not give proper results.

Thanks for feedback.

</comment></comment><comment><USER3> [http://moviesniper.com/movies/after- sex?q%5B%5D=aliens+heart...](http://moviesniper.com/movies/after- sex?q%5B%5D=aliens+heartache+guns)

<comment><AUTHOR> yep, a lot of work to go still :)

I was tweaking it for some time now, but now and then it returns some obscure results.

</comment></comment><comment><USER4> Perfect for lazy ass evenings when you don't know what to watch. :)

</comment><comment><USER5> Quick question. Is this based on meteor js?

<comment><AUTHOR> nope, ruby on rails.

</comment></comment><comment><USER6> love this - _please_ link it up to Netflix API :-)</comment>


XX Combinator: Seed For Women In Their 40s - <AUTHOR> http://www.businessinsider.com/xx-combinator-2010-7 <comment><AUTHOR> Sorry about the title, I noticed after that it sounds, erm. ...

<comment><USER2> Tell me with a straight face that wasn't on purpose ;)</comment></comment>


AirPods Pro Page Performance - <AUTHOR> https://foobartel.com/articles/airpods-pro-page-performance <comment><USER2> Curious: does anyone have an actual negative user experience on the website? I tested it on both my shotty WiFi (for reference, I'm unable to stream YouTube at 720p), and cellular (2 bars), and I found the page to load quickly and be reasonably responsive either way. In the thread I think twitter user Kenneth Auchenberg puts it best:

> Come on. Look at the experience and tell me you expected it to be 1kb? This > is an interactive application, not a text document. [...] We have started to > chase a false "unicorn" narrative of websites with expected app-like > experiences, but sizes like text documents from the 2000s. Something doesn't > add up.

<comment><USER3> I avoid video like the plague on my phone to prevent excess data charges. But it's reasonable for a single page load to use more than 1% of my monthly limit?

I don't expect websites to being the kB range, but somewhere in the single digit megabytes seems to me like a reasonable limit

<comment><USER4> Maybe the problem Isn't the page size. Maybe the problem is the artificial bandwidth scarcity being created by US cell providers.

They have no way to increase sales due to basically complete market saturation, so instead they find new ways to soak their existing customer base.

People always seem to forget how horrible things were when at&t was about to acquire T-Mobile. Had they not been forced to hand TM all that spectrum we'd still be paying $100/mo for 2GB of hard capped data.

<comment><USER5> Not sure about the GP but they might not be in the US. There are many parts of the world where bandwidth is scarce and expensive (w.r.t. average income). There's a reason why both Android and Apple have "low data modes"

<comment><USER6> If you read the tread that follows on the original tweet: It seems that the Apple website respects this and returns a low data version on low bandwidth connections.

</comment></comment></comment></comment></comment><comment><USER7> Okay, this is something that I was thinking about: Are megabytes and seconds really a good indicator for UX quality of a website?

Youtube is amazing, it starts playing the video before even the video title is rendered or any other part of the page is loaded. Who cares if it downloads who knows how many megabytes of JS or HTML before the DOM is ready?

On the other hand, after clicking on a tweet link Twitter would show me multiple loading indicator, load the main page then show me some more loading indicator and then show me the tweet text and after a while, I can see the images attached to the tweet. It is often the same for any other "Web App".

On Apple's case, the page actually becomes usable almost instantly. The page would first show me the title on the black background and then the airpods photo would fade in from the darkness and I would be able to scroll immediately. I would say, the experience is closer to Youtube than Twitter.

<comment><USER8> > _Who cares if it downloads who knows how many megabytes of JS or HTML before > the DOM is ready?_

People with limited data caps. If it really did download 60 MB on my phone (it seems like it's somewhat adaptive, so it's quite likely Apple's web designers paid attention and it wouldn't), that'd be 2 % of my monthly data cap, for what's effectively a product page.

<comment><USER7> Fair enough but I think you can also appreciate that Apple's job here is to create the best user experience here for the potential buyer. It's not really a website that you have to visit or your children will starve.

They probably set the limits to accommodate best the iPhone users who are willing to spend 250$ on a non-essential device that will last about 2 years.

<comment><USER8> I mean, on desktop it spins up my laptop fans and doesn't even scroll smoothly, so they're clearly somewhat failing at UX. If I pretend-throttle in dev tools it gets _better_.

Then of course I'll probably never buy their product, so my experience isn't _that_ important.

<comment><USER9> That's weird, b/c I'm on a 2011 macbook pro and it scrolls perfectly smoothly, when there are a LOT of websites on the internet right now where that is not the case (including twitter and facebook).

</comment></comment></comment></comment></comment><comment><USER10> On holiday, with our 100MB datarooming package outside Europe at USD13, watching this page would cost me over USD8?!

<comment><USER11> He didn't include this in the main tweet, but in his deeper analysis he found on mobile they only send 2.4 mb of resources so, it would only be 2% of your 100 mb cap. Still a lot but you probably shouldn't be shopping for apple products on that data budget.

<comment><USER10> What I wanted to say ( :) ): as a user there is no obvious link between cost and usage. (Vs phone when you are billed by the minute which is easier to "understand")

How can a user know that browsing a single page will cost him more than a whatsapp (video) call before doing it?

</comment></comment></comment><comment><USER12> An extreme cynic could say: If you don't have a fast connection with dataplan for that, you're not rich enough to be the target market.

A lot of iOS and macOS software and websites are designed with assumption of having good infrastructure only affluent western world has.

<comment><USER13> i think the discussion on that page shows that « connection quality » shouldn't be only based on bandwidth to determine which version of the page should be sent. Progressive downloading of compressed images has been invented for low bandwidth , but no technics exists yet to show a different webpage depending on your data plan.

</comment></comment><comment><USER14> There are a few comments in this thread about how the page is able to determine if you're on a low-bandwidth connection and sends pictures instead of videos.

If anyone knows how this is achieved, I'd love to follow some links.

<comment><USER15> Even at high bandwidth connections, I think they are always using images to power the animations. At lower bandwidth's, they might just be limiting how many frames come down.

For example, here are 3 frames of the hair flip:

[https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5...](https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5_9206_4470_b28e_08307a42f19b/anim/sequence/large/02-head-bob- turn/0021.jpg)

[https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5...](https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5_9206_4470_b28e_08307a42f19b/anim/sequence/large/02-head-bob- turn/0022.jpg)

[https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5...](https://www.apple.com/105/media/us/airpods- pro/2019/1299e2f5_9206_4470_b28e_08307a42f19b/anim/sequence/large/02-head-bob- turn/0023.jpg)

NYT did a similar scrolly article recently, but they used a video that was synced to scroll position: [https://www.nytimes.com/interactive/2019/10/30/world/middlee...](https://www.nytimes.com/interactive/2019/10/30/world/middleeast/syria- turkey-maps.html)

</comment></comment><comment> why-oh-why What really annoys me is that it's 2019 and companies, even Apple, are still doing these unnerving "parallax" sites that force you to scroll riiight there to read a paragraph. Overscroll? You'll have to scroll back.

How's that a good experience?

On mobile it would be super easy to just have it snap in place: one flick goes to the next "slide."

But no. Let's treat websites as videos and the scroll as a way to _manually_ play them.

</comment><comment><USER16> To be fair, it is a nice site.

Those numbers definitely make it sound like it's not the ideal solution for the client. But from Apple's perspective, does anyone know how much more their servers are being taxed per-view? (Not sure if they have caching solutions to alleviate the load. That is a lot of packets to send, though.)

</comment><comment><USER17> On my system it made 54 requests totaling 4.13MB of data. Artwork looks pretty good, like it's more than 4MB.

This machine doesn't have retina. Maybe for retina machines it loads larger artwork. Also there's a bunch of errors in the console including:

Error: WebGL: Disallowing antialiased backbuffers due to blacklisting.main.built.js:10:16167

Error: Cannot find module '@marcom/ac-polyfills/Array/prototype.forEach' ac- analytics.js:1:166

Strict-Transport-Security: The site specified a header that could not be parsed successfully

The errors don't seem to have affected anything, but maybe more stuff didn't load because of the errors.

Oh wait people are seeing video? Yeah I don't get any videos.

</comment><comment><USER18> Apple, ( And Stripe ) used to be very good in their Web Page design and performance, but over the page few years things has gone downhill, along with their product and software quality. This cant be all a coincidence.

</comment><comment><USER19> FWIW, I'm not able to replicate that - getting ~70-80 requests with 2.9MB transfer/4.8MB resources on Chrome.

<comment><USER7> The page does not behave the same with the developer tools open on the same window, the animation would not start etc. To replicate, open the developer tools in a sperate window.

<comment><USER20> can't replicate either with firefox 70 even with devtools off and all my blockers off, don't see any animations

</comment></comment></comment><comment><USER21> We changed the URL from [https://twitter.com/foobartel/status/1189135552949317632](https://twitter.com/foobartel/status/1189135552949317632) to the blog post pointed to by a tweet in the thread.

</comment><comment><USER22> I am planning to build a landing page for a small beverage product similar to this. Can anyone help me understand on how this web experience was implemented. Is it as simple as onScroll-> load next image ?

Also what is a recommended tool of 2019 to convert video to images ?

<comment><USER15> NYT also created a similar experience using video where video.currentTime was tied to scroll location: [https://www.nytimes.com/interactive/2019/10/30/world/middlee...](https://www.nytimes.com/interactive/2019/10/30/world/middleeast/syria- turkey-maps.html)

I think there are some restrictions on video encoding parameters in order to make scrolling feel smooth which will increase the video size.

</comment></comment><comment><USER23> The page load doesn't seem to change with "Low Data Mode" enabled on Safari (seeing ~30MB).

Does anyone know if there is a way to detect that setting from within Safari? Would be cool to provide a low-fi version of a page if that was detected.

<comment><USER24> The `Save-Data` request header: [https://developers.google.com/web/fundamentals/performance/o...](https://developers.google.com/web/fundamentals/performance/optimizing- content-efficiency/save-data)

<comment><USER23> Interesting. That is a separate experimental low-data setting that's been around for a while in Chrome, but isn't supported by Safari [0]. Haven't run across it before, thanks!

For low data mode specifically, looks like you can easily get "allowsConstrainedNetworkAccess" from an iOS app [1], but don't see anything comparable available for Safari or Firefox.

[0] [https://caniuse.com/#search=save-data](https://caniuse.com/#search=save- data) [1] [https://developer.apple.com/videos/play/wwdc2019/712/](https://developer.apple.com/videos/play/wwdc2019/712/)

Edit: typo

</comment></comment></comment><comment><USER25> [https://beta.trimread.com/articles/368](https://beta.trimread.com/articles/368)

Trim strips it down to 12KB. And really it still conveys the message with just text just fine.

</comment><comment><USER26> I don't get how people can get upset about a website.

</comment><comment><USER27> Didn't read but sounds like web components without a bundling concept.

</comment><comment><USER28> It's a "presentation" page. Who cares how many requests it makes. You'll only load it once, if that. Its only function is to present stuff in a way that'll make you buy it, which is something it accomplishes really well.

<comment><USER29> That's an interesting argument to make. So egregious design choices are fine for Apple "presentation" pages. Got it. Transferring one-tenth of a CD-ROM is fine because Apple is selling you something.

What other types of pages would you let Apple get away with that you might not let, say, Amazon, or Google, or Microsoft, or Facebook get away with?

<comment><USER30> You can choose not to visit Apple.com if you don't like it?

<comment><USER29> I don't mind apple.com at all -- nothing against them. I just don't understand OP's argument.

</comment></comment></comment></comment><comment><USER31> I'm no expert at rendering HTML, but I wonder if HTML can be "optimized" so that some css rules and redundant divs can be "merged".

If that can be done server-side, it might reduce page weight. If it's not possible, well, I guess HTML should be removed from the face of the earth. The language has too much nonsense and ambiguity. The fact that html can now have its structure dynamically changed with javascript inserting string at random places means it will always let web developers build bloated websites like this.

I really don't know how to solve such problem. Usually the language will encourage the flawed usages it allows. A language must always put constraints to avoid unwanted usages. Either that or have browsers not display pages that are too large, by having a size limit or something of that fashion.

<comment><USER32> I think most of the HTML you get from large websites is gzipped. Gzip is pretty good at compressing things like three nested div tags. So I think if you tried to build this sort of optimizer, you'd find that a big chunk of the plaintext savings gets lost through reduced compression efficiency. But who knows how much? Maybe it could help in some cases. (Though then of course you'd have to figure out how not to break CSS selectors.)

<comment><USER33> Yeah, CSS selectors in JavaScript would probably be the main issue here, and figuring out if a selector path is used is a very difficult problem to solve.

I really wish we could just collectively move away from stupidly complex webpages and get back to JavaScript as optional for most pages. Once you eliminate JavaScript as a required component, you tend to design things more simply and page loads become lighter and faster.

IMO, JavaScript should only be required for applications (maps, games, perhaps video playback), with everything else using primarily HTML and CSS. That would kind of put me out of a job though, but I think it would make the internet better, and it would certainly help improve efforts to improve accessibility.</comment></comment></comment>


NYC offering a free, 3 day event to woo LatAm startups to "be a part of it" - <AUTHOR> http://torrenegra.com/post/23049111690/nyc-offering-a-free-3-day-event-to-woo-latam-startups

<comment><USER2> Fantastic! I'm definitely interested, kudos to Patricia and everyone else for the effort of setting this up!

</comment><comment><USER3> Great event, devs should keep an eye on this too. Lots of work opportunities.</comment>


Up to 12M websites may have been compromised via Drupal vulnerability - <AUTHOR> http://www.bbc.com/news/technology-29846539 <comment><USER2> My sympathies are with the Drupal community, it may never fully recover from a crisis of this magnitude despite whatever.

At times like this, I really wish there were more best practices to mitigate against these type of vulnerabilities.

One idea is using the remote-execution vulnerability itself to remotely patch the servers by passing the antidote as the payload. I am not sure if this would be legal.

The other is something what CloudFlare already does but doing it at the hosting-provider or ISP layer. It need not be as proactive as CloudFlare which can inspect HTTP requests for known exploits and blocks them. It could be something as simple as running scanners and routinely informing customers that their websites are vulnerable. Or better still, temporarily disabling the account or putting it into read-only mode, thereby forcing users to take action.

<comment><USER3> > _At times like this, I really wish there were more best practices to > mitigate against these type of vulnerabilities._

There are many best practices:

      - Use version control.
      - Have remote backups for the past day, week, month, etc.
      - Apply security patches immediately (and have test infrastructure so you can make sure they don't break anything).
      - Be able to rebuild a server from scratch w/ backups (configuration management really helps here).
      - Subscribe to security mailing lists/RSS feeds/Twitter accounts.

This vulnerability is pretty bad, of course, but there have been _many_ like it before, and there will be many like it in years to come.

If nothing else, use this situation to prepare for the worst on your own site; how would you respond if your site was hacked, your database in an unknown state, and your codebase potentially backdoored?

<comment><USER4> Configuration management is an enormous pain for systems like Drupal that are essentially built ad-hoc, though. It's not something that's practically baked into something like Chef unless you're willing to spend a ton--a _ton_ \--of time baking your assumptions into code. And that (along with stuff like a test infrastructure) assume the capability of even doing it; Bob's Bait Shop does not have the technical staff necessary to act according to best practices but definitely needs a website. ("Use SquareSpace" is rarely an answer, though depending on the project it can be; anything remotely clever is going to need to go outside of the usual SaaS providers and that's why there are so many rickety Drupal sites out there. I used to write them, I know.)

Once again, software is harder than it needs to be. Gary Bernhardt has been going into this in depth on Twitter lately, and I agree with him more and more as I pay more attention to the shitshow around us.

<comment><USER5> > Configuration management is an enormous pain for systems like Drupal

As someone who worked on Drupal for a couple of year in the days of 5/6 this was my biggest problem.

I don't think things have improved much.

<comment><USER3> Things have improved greatly! With Drupal 7, there are two main solutions, the configuration management module, and features. With Drupal 8 (likely coming out within the next year, currently in beta) YAML-based exportable configuration management is baked into core and will be much more accessible for custom development and contributed modules.

<comment><USER4> Sure. Now they need to grapple with the fundamental differences between install-and-tweak and design-through-code to actually make this meaningful in a modern (Chef/Puppet/Docker) environment. I won't be holding my breath.

<comment><USER3> A modern, well-architected site build works wonderfully with the aforementioned tools. In fact, I have a demonstration VM (Vagrant + Ansible) that you can use to bootstrap a Drupal site with a given install profile/configuration in a few minutes using a Drush makefile: [https://github.com/geerlingguy/drupal-dev- vm](https://github.com/geerlingguy/drupal-dev-vm)

Sadly, most Drupal developers and development shops either don't know about or don't care to take the time to build sites in this manner (instead of schlepping databases and file dumps all over the place, export everything to code)... but if you do, team-based/large project Drupal development becomes so much more sane.

<comment><USER4> I'm aware of drush and its makefiles. In the overwhelming case, that's antithetical to how working on Drupal actually is, because of the amount of exploration and tweaking involved. It's not a sufficiently simple product such that you can just eyeball a makefile and go.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> One of the nice things about major releases of Wordpress is that it will auto patch minor releases. I believe this is a reasonable approach for most open source CMS even if it might break some functionality. You can also fairly easily add auto update for plugins and themes by modifying wp-config.php [1].

I suggest that themes/plugins with 100% compatibility ratings should be auto patched too. Auto patching themes can be problematic because updates override changes you've made to the theme files. So my other suggestion would be to automatically create a child theme for every installed theme so that devs can easily update the parent theme and keep changes made to it.

[1] [http://codex.wordpress.org/Configuring_Automatic_Background_...](http://codex.wordpress.org/Configuring_Automatic_Background_Updates)

<comment><USER7> Of course, giving your php webapp the permission to rewrite it's core files is a brilliant and secure idea!

<comment><USER8> Most operating systems do it. It's not an intractable problem.

<comment><USER9> Said operating systems typically require you to use an account that is inaccessible to almost all automated processes. This would not be the case, the two are not analogous.

<comment><USER10> Signed binary's can get you most of the way there. It's still a trade-off and for most users waiting to apply a security patch is a larger danger.

</comment></comment></comment></comment></comment><comment><USER11> Why does Drupal use string manipulation to generate SQL statements instead of bind parameters? It is 2014, hasn't this been best practice since at least the late 1990s? Wouldn't all security audits, including automated ones, pick this up?

And before someone makes a "joke" about PHP, they're using the PDO framework which supports bindParam(). Seems like woful incompetence in the Drupal codebase to me.

Exploit in detail: [https://www.sektioneins.de/en/advisories/advisory-012014-dru...](https://www.sektioneins.de/en/advisories/advisory-012014-drupal- pre-auth-sql-injection-vulnerability.html)

<comment><USER12> The query in question is using an IN clause which takes a tuple of values.

I don't think bindParam will allow you to bind an array into a tuple , the only way to pass the tuple is by forming it as a string and adding that to the query string.

<comment><USER13> It's awful how poorly IN-clauses are supported (in lots of places, not just PHP) considering how often they're used and how useful they are. I mean basic stuff like being able to use them securely or making programmers write their own checks to prevent SQL-errors on empty lists.

<comment><USER14> No, it doesn't. PHP can handle it fine and we've undergone multiple attacks and security audits [both daily automated ones and professionals by hand]. :/

The problem here was a mistake someone made, not a fundamental support problem with the language.

This is precisely why people mock PHP developers. :/ So many don't even understand how the language f'n works.

<comment><USER13> I never said it was a problem with the language. I said it was poorly supported in a lot of platforms _including_ PHP and I stand by that.

It has nothing to do with passing security audits or withstanding attacks, there's not a security flauw in the way PHP handles this because PHP or specifically the PDO framework relies on the user to implement this themself. There obviously can't be a security flaw in something which does not exist.

A quick Google search suggests it is not at all obvious to many how to do a parametrised query with an IN-clause using PDO. The highest ranking answer is this SO post: [http://stackoverflow.com/a/1586650](http://stackoverflow.com/a/1586650)

Having to iterate the array yourself adding the right amount of placeholders and binding individual values is secure but a lot of boilerplate. Escaping values in PHP and concatting them in the old fashioned way ought to be safe but everyone switched to parametrised queries for a reason: in practice it's often fucked up which leads to security vulnerabilities. The last one, the find_in_set trick, is a clever kludge but a kludge nonetheless.

People shouldn't need to roll their own way to do this because that's where unnecessary mistakes get made.

<comment><USER14> > A quick Google search suggests it is not at all obvious to many how to do a > parametrised query with an IN-clause using PDO.

Alot of programmers can't do FizzBuzz either. If you can't figure out how to iterate and count an array on your own...

I'm sorry but I have 0 sympathy.

<comment><USER13> Just as I have no sympathy for programmers forgetting to always call mysql_real_escape_string and setting their encodings right in the old MySQL driver, it's not difficult to get right, but tons of people didn't and it made the web a worse place for everyone.

Plus, they might be able to figure out how to iterate and count an array but they might also figure out how to use implode instead which is less code and programmers tend to be lazy. And suddenly they've opened their app up to SQL injection because they forgot or are unaware they now need to do escaping despite using prepared statements.

And since their app might contain _my_ data, I care about this and not just think "those idiots brought it upon themselves".

</comment></comment></comment></comment></comment></comment></comment><comment><USER15> And that was at the same time that everyone was worried about POODLE and the media was going crazy over it.

Somehow this vulnerability went over the radar.

What is interesting is that based on our own data, we started noticing attacks around 8 hours after it was disclosed and we shared some of the payloads being used here:

[http://blog.sucuri.net/2014/10/drupal-sql-injection- attempts...](http://blog.sucuri.net/2014/10/drupal-sql-injection-attempts-in- the-wild.html)

</comment><comment><USER16> I cannot think of how many charities this will affect. Almost without exception, every small or medium UK charity I know uses Drupal in some way for their work. These are usually customised for a specific project, and some of these will have donation facilities built-in.

The worrying thing as always is that few people upgrade these instances once they are launched and operational.

<comment><USER17> I'm wondering how many Australian government departments - who're all encouraged to use a government supported Drupal platform - are dealing with this properly: [https://agov.com.au/](https://agov.com.au/)

</comment></comment><comment><USER18> In the WordPress world, there are many "managed" WordPress hosting providers (including wordpress.com) which will apply WordPress core updates automatically.

In the Drupal world, there are some similar managed Drupal hosting providers (e.g. Drupal Gardens), but they're much less common. I wonder why.

<comment><USER3> There are a few, such as Pantheon[1], Acquia Cloud[2], Platform.sh[3]. All three of the above providers did add some level of protection immediately following the security announcement, and they (and some other providers) helped ensure sites were updated to 7.32 as soon as possible.

I have to link back to my earlier comment about the key takeaway here[4]—not just for Drupal sites, but for anyone who operates any site on any server. You can't afford to let your site sit unmaintained if you value the information within; and if you build sites for other people, you have to convey the importance of that to your customers... 'With great power comes great responsibility' and all that jazz.

Your site is either currently broken, or will be someday; it's not about making 100% secure code and servers (you strive for that, of course); it's about your response once something happens (e.g. a security patch is released).

[1] [https://www.getpantheon.com/](https://www.getpantheon.com/)

[2] [https://www.acquia.com/products-services/acquia- cloud](https://www.acquia.com/products-services/acquia-cloud)

[3] [https://platform.sh/](https://platform.sh/)

[4] [https://news.ycombinator.com/item?id=8529385](https://news.ycombinator.com/item?id=8529385)

</comment></comment><comment><USER19> I have started to use Drupal to create a small site for a non-profit. I disabled the site a couple of days after this vulnerability. Is there a way to determine if I have been compromised or since I have put about 30 minutes of work into it so far am I better off rebuilding from scratch?

<comment><USER20> Go into your Drupal updates and see if the core says 7.32 if it does you are good. If it doesn't just update it using drush and carry on.

<comment><USER21> No: that's not good advice. The OP said "I disabled the site a couple of days after this vulnerability", but we know that there were attacks in the wild within hours of disclosure. If it's only 30 minutes work you might as well start over.

</comment></comment></comment><comment><USER22> I've updated my site the minute I got the e-mail, though I am not sure if it was fast enough, because there is no way to know if there is any backdoors, besides installing a fresh version and checking the differences.

<comment><USER23> I've cleaned up a bunch of compromised servers, and I've never encountered—at least with exploited wordpress installs—an attacker sophisticated enough to change the timestamps on the files containing back doors, so, while I always just overwrote everything from a backup, finding all of the backdoored files right away would amount to something like:

        $ find /var/www/blah.com/htdocs/ -iname "*.php" -mtime -1 -print

</comment></comment><comment><USER24> Do any of the honeypots have examples of the backdoors in action?

<comment><USER15> We have a few samples of the SQL injection attempts here:

[http://blog.sucuri.net/2014/10/drupal-sql-injection- attempts...](http://blog.sucuri.net/2014/10/drupal-sql-injection-attempts-in- the-wild.html)

In there you can see the type of backdoors being added (generally fake users with admin-level privileges).

</comment></comment><comment><USER25> Perhaps read [http://cmsreport.com/articles/drupal-security-not- shocking-b...](http://cmsreport.com/articles/drupal-security-not-shocking-but- responsible-11234) as well.

<comment><USER26> I read that article last night and was wondering if someone here was going to point out how the 12m figure is made up.

Were there compromised sites? Sure, but I would be surprised if it were more than an order of magnitude less than what the bbc reported. That is still a lot of sites, but not a monumental cluster-fsck that the aftermath is being made out to be.

</comment></comment><comment><USER27> I have seen 0 evidence of any mass compromise.

In fact I've seen 0 evidence of even one site being compromised.

Any links with substance?

</comment><comment><USER28> Why is Drupal so popular?

<comment><USER29> I believe it is because at one point Drupal was a pretty solid foundation for a lot of project types and was greatly flexible.

Right now WordPress is way more popular though.

<comment><USER30> Wordpress and Drupal have similar features, but typically WP is thought to be more of a blogging platform while Drupal has a platform for not just blogging, but online community, e-commerce, etc.

<comment><USER31> Yeah not really that much of a distinction these days. People have built just about anything on WordPress. Community & ecommerce are both covered pretty solidly by the plugin ecosystem.

<comment><USER20> You can build a skyscraper using a hammer, but you probably shouldn't. It's the exact same argument with WordPress and Drupal. Drupal is vastly superior for most dynamic website tasks then WordPress is. Views + content types provide that.

<comment><USER32> Worked on both as a dev and decided to use WP for our business that sells mid- six figures annually through our shopping cart, which is just modified WooCommerce. I don't agree that Drupal is vastly superior at all; maintenance and sustainment is far worse with the Drupal project.

<comment><USER33> I've had the same experience and the opposite opinion.

<comment><USER32> I guess that's kind of the point. It all works just fine if you're a decent developer and know what to outsource and what to avoid. The platform/framework/language wars are a useless waste of time.</comment></comment></comment></comment></comment></comment></comment></comment>


Why Go gets criticized so much - <AUTHOR> http://npf.io/2014/10/why-everyone-hates-go/ <comment><USER2> I don't hate Go. I do strongly dislike posts with clickbaity titles that have an admission the title is wrong in the very first sentence.

The rest of the article is little better. It can be summed up in one line: _People who dislike Go are upset because they incorporated their favourite programming language into their identity, and the success of Go challenges their own choices_.

Although I don't hate Go, I also don't like Go much, but it's not because it challenges my identity. I am not a Haskell or Scala programmer. I've used a whole bunch of languages in recent years, none of which are especially clever. I dislike Go because I agree with the criticisms of it and I'm afraid I might end up having to maintain code written in it one day. That wouldn't be much fun.

Fortunately, so far I've been able to avoid maintaining PHP or COBOL so hopefully my luck will hold and I'll be able to dodge Go too.

<comment><USER3> "I dislike Go because I agree with the criticisms of it and I'm afraid I might end up having to maintain code written in it one day"

and:

"I also don't like Go much, but it's not because it challenges my identity"

You are EXACTLY who the article is talking about. One of Go's selling points is maintainability. Go's inherent bias towards maintainability challenges your identity.

<comment><USER2> Selling points are not facts, they're just arguments people who are trying to sell something like to make.

Go's users and designers make all sorts of claims about it. As it happens, I've evaluated them and find that I often disagree with them.

For instance, Go projects often don't specify the versions of their dependencies and choose to just clone the code into their own source tree instead - if you're lucky. If you aren't then the project simply depends on whatever is found in the dependencies git master branch. I find this to be poor practice from several perspectives, maintainability amongst them.

<comment><USER3> "Selling points are not facts"

except when talking about maintainability, you are not talking about facts. Show me the "fact" that Go is hard to maintain.

<comment><USER2> I never said code written in Go is hard to maintain. I said I don't want to maintain it, because I don't want to debug or write Go myself. You're arguing with a straw man.

<comment><USER3> the article is suggesting that when people say they don't want to debug or write in Go is because it challenges their previously formed beliefs in what they believe they need from a language. The fact that there may be another way or that projects are increasingly succeeding, challenges their identity.

</comment></comment></comment></comment></comment></comment><comment><USER4> Disclaimer: I work at El Goog.

I recently moved teams so that I could use Go exclusively. It's often been said that Go solves the problems Google developers have, and it's 110% true. It's much easier to get things working, and it's much easier to write things like Protocol Buffers. But the key for me is that Go isn't fun in the sense of "wow, I'm so smart that I managed to one line this thing", it's fun in the "wow I read this code and I can understand what's happening and hack on it to do something else."

I've worked on teams with monolithic Java code, and it's nigh-on impossible to understand what's happening and where you are in the logic flow. I don't have that problem in Go. I even delve into the standard libraries to see how the original Go devs did something, and I both understand it and think it looks like code I would have written too. I never get that feeling from any other language, where I feel like the standard libs are written by hyper-intelligent aliens.

When I exclaimed this internally, I got the sarky comment "It's almost as if the things Go leaves out makes it easier". And that's the core of it. Would I like generics? Sure; I do miss map(). But that's it.

Go is opinionated. People that don't like Go don't share the opinion. That's OK. It's taken me a long time to realize there is no One True Language that can do everything (it was soon after steveklabnik said something along the lines of "I don't know why you'd want to write a web app in Rust"). Once you get there, you won't hate Go anymore, nor indeed any other language.

Apart from C++. Screw that ;)

<comment><USER2> The reason Google's Java codebase is impossible to understand is not the language, it's mindless application of 'best practices' like dependency injection on an industrial scale. Guice is open source, anyone can go look at it. Just imagine a big complex server in which the "new" keyword wasn't used anywhere because everything was handled by the dependency injector. You get these things:

1\. Things that should be compile time errors turning into runtime errors.

2\. An IDE that can't navigate anywhere or usefully analyze the code because everything has interfaces between it.

3\. Things being mocked out in unit tests just because they can be, meaning lots of superfluous code and tests that pass when they should fail.

There's nothing about Java that mandates this style of programming. It's the result of years of programmers trying to be clever and finding ways to do things better without being sufficiently cynical about new trends and fashions. Given that Java is 20 years old, there has been plenty of time for people to find ways of making simple things complicated.

Go will suffer this phenomenon too because it's not to do with the languages themselves, it's to do with programmers who have safe corporate jobs finding ways to make themselves stand out from the pack by inventing and spreading 'best practices'. If anything, Go will suffer it worse, because the language itself is so limited, so there's more potential for bizarre hacks disguised as cleverness. Like that Go profiler that worked by rewriting source code to insert stuff between every single line of code.

<comment><USER5> Very recently I have begun to work as programmer, and having to work with PHP I looked at phpunit and unit testing (first time I do it semi-seriously). The guidelines for mocking that I have found are about dependency injection (phpunit has some helpers, but I think that's it).

What is the alternative to it?

<comment><USER2> The problem isn't with the idea of using mocks in testing. The problems start, as often the case, when people start religiously applying a design pattern and end up over using or abusing it.

The problematic thought process goes like this:

1\. Gee, my tests are really slow and flaky and hard to run because they talk directly to a database. I know! I'll swap out my real database connection with an in memory database.

2\. Things are better, but they're still slower than I'd like. Maybe I can just write a wrapper around my database code, make it implement an interface, and then provide a custom implementation just for my unit tests. Instead of having my class construct a database connection directly, I'll make it passed in as a parameter. Then they'll be nice and fast!

3\. Whoa, now my tests run instantly! How great. This mocking pattern is awesome. I want to mock everything! But hmm, I have a lot of objects and they often depend on other objects, like services of some sort. And I was told in school that God Objects and global variables are bad. So I can't use those because I want to be a good programmer and good programmers don't use those. This is making my code kind of a mess because now every time I want to construct an object it takes lots of parameters when before it didn't.

4\. <reads some article on hacker news> Hm, this dependency injection library sounds like what I want. Instead of constructing my objects directly, I ask an "injector" to do it for me. And it will then consult a table of bindings, and then find or construct the dependencies, and then build the object I want, recursively. All I have to do is [insert long complicated process here].

5\. Meanwhile, some other programmers look at what's going on. Interesting! They say. Those programmers know what they're doing and they're converting their whole codebase to use dependency injection. They claim it's a best practice to make testable code. We want our code to be testable too, we should do the same thing. Plus, we can call this refactoring and code maintenance and get paid for doing essentially brainless work, instead of having to take risks on developing new features or fixing bugs.

The story ends like this: pretty quickly this newfound "best practice" is spreading throughout your codebase like a fire, and now when you deploy your app, you get an error whilst the app is running. You then try to figure out what's causing the error but 25% of the time you try to follow a method call you end up looking at an interface instead of code, and when you try to figure out what implementation of that interface your app called you have to read and decipher tons of binding definitions.

The correct place to stop in the above story was at point two. And the reason is not just code readability. Once you start over-using mock objects, you can start to discover that your mock is implementing what you _think_ that service does, not what it _actually_ does, and you can end up with code that's actually buggier than code written with traditional fat test dependencies would have been. Fail.

<comment><USER5> Thank you, very detailed explanation.

</comment></comment></comment></comment></comment><comment><USER6> I think there is a better explanation for why people dislike Go. All programming languages currently used for the web have gigantic downsides. They're slow. They have terrible package management. They have poor standard libraries. They have no static typing. They have no visual debuggers. They have no good IDE support. They don't integrate well with frontend code. Some programming languages are more flawed than others, and no programming language fails on every front, but they're all pretty objectively terrible.

Then Google announces Go. A cross-platform systems programming languages for high quality web services. That sounds great! I can't wait to see what Google came up with.

So when people saw Go disappointment set in. It has some great properties, but the language is not expressive. So Go web frameworks (like Revel) generate Go code at compile time to get the dynamic parts working. Just like we did in the 70s to work around C's shortcomings. Want a container for a specific type? Code generation! It's so clumsy. The lack of exceptions makes writing correct code really tedious. A web service is not a device driver where every edge case has to be carefully considered. Bailing out with an exception is fine. Go disagrees.

I think the disappointment in what Go _could have been_ explains the vocal dislike. There are only a few companies in the world that can create a new programming language and ensure it becomes popular. Don't get me wrong. Go isn't a bad language. It's just not the language that will push the web forward, and Google was in a unique position to create a programming language that would.

<comment><USER7> Elixir is fast, has good package management, has a good standard library, exceptions are easy to read and debug, etc. Elixir doesn't have static typing, but it is functional, so it doesn't really matter as long as your initial assignment is correct. I can't really comment on IDE integration, since I never use anything but Vim.

Maybe the static typing and IDE support are enough to make Go awesome for some, but they don't really matter to me as much as concurrency, hot-plug code deployments, the actor model, and stability.

<comment><USER8> Elixir has optional typespecs that can be statically analyzed with a tool called dialyzer: [http://learnyousomeerlang.com/dialyzer](http://learnyousomeerlang.com/dialyzer)

</comment></comment></comment><comment><USER9> _People who dislike X are upset because they incorporated their favourite Y into their identity, and the success of X challenges their own choices._

True for football teams, political parties, games consoles, superhero franchises, religions, food choices, colour schemes, preferred spelling variants, ...

<comment><USER10> Sometimes, sure. But none of those are our jobs (except if you are a football player, politician, etc).

Computer programming languages are our jobs. It's okay to have preferences. I (a full time front-end webdev), think Python is probably the best language out there. But it doesn't define me, because that's just silly.

<comment><USER11> I agree that a language doesn't define you but what I wonder if a person's favorite language has some correlation to certain personality traits. I would be lieing if I didn't say I get more enjoyment from some languages where other people don't. Perl vs Python for example, pythons core values are to try and make it only one way to achieve something, whereas Perl tries to give you multiple ways to achieve something. I would guess that Perl may appeal more to artistic people and Python would appeal to more engineering type of people. This isn't a claim, more just something I think would be interesting to investigate.

<comment><USER12> Ok, I write every day in Rust and JavaScript (and not just jumping monkey in JS, but a lot of code). They are almost orthogonal languages. Will it fit your theory? :)

<comment><USER11> Are they both your favorite languages? Also there will always be exceptions.

<comment><USER12> Sorry for long reply. No, I prefer Rust, but right now it's impossible to use Rust on frontend. I also know there are people who love Python, Scala, Nim, D, Ocaml and I don't think they are wrong - it's just languages with different flavours and there are people with other preferences, so it's awesome to have alternatives. They are not better or worse than me if they use other languages, I'm more than sure about it. But when we talk about PHP, Go, Perl - yes, I think people could make better choice.

</comment></comment></comment></comment></comment></comment><comment><USER13> Poor post. One of the worst thing you can do in a debate is to psychoanalyze your opponents, ascribe their stances to some sort of personality trait, and ignore the object level. More mundanely, it's just ad hominem, "haters gonna hate".

What little object-level substance is to this post is laughable. Basically: since Go doesn't have modern language features but it's evidently popular and works, all the people who like modern features are upset since it turns out the modern features aren't needed, after all. Half irrelevant, half assertion out of blue air.

</comment><comment><USER14> It's so easy to dismiss legitimate criticism of _any_ issue as "hate" and "people are emotional" and "their identity is threatened".

At the end of the day, there _is_ legitimate criticism of Go, just as there _are_ legitimate advantages of using Go. As an additional fact, Go's core developers (and some users) have repetedly been dismissive of this criticism.

<comment><USER15> Yes, this article tries to make it sound like issues with Go are _solely_ due to identity, but that's not the case.

If I like to use soap and analgesics, is that part of my identity or just common sense application of technology?

<comment><USER16> There are studies that suggest using analgesics may negatively affect your judgement, so there's that.

</comment></comment></comment><comment><USER17> I haven't used go so far and much of its criticism might be overblown - but to be honest, that article made me immediately dislike the author.

The basic argument of the article is that "People who dislike Go are upset because they incorporated their favourite programming language into their identity, and the success of Go challenges their own choices".

That can be summed up as "People who dislike Go do so because they have been hurt psychologically".

Apart from being disrespectful to the community of other languages, this basically makes it impossible to give a counter-argument: Whatever kind of argument you bring, in the end you would simply add support to the author's theory because, in fact, you _have_ been trying to criticise the language, so you must be hurt. I don't see how that contributes to a fruitful discussion.

</comment><comment><USER18> I've been working in Go now for over a year and its honestly made my day-to- day life as a software engineer enjoyable. What gets me down about working in this industry is toiling away on products only to never see them released or being frustrated by absurd compile times, poorly tested components and abstract cathedral architectures. I worked on large C++ projects for around 7 years and i don't care for another flame war about curly brackets or which reimagining of a string is more ascetic. I also worked in Ocaml and some Erlang and yeah while great in principle they lacked the out-the-box tooling and standardisation of practice that I absolutely love about Go.

If someone creates a ML variant with a day-to-day experience as clarified as Go then I will gladly jump on board.

<comment><USER19> > "If someone creates a ML variant with a day-to-day experience as clarified > as Go then I will gladly jump on board."

What about F#?

[http://fsharp.org](http://fsharp.org)

As a side benefit, it's appears to be the top paying tech worldwide ...

[http://stackoverflow.com/research/developer- survey-2016#tech...](http://stackoverflow.com/research/developer- survey-2016#technology-top-paying-tech)

... as well as one of the most highly regarded languages by those who use it ...

[http://stackoverflow.com/research/developer- survey-2016#tech...](http://stackoverflow.com/research/developer- survey-2016#technology-most-loved-dreaded-and-wanted)

Even if you end up not liking it, I'd say it's worth a try.

<comment><USER18> I hadn't really given F# serious consideration, i know it's based off of OCaml but looking at it now i'm not particularly enamoured by the idea of managing threads, or doing async programming. Yes it does have an actor model but it looks limited to just a message box.

I think Microsoft Orleans is the most interesting functional language based on .Net [http://christophermeiklejohn.com/papers/2015/05/03/orleans.h...](http://christophermeiklejohn.com/papers/2015/05/03/orleans.html)

</comment></comment></comment><comment><USER20> ``Go is not meant to innovate programming theory. It's meant to innovate programming practice." – Samuel Tesla

[http://go-lang.cat-v.org/](http://go-lang.cat-v.org/)

And as usual, [http://9front.org/who/uriel/](http://9front.org/who/uriel/)

<comment><USER21> And as usual, [http://9front.org/who/uriel/](http://9front.org/who/uriel/)

Can you give some background?

<comment><USER20> spiritual leader of cat-v. good taster.

[http://uriel.cat-v.org/profile](http://uriel.cat-v.org/profile)

[http://plan9.bell-labs.com/wiki/plan9//uriel/index.html](http://plan9.bell- labs.com/wiki/plan9//uriel/index.html)

[https://en.wikipedia.org/wiki/User:Lost.goblin](https://en.wikipedia.org/wiki/User:Lost.goblin)

[https://www.reddit.com/user/uriel](https://www.reddit.com/user/uriel)

[https://news.ycombinator.com/item?id=4654125](https://news.ycombinator.com/item?id=4654125)

[https://www.facebook.com/archangel.uriel](https://www.facebook.com/archangel.uriel)

[http://www.mozdev.org/pipermail/eu/2003-July/000001.html](http://www.mozdev.org/pipermail/eu/2003-July/000001.html)

[https://www.reddit.com/r/catv](https://www.reddit.com/r/catv)

[http://www.advogato.org/person/uriel/](http://www.advogato.org/person/uriel/)

<comment><USER22> I've never known anyone who's favorite movie was Three colors: blue. Maybe I've found my spiritual doppelganger.

</comment></comment></comment></comment><comment><USER23> Go itself is a cool tool. Crosscompiling stuff, a great standard library, nice toolkits like gorilla and marshalling from/to structs/json/xml comes in handy for small everyday tasks and the primitive imperative style combined with easy-to-use goroutines and quite good performance ... together its a very great tool.

But I just can't stand the "the go way!" people who defend every fault the language itself has with this mantra. I use go sparingly for small scripts and little services, but would never _ever_ use it for big projects. Yes, for programming rookies in a team its very easy to get started to make valuable contributions, but I for myself just want a more adult language with rich expressiveness and actual static typing (interface{} vs. generics _sigh_ ). I understand Go as a "compiled PHP" with all the pros/cons one would associate, and accept that it aims to be a "C as it should be".

I do not hate Go in any way, I use it when appropriate.

(PS: I recently realized for myself that Rust will be the ultimate game changer, just give it a few months/years to grow mindshare organically. It's everything but a beginner language, though.)

<comment><USER24> What is an "adult language"?

</comment></comment><comment><USER25> > _Go is the only recent language that takes the aforementioned 40 years of > programming language research and tosses it out the window [ ... ] no > pattern matching, there's no borrowing, there's no pure functional > programming, there's no immutable variables, there's no option types, > there's no exceptions, there's no classes, there's no generics._

Some of this stuff is quite a bit older than 40 years. That only brings us back to 1976. Exceptions are around mid 1960's or so (PL/I, Lisp). Functional programming, Lisp again, 1958. (Java-like) OOP Classes? At least as far back as Simula-67. Simula-67 is where C++ gets "virtual" from.

</comment><comment><USER12> Article didn't convince me to think following arguments are wrong:

* Go is a language stuck in the 70's.

* Go ignores 40 years of programming language research.

I tried to use Go and was shocked how they can use it without package manager, without generics, with so brittle concept of channels, with executable comments in code and with so authoritative model of taking decisions about language evolution.

So I still think criticism of Go is valid and authors are still deaf to it.

<comment><USER26> What are executable comments?

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

</comment></comment></comment><comment><USER27> Couldn't this argument be made about all languages? People into dynamically typed languages would have statically typed languages for the same "don't touch my identity!" reason.

I personally don't "hate" go. To be honest, I have barely read 20 lines of go ever. But I do not like the idea of a language _specifically_ designed to limit my possibilities. I want to keep seeing "programming" as an art and a creative activity. Not as a factory-like process where there is only one way to do thing, all developers are inter-changeable, etc.

I _get_ why it's interesting for big corpos like Google. I just don't have to _like_ it :)

<comment><USER28> Nature works in the same way that it limits us to the fact that an effect can only be obtained by its commensurate cause. Anything is possible through that law as long as the appropriate cause can be formed.

<comment><USER29> What??

<comment><USER28> In math, answers are made by questions. In life, the quality of your answers is determined by the quality of your questions. So make a concrete question based in reality if you want a specific, real answer that you can confirm against proof.

<comment><USER29> Wow, you did all that nature analogy to say that the misunderstanding lies in the question and not in the answers?

<comment><USER28> That's incorrect. I was talking about your useless "What??"

</comment></comment></comment></comment></comment></comment><comment><USER30> It is a bit more nuanced. Go's dislike is a function of how vigorous the hype for it was vs. how much it actually delivers + a few other things. In general I see it as this function:

      def dislike(hype, results, community, usage): ...

Note the usage, if technology is not used, it won't be disliked. So dislike is a good sign sometimes. Community attitude matters, how are creators and developers treating others, how are well are docs presented, but also how mature and behaved are the advocates of the technology. That is something creators can't necessarily control.

Other hyped technology is/was node.js. I've heard people say crazy things about, it is the best technology, everyone should drop everything and join the winning team etc etc, async programming is the future and if you are still using threads you are stuck in the past and so on. So it was hyped quite a bit. And then it would have been ok, if it actually delivered, if packages weren't broken and half-assed, if servers under load actually didn't crash and so on. If people who used it where a bit more mature, if there wasn't drama at every step and so on. So it ended up disliked quite a bit.

PostgreSQL is hyped, people are saying this is the end and all database and so on. But it is not disliked, and the reason is it actually delivers results. It handles JSON blobs, it does other things right, it doesn't catch on fire, doesn't throw your data to /dev/null. So it not disliked.

As for Go, I haven't used Go, so I don't have much of a comment, but noticed an interesting nuance with how some technologies just happen to be disliked while others, even if hyped are ok.

</comment><comment><USER31> Seems most people don't understand that Golang is filling a niche that was not covered by anyone: fast, type safe, portable, memory-managed, simple.

Every language sucks at something. Switching from Ruby/Python to Golang feels like losing magic powers, yes, but some problems are better tackled without that magic and type safety comes as a plus.

Ruby/Python/C/Java/Scala/Erlang/Elixir/JS/Haskell/Lisp/Clojure/Rust all have different niches. We should really get over it.

</comment><comment><USER32> > Go is the only recent language that takes the aforementioned 40 years of > programming language research and tosses it out the window.

> The mere existence of Go says "your views on what makes a good programming > language are wrong".

As someone that dislikes Go, that's not it. It's because Go doesn't "own" the fact that it thrown language research out the window.

If Go advocates waved their imperative programming flag proudly I would just ignore the language completely.

</comment><comment><USER33> I'm one of these ML-derived ideologues this article disparages. I hate Go precisely because of the reasons outlined in this article. In my perspective, OCaml and occupies mainly the same niche that Go does (same balance between high-level and low-level, same skepticism of the object oriented orthodoxy, etc). OCaml is a much better language than Go for so many reasons that I will not go into here.

I'm also a Googler. Rather than inventing Go, if Google instead would have made OCaml its "Go", the world would be a better place than it is today. If the same tooling were built around OCaml, with some problems of its implementation fixed (multicore/parallelism, etc), there would be no complaints.

</comment><comment><USER34> I don't hate Go. I think the language is half what it could have been if designed more carefully. I don't doubt Go designers skills, I just think they just stopped half way for various reasons. Which makes Go a bit frustrating.

However, I hate the Go community, which doesn't hesitate to humiliate people trying to use language in unconventional ways (Martini...) and mock people that come with a valid criticism of the language (rigid type system, lack of dynamic linking, package management...).

So good language despite its flaws, horrible community. Now is it useful? It'd be like asking if Python is useful despite its flaws, yet Python has a great community unlike Go.

<comment><USER35> > humiliate people trying to use language in unconventional ways (Martini...)

The author of Martini, Jeremy Saenz, didn't feel humiliated:

[https://codegangsta.io/blog/2014/05/19/my-thoughts-on- martin...](https://codegangsta.io/blog/2014/05/19/my-thoughts-on-martini/)

> lack of dynamic linking

You can build and link shared libraries since Go 1.5:

[https://golang.org/doc/go1.5#link](https://golang.org/doc/go1.5#link)

> package management

The Go team is listening to the community about package management and is even willing to make changes:

[https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx- rw5t9MxJ...](https://docs.google.com/document/d/1Bz5-UB7g2uPBdOx- rw5t9MxJwkfpx90cqG9AFL0JAYo/edit)

I agree that Go is a conservative engineering project, which can explain some answers you read on Go mailing lists, but I think you mischaracterize the community.

I would add that I'm tired of people repeating that the Go core team is stubborn and doesn't listen to critics about the lack of generics, even though they have provided substantiated answer on this topic:

[https://news.ycombinator.com/item?id=9622417](https://news.ycombinator.com/item?id=9622417)

I'm wondering who is not listening to who?

<comment><USER34> > You can build and link shared libraries since Go 1.5:

That was not my point and you know it. you can't load shared library at runtime with Go. Like you can do in most languages out there.

> The author of Martini, Jeremy Saenz, didn't feel humiliated:

Yeah, he didn't feel humiliated so much he stopped writing about and programming in Go and interacting with the Go community all together because it's full of bullies.

> The Go team is listening to the community about package management and is > even willing to make changes:

The Go team is listening to nothing.

> I would add that I'm tired of people repeating that the Go core team is > stubborn and doesn't listen to critics about the lack of generics, even > though they have provided substantiated answer on this topic:

That doesn't make them more open to changes, anybody can do an AMA for PR.

Go community is blind to its own shortcomings and the language issues, you just proved my point yet again.

<comment><USER35> > you can't load shared library at runtime with Go.

I've read again the documentation, and you're right: it's not possible as of Go 1.6.

> Yeah, [Jeremy Saenz] didn't feel humiliated so much he stopped writing about > and programming in Go and interacting with the Go community all together

It's true that I don't see Jeremy posting stuff on its blog, Twitter, GitHub or elsewhere since a few months, about Go, or about anything else. But how can you assert it's related to the Go community being harsh?

> That doesn't make them more open to changes

I'm a bit of a programming language geek because I like beautiful theoretical things. This is why I keep an eye on OCaml, Haskell, Erlang, Elm, Clojure, etc. I sometime share the frustration with Go being verbose and naive. But I also needs to get things done, and want my code to be readable, understandable and maintainable in 10 years. Go is an interesting tradeoff, betting less on the advances of PL theory, and betting more on good engineering (the excellent work on the garbage collector being a good illustration).

Yes, I'd like some kind of shortcut for error handling (like the try! macro in rust), I'd like to be able to define custom generic functions and containers like the built-in ones, I'd like being able to declare non-nullable pointers, and I'd like to be able to create "share-nothing" goroutines with a "let it crash" philosophy. But I'm not willing to have these things if they break the language main benefits, especially its simplicity.

Maybe the Go team is not open to the changes we're discussing because they just don't align with their goals?

</comment></comment></comment></comment><comment><USER36> ML is also simple, pragmatic and from the '70s.

</comment><comment><USER37> "Go actively tries not to. There is no pattern matching, there's no borrowing, there's no pure functional programming, there's no immutable variables, there's no option types, there's no exceptions, there's no classes, there's no generics…. there's a lot Go doesn't have."

But one of the things it does have is users. It's almost like language popularity is strangely orthogonal to that laundry-list of ideas that the language theory community have invested a great deal of time in. I'd hypothesize that for someone who is excited about those ideas seeing use (and therefore somewhat justifying the time invested in pursuing and polishing them), a language like Go skyrocketing in popularity relative to its age ([http://www.infoworld.com/article/2981872/application- develop...](http://www.infoworld.com/article/2981872/application- development/java-reigns-go-language-spikes-in-popularity.html)) --- a language that looks at decades of PhD thesis work and says "tl;dr we have work to do over here" \--- must be downright infuriating.

</comment><comment><USER38> Good points, and also correct answer. Identity is hard to question. But when you try Go without prejudice, it's just fun (and productive) afterwards.

<comment><USER39> With golang, it is incredibly easy to get productive fast. It's like modernized, safe C with good standard library and trivial deployment. Those are pretty good selling points for getting stuff actually done.

Using Haskell for similar stuff is more tedious, even if a actual coding is more fun. I can see (and sometimes feel myself) the cognitive dissonance here.

<comment><USER2> I think the issue here is that you're comparing Go to C and Haskell.

C is decades old. Haskell was designed to help you write correct programs, rather than simplicity of use or productivity (or that's how I'd characterise it).

If you compared Go to C# or Java 8 or Scala, it'd probably look a lot worse. Deployment isn't so difficult that Go has any advantage in my experience: install a JVM on the server, ensure your build system is producing a fat jar, run it. Done.

With Capsule you can even make self-executable JARs that have a little shell script attached. Then you can run the program like any other UNIX app. chmod +x and ./execute it. Fully self contained, and can even update itself automatically.

<comment><USER40> I use C# at work, and I use Go at home. I really do like C#, but there is a reason I am using Go at home. I find I am more productive, and can develop better code faster with Go even though I am very new with Go.

<comment><USER2> I'm curious which parts of Go you find more productive than C#. Visual Studio slows you down?

</comment></comment></comment></comment></comment><comment><USER41> Hate is a very strong word. I don't see a point in "hating". Strong dislike, however, I can see, and I think my reasons for not liking Go are "Go ignores 40 years of programming language research", "Go is a language for blue collar (mediocre) developers" and "that other people were falling for it." I guess I have a similar dislike for every technology which is primarily meant to make the life of the developer, rather than push the end product's quality. I guess I have a dislike for this culture, that has been brewing in recent years, in general. But is that my "identity"? I don't know. All I do when I see these types of technologies, is roll my eyes, and move on; it means I have to be more picky in my job picky when looking for jobs. People are taking this way too seriously.

<comment><USER42> > I guess I have a similar dislike for every technology which is primarily > meant to make the life of the developer, rather than push the end product's > quality.

I would suggest that this is short-sighted. After all, the end product is created by the developer. Making the developer's life easier and end product quality are not contradictory goals.

</comment></comment><comment><USER43> The gap between the premises and conclusion of this argument seems broad to me...

Here's the summary: (leaving out some smaller arguments i.e. scala/rust vs Go language philosophy)

1\. Go challenges peoples identity.

2\. Challenging peoples identity makes them respond emotionaly not logicaly.

3\. Other people are being deceived into liking Go.

4\. People become more vocal as they attempt to sway the deceived from their erroneous path.

5\. (conclusion): Therefore, everyone criticizes Go so much.

Notice all the premises could be true, but they would not strongly imply the "so much" part i.e. "a lot". It would just mean some people would respond more vocally/emotionaly, certainly not everyone.

Anyway, I think there's still some missing premise(s) which would explain why there is "a lot of" criticism for Go, if that is the case - I have no idea as I'm not involved with Go at all.

Anyone care to fill those in for me?

<comment><USER3> One premise that I think the author is wrong about is #3 (people being deceived into liking Go). My experience is that a number of folks liking Go is due to past experiences and recognizing Go's completely different approach resolves at least some of those deficiencies or the problems those practices eventually led to.

But, I think the main point of the article is that Go's complete 180 on many things challenges the beliefs of some and hence their identity. We see it every time a discussion on Go pops up.

</comment></comment><comment><USER44> One of Go's selling points is always it's a pragmatic language. But after using it for awhile and implementing a few web apps and APIs in it. I've crossed it off my list for web app or API development. It's great at making standalone CLI tools, however.

I've since moved to using Elixir (erlang) for web app stuff (even some scripts) and I am much happier. I'm not in love with Elixirs syntax, but it's nice and includes meta programming. Elixir is a much more pragmatic language in my opinion. Once you use things like pattern matching (what could be more pragmatic) you can't go back. Raw performance is nothing to write home about but in my use cases elixir does a great job of hitting the sweet spot.

<comment><USER45> What's the performance of Elixir been like for you? We're looking into it because of the actor concuttrncy model which we think will be much more performant than our current ruby or clojure solutions.

<comment><USER44> It's great at IO. Period. Get a request, pipeline it, transform it, call out to a database, get some data back, fire off emails, talk to third party APIs....

All of those can be structured as processes. All of those can be independently fault tolerant. All of those can be inspected while they are running...in production. Seriously, for HA APIs or web apps it feels like a no brainer.

I just wouldn't us it for things that are CPU bound, like image processing for example. Try implementing something that is a bottleneck in your system in elixir and then throw some data at it and see how it performs.

Elixir + Phoenix is a real treat for web app devs.

<comment><USER45> Fantastic. Thanks for the response.

Our use case is talking to an API, doing a little bit of processing then writing to a database. It's all IO with barely any processing (just a few string substitutions to "normalize" the API responses).

</comment></comment></comment></comment><comment><USER46> Note: This is from Oct '14

</comment><comment><USER47> >Obviously, not everyone hates Go.

Well, at least the author saves me the time reading the rest of the article.

</comment><comment><USER48> Why would anyone think Go and Rust are bitter rivals? They're great tools for different things, with a broad margin of overlap.

<comment><USER49> Ultimately, they share a space - compiled, memory safe, and aimed at server- side development.

The way they differ is mostly in how they approach memory safety, which gives them different performance characteristics.

<comment><USER50> Rust isn't solely aimed at server space: E.g. we have servo, a browser engine.

<comment><USER22> "aimed at" and "used for" are never disjoint sets.

</comment></comment></comment></comment><comment><USER51> Go is one of the fastest runtimes out there, on nearly every platform, produces one clean static binary, fixes the concurrency/async problem that makes other lanaguages so terrible to code in, and has one huge company backing it. But then they miss the boat on simple stuff like generics.

Everyone hates Go because it solves the problems that most other languages suffer from. And if they (Google) make a few improvements it would probably the The Killer Language of Choice out there. But instead they suffer from the elite smugness and won't adapt.

<comment><USER52> Elite smugness? Hardly. Russ Cox has stated repeatedly that he's not against the implementation of generics in Go. Adding generics to a language is a very complex process and you have to be careful with the method you select because you're stuck with it forever. When they find a proper way to implement generics in Go then they'll do so, but they're not going to be pressured into creating a bad implementation.

[https://news.ycombinator.com/item?id=9622417](https://news.ycombinator.com/item?id=9622417)

<comment><USER35> And Erik Meijer wrote "Often I wonder if generics are actually worth their weight."

[https://twitter.com/headinthebox/status/705963164815327232](https://twitter.com/headinthebox/status/705963164815327232)

</comment></comment></comment><comment><USER53> I never used Go, but the main issues seemed to me that Google promised a C/C++ alternative and failed. Instead they made a Ruby/Node.js alternative.

I mean, telling C/C++ devs GC is the hit and parametric polymorphism suck? What did they expect...

Don't know if I'm right, but that's the gist I got from all the comments and news about Go.

</comment><comment><USER7> While I agree with the premise of the article, I don't think this is why I don't use Go. I don't hate Go, but I also don't think it brings anything new or elegant to the party. Languages like Rust and Elixir are exciting to me. Go just feels like a rerun of everything I've done before.

</comment><comment><USER54> I've been using Go for several months and love it.

"People shouldn't like things I dislike." \--waaaah

</comment><comment><USER55> I like Go. I've little project [https://github.com/beyondns/gotips](https://github.com/beyondns/gotips) The essence of Go in some little piece of code:

select { case <-time.After(queryTimeLimit): cancel() <-done // wait fmt.Printf("time out") case err :=<\- done: if err != nil { panic(err) }

}

// [https://github.com/beyondns/gotips/blob/master/tips32.md#17-...](https://github.com/beyondns/gotips/blob/master/tips32.md#17 ---use-context-api)

</comment><comment><USER56> I like functional languages but I strongly dislike their communities. Mainly because they treat everything like a nail... Golang on the other hand focuses on solving real problems not inventing things like metaisomorphic multipolymorphism etc...as always technology is fair! Go check out the "real life" projects in go and the adaptation they enjoy.

</comment><comment><USER57> I would say Go is a very unintuitive language. And not in an especially useful way.

Honestly, it comes across as a language designed by someone only incidentally aware of programming. This isn't an argument, this is the first impression.

At the risk of sounding stupid, and not really having a say in the argument for or against Go, I will say I tried to learn how to program Go on my own by trying to "guess" how to write a program. (A time waster, I had seen code but mainly glossed over it.) The program I tried to write was "Hello, World" and the way I tried to guess was using the Go website's sandbox.

The result: [https://play.golang.org/p/oc- cxnjJiI](https://play.golang.org/p/oc-cxnjJiI) (Best case: [https://play.golang.org/p/NJpwhLUPA_](https://play.golang.org/p/NJpwhLUPA_))

I'm sure the same thing would happen trying to learn C++ from a compiler's cryptic error messages, but C++ is not Go.

One thing I dislike about Go is the culture or lack-there-of surrounding it. Especially in the canonical Hello World example, which chooses to use Japanese/Chinese language in an unnecessary way. A little presumptuous. Especially since it's used in a one-off sort of way with no explanation.

I also think it's interesting that it's the survivor of the Go and Dart launches, when I never saw the purpose of Go when it was launched, compared to a special set of libraries for C.

</comment><comment><USER58> There are many good things in go, but some very weird stuff too.

Good things are multiple return values, lack of semicolon, optional braces for if and for, insanely fast compile time.

Bad things are forced curly brace style, complicated function declaration syntax, variable declaration which is too different from C in my opinion (type after the variable name).

I'd honestly prefer a language which is even closer to C or C++ in its syntax, with native maps, sets, queues, tuples, etc (pythonic stuff) without necessarily having templates or inheritance. I put a lot of value in syntactic sugar over overblown abstract stuff. Using plain struct with data oriented programming will be more than enough in most of the cases.

We are still waiting for C++ modules, which obviously might be lagging because C++ has an ISO standard and a lot of existing code which involves backward compatibility, but I think we need a new language that could be faster to compile, just like go is.

<comment><USER59> Types after variable names are here to stay though: they are in no way something new, and make a hundred times more sense when there is type inference: If writing down the type is optional, then it should go last.

Given that some level of type inference seems to be the future of strongly typed languages, I expect variable ahead of type to become more and more popular among language designers.

</comment></comment><comment><USER60> I did not like go until I tried it out on small pet project. Now I know how to enjoy it.

<comment><USER61> Same. I hated the idea of it before I started to use it _and_ started to use some of the tooling (like goimports, gocode, etc) with the go-plus package on Atom.

I think tooling really makes the difference in this case.

</comment></comment><comment><USER62> Attributing a person's preferences to identity is just ad hominem. That doesn't even imply it's wrong or mean-spirited; it just means that it's "preferable" to talk about a person's motives. Very Kahneman.

</comment><comment><USER63> If you replace "Go" with "JavaScript" the whole blog would also apply. Except there are way more JS lovers than Go lovers out there. And these two groups almost seem to never overlap.

</comment><comment><USER64> Offtopic: Can we please use "GoLang" for the language, so we can use "Go" unambiguously for the game?

Especially in titles, where there is little context.

<comment><USER65> I do find the name extremely unfortunate. It's impossible to search for, as "go" is an extremely common word (bad for search engines) and substring (bad for ctrl-F find). I tried searching for shared web hosts that provide Go support and just gave up. Kind of hilarious to see a first-party Google language be impossible to search for.

<comment><USER66> Using "golang" instead of "Go" nearly always gives the correct results in my experience.

<comment><USER65> That's true-ish, although it seems unlikely that most marketing departments who would be putting together a web server page would use "golang" over "Go".

Edit: This would be solved if the language was called "golang," which is precisely the original poster's point.

</comment></comment></comment></comment><comment><USER67> I have a strong feeling that there is a marketing campaign going to promote Go. It is promoted so hard that it became annoying. :(

</comment><comment><USER7> The main problem with Go, and this is a deal breaker for me, is that it forces opening curly braces onto the same line, instead of putting them on a line by themselves. This is clearly wrong, and flies in the face of curly good taste.

<comment><USER68> If it's clearly wrong, can you articulate a reason? There is at least one (mild) argument in favor of opening a curly brace on the same line: code takes up less vertical space, allowing a programmer to view more of their program on a given screen at once.

<comment><USER25> I use both styles in the same code:

      if (simple_condition) {

      } else {

      }

      for (long and stuffed;
           expressions;
           here)
      {
      }

      if ((complicated ||
           multi_line)
          && condition)
      {
      }

      void function()
      {
      }

In an if, all the "else if" and "else" clauses have to follow the same style. If any is braced, they all have to be.

By the way, is grandparent _kidding_ about Go enforcing this?

The only language I can think of which enforces curly brace placement is Awk. (And only in its pattern-action pairs):

       BEGIN {
         function()
         {
            if (foo)
            {
            }
         }
       }

       /regex/ {   # can't move this curly to next line
         action
       }

<comment><USER25> RATIONALE: why the two styles? Why

      if (simple_condition) {
        code;
      }

but:

      if ((complicated ||
           multi_line)
          && condition)
      {
        code;
      }

?

Simple: it's because in both cases, the "code" follows a previous line from whose first non-whitespace character it indents by the indentation level:

      if (...
      [INDENT]code

      {
      [INDENT]code

This is just wacky:

      while (blah
             blah
             blah) {
        code
      }

"code" isn't "indenting off of" anything. It is not related to the indentation of "blah" in any way, but appears to be "deindenting" from it!

So, rather than dogmatically doing one thing or another, it's better to consider all the alternatives, their relative advantages and disadvantages, and integrate them into an elegant whole.

</comment></comment></comment></comment><comment><USER69> why everyone loves clickbait

</comment><comment><USER70> I like Go but I hate my self for it.

<comment><USER71> Hating oneself is the highest form of love. -- Bill Maher on gay Republican politicians.

</comment></comment><comment><USER72> Very sorry to make an aesthetic complaint, and Raleway is a fine font for certain applications, but blogs that use low contrast fine raleway for the body text just kinda make me want to read something else.

</comment><comment><USER73> I would burn Go with fire and salt the earth because it's the bloody compiler will refuse to compile my valid code if I have unused imports or variables. It makes programming in Go a terrible experience and that's why I won't touch it.

<comment><USER74> You'll love goimports then.

[https://godoc.org/golang.org/x/tools/cmd/goimports](https://godoc.org/golang.org/x/tools/cmd/goimports)

Hook it to your editor's save command and never worry about imports again.

On the other hand, stop leaving unused variables around...

<comment><USER75> I hate debugging someone else's code that has unused variables in it as much as this guy seems to hate the go compiler.

<comment><USER73> Any normal compiler usually allows overriding these options. I normally write Haskell and it has it all: unused variables, unused imports, name shadowing, non-exhaustive pattern matching, everything. But these things are _warnings_ in my dev build and _errors_ in the release build. That's a sane way to do it.

<comment><USER74> Except some people wouldn't enable -Werror, and the quality of Go code would suffer on average.

Plus, now your compiler has _options_.

<comment><USER75> Yeah. I'm a fan of mandates when it comes to things like compiler options. Everyone should just suck it up and work with the same constraints. Warnings are just errors without balls.</comment></comment></comment></comment></comment></comment>


Canada accuses Facebook of breaking local privacy law,threatens to take to court - <AUTHOR> https://www.washingtonpost.com/technology/2019/04/25/canada-accuses-facebook-breaking-local-privacy-law-threatening-take-company-court/ <comment><USER2> Facebook always linked to great news!</comment>


What Is Ray Kurzweil Up to at Google? - <AUTHOR> https://www.wired.com/story/what-is-ray-kurzweil-up-to-at-google-writing-your-emails/ <comment><USER2> I feel like there's a small minority of people who enjoy elevating kurzweil into a quasi-religious genius figure because of his speculations on the singularity, but he's really just an above average software engineer who happened upon some ideas which captured the public imagination. Easy to forget he's human too sometimes.

<comment><USER3> And there's also a small minority of people like me who think that Kurzweil is mostly a crackpot who gave the technological singularity a bad name because of his baseless claims on exponential acceleration of paradigm shifts.

<comment><USER4> We're also some who regard the whole concept of "the Singularity" as being a quasi-religious crackpot theory no matter how you slice it.

Mind you, it's a powerful meme. Religious tradition abounds with references to some future event that will forcibly clean up the mess and propel us back to Eden. Some of the most prominent -isms of the 20th century subscribed to similar ideas. I guess our brains are a willing host to that kind of stuff.

On top of that, the technological version of the end-of-history cult has the added attraction of whispering into our ears that maybe we .. as programmers and masters of the machine .. may just be able place ourselves on the right side of history and become immortal citizens in future tech utopia. A pantheon of gods, for all practical purposes. That's a seducing idea.

<comment><USER5> Some aspect of the singularity is kind of undeniable. There's some information thing that's happening right now, and it's growing exponentially, and it just looks like it (for all intents and purposes) asymptotes vertical at some point, approximately 20 years from now.

 _What_ actually happens at that point, I think that's up for debate. Are we going to become immortal? Probably not. Are we going to have AIs who are better at everything than expert humans? Probably not.

But I think it's strange if someone denies that it's even happening. Just look at the amount of information that's flowing around, by any metric. It's exponential, and you can fit the curve and plot where it goes vertical. If we were talking about physical processes, I'd understand the skepticism. Maybe that exponential levels off. But I don't see why there is any physical limitation on how much information can flow. Or at least: if we hit that wall, things will be VERY different.

<comment><USER6> A minor point- but exponential curves never actually asymptote or go vertical, they just keep getting closer to vertical forever. But with a big enough level of growth it might as well be vertical.

<comment><USER4> True. Making any exponential curve look like a hockey stick is mostly a matter of picking the scale. I could probably create a chart showing how the population of the earth went vertical during the reign of the Caesars. Of course, a logarithmic plot solves that issue.

</comment></comment></comment></comment></comment></comment><comment><USER7> This... looks surprisingly unambitious for somebody like Kurzweil, who thinks a computer will pass the Turing test in 12 years and we'll all be immortal gods in 30. I'd have expected he'd be doing "moonshot" stuff.

<comment><USER3> My theory is that Kurzweil was behind the acquisition by Google of several robotics company but it turned out disastrous (the guy has a lot of grandiose claims but apparently pretty average skills) and then they were sold back.

If you want to follow singularity candidates, rather put your eyes on Softbank, who has bought Boston Dynamics, Schaft, ARM, and shares of Nvidia.

<comment><USER7> I don't know he's credited with inventing the flatbed scanner and also what were probably the best music synthesizers of his time (which are still called Kurzweil!). That seems pretty impressive. But this was all a long time ago, it could be he's been too many years in the writing/talks circuit and has become too rusty for practical engineering.

</comment></comment></comment><comment><USER8> I'm certain he is up to at least two things: 1) getting paid 2) lending the credibility of his name to whatever google is up to

<comment><USER9> Funny, I always interpreted it as Google lending the credibility of their name to whatever Kurzweil says. I guess it's a win-win for both of them.

</comment></comment><comment><USER10> Seems like such a profound genius could do something more productive than save me the 8 seconds it takes me to tap out, "Awesome. Thanks."

<comment><USER11> disclaimer: i work at google, though not in anything remotely related to this

despite all the naysaying in the thread, this seems like a really good use of AI to me, especially if it can grow to learn your preferred/habitual speech patterns. if you type "awesome. thanks." a lot in reply to emails, why should a tool not make that a one-click operation for you? canned email replies does sound like a very unambitious/unexciting arena to develop this technology in, but the basic idea of AI working _with_ you as a sort of surgeon's assistant who puts the right instrument in your hands just when you need it excites me just as much as the sexier "100% autonomous everything" applications.

<comment><USER12> Any reply which is brief and generic enough for an AI to write it for me can be written in a short enough time that finding the mouse and clicking the appropriate button won't save me any appreciable effort.

<comment><USER12> Actually take that as a challenge -- I would be interested to be proven wrong.

<comment><USER13> Try it on a mobile device then - the most popular computing platform type on the planet.

Then try to do it while getting off of a subway after work.

<comment><USER14> Additionally, try to find an average person and do it again. Most people are really, really bad at typing.

</comment></comment></comment></comment></comment></comment><comment><USER15> Oh, I thought he was doing more interesting and relevant stuff.

<comment><USER16> "The best minds of my generation are thinking about how to make people click ads," Cloudera founder Hammerbacher once infamously said. "That sucks."

<comment><USER17> I think relevant ads is super-important problem for humanity: connecting completely disconnected buyers and sellers of everything on planet scale. I bet Cloudera has paid clicks budget itself.

<comment><USER18> Ads are about creating buyers, not connecting them to sellers.

</comment></comment></comment></comment><comment><USER19> At first I was faintly disappointed. Then it got worse:

> _He likes the idea of having AI pitch in anytime you're typing, a bit like > an omnipresent, smarter version of Google's search autocomplete. "You could > have similar technology to help you compose documents or emails by giving > you suggestions of how to complete your sentence," Kurzweil says._

So he's actually helping Google get creepier and more omnipresent. :-/

<comment><USER20> Autocomplete while I'm searching has become quite distracting when I want to search for something with more than 5 words. You have to search with your eyes closed. I could never imagine this "intelligence" (it's literally just pattern matching) popping up in my inbox.

<comment><USER21> > I could never imagine this "intelligence" (it's literally just pattern > matching) ...

Arguably (and this is exactly what Kurzweill says in his books) intelligence is entirely "just" pattern matching on a large scale.

</comment></comment></comment><comment><USER22> I understand the criticism against Ray Kurzweil, I'm not convinced one way or the other, but I don't think a lot of people know that he has written in-depth about anti-aging and by looking at his photos - he definitely doesn't look his age, and in fact seems to have gotten younger in recent years. So, at least it seems like his anti-aging research may be right.

<comment><USER23> Toupee does help with that.

Although, he looks much older than 15 years ago.

</comment></comment><comment><USER24> So, a Google Synthesizer in the works? A self-composing one with a singularity LFO button?

</comment><comment><USER25> Three words: rest and vest.</comment>


Google's attempts to undermine adblockers - <AUTHOR> https://www.magiclasso.co/insights/google-undermines-adblock/ <comment><USER2> > Adblocking could reduce this revenue to zero.

Yeah, sure. Like that's about to happen.

This is an advertorial, btw, they're trying to sell their product:

> Want to try a privacy focused adblocker for your iPhone, iPad or Mac? > Download Magic Lasso Adblock for free and experience a cleaner, faster web.

</comment><comment><USER3> PiHole. The easiest and most rewarding project I've ever put together.

Super easy to setup and incredibly effective.

Don't forget to donate a couple of bucks to the developers.

<comment><USER4> I'm interested, but ultimately always decide against it because I don't know what happens if sites stop working because of a missing advertising library.

Some sites don't load, and it's easy in uBlock to whitelist the site temporarily. Obviously the ad library writers should write their scripts in such a way that if the script doesn't load it doesn't bring down the site, but of course this goes against their revenue stream...

Also sometimes you have false positives... In NodeBB if you create a new topic that contains the word "advertising", you won't be able to access it. Oops!

How can a PiHole be shut down or allow access to a site? It's trivially easy on Firefox...

 __Edit __: it seems there 's a fully featured web interface, so I'll definitely be taking a closer look at this. Thanks for the recommendation!

<comment><USER5> >How can a PiHole be shut down or allow access to a site? It's trivially easy on Firefox...

>Edit: it seems there's a fully featured web interface, so I'll definitely be taking a closer look at this. Thanks for the recommendation!

Correct! When logged into the interface, you can easily disable blocking with one click, for a set amount of time. FWIW, I sourced multiple public blacklists/whitelists, and did as much research as I could ahead of time to research devices I routinely have on my network vs any issues PiHole might have with them, and was sure to add any necessary sites to the whitelist when I first set them up. It was really easy for me and I've had zero issues since (YMMV).</comment></comment></comment>