Google Wins Europe “Right To Be Forgotten” Case

A notable article from the BBC: Google wins landmark right to be forgotten case.

Excerpted from the BBC:

In 2015, CNIL [French privacy regulator] ordered the firm to globally remove search result listings to pages containing damaging or false information about a person. But it [Google] resisted censoring search results for people in other parts of the world. And the firm challenged a 100,000 euro fine that CNIL had tried to impose.

In short, this ruling means that any European right to be forgotten requests are limited to search results from EU users; US and other countries’ search results won’t be affected.

SparkToro: Less than Half of Google Searches Now Result in a Click

A friend shared this interesting article with me – here’s the bottom line summary:

In June of 2019, for the first time, a majority of all browser-based searches on Google.com resulted in zero-clicks

https://sparktoro.com/blog/less-than-half-of-google-searches-now-result-in-a-click/

Essentially: in more than half of Google searches, the user is not clicking on a result link. This can be because the user has their question answered via Google’s featured snippet section (example below), or the web browser launched a separate app (for example, a mobile user clicking a link which opens up the Android/iOS Google Maps app), or simply because the user got frustrated and stopped searching.

An example of a featured snippet from a Google search: a box just underneath the search box with information. Note the About Featured Snippets link on the bottom.
An example of a featured snippet on a Google search. Note the About Featured Snippets link on the bottom of the image.

This article is just another reason why good Google marketers need to target high value keywords to get users to click through.

The article expands on this, it’s definitely worth a read: https://sparktoro.com/blog/less-than-half-of-google-searches-now-result-in-a-click/ .

Tumblr Sale

News came out recently that Verizon’s Oath unit (which is partly made up of Yahoo’s web assets) sold Tumblr to Automattic (they develop WordPress and run WordPress.com) for $3 million.

Obviously, this is a big drop from Yahoo’s original $1+ billion purchase, but there’s still quite a lot of value to be salvaged from Tumblr. This HN discussion comments that Tumblr is still receiving 2.5+ billion page views per month, which doesn’t even include their mobile views. I see a lot of articles moaning about Tumblr’s problems, but it is still a powerful brand and I’m quite surprised another company didn’t buy it up – $3 million is a firesale price.

Of all the articles discussing Tumblr’s sale, I like this one the best: a post from one of VCs who originally invested in Tumblr. Regardless of what happens to Tumblr, I think it will be remembered as one of the first places to easily and quickly share thoughts, a place which made it easy to create communities and fandoms, and a surprisingly upbeat and positive place compared to other social media sites.

Using The Good Parts Of AWS

There was a fascinating Twitter thread on how to use the “good” parts of AWS, from an ex-AWS engineer:
https://twitter.com/dvassallo/status/1154516910265884672 . Click to expand the below image.

Using the good parts of AWS, from a former AWS engineer.

Bottom line: He recommends building your services to use AWS EC2, DynamoDB, etc but avoiding abstractions such as Lambda and API Gateway. There’s an interesting discussion on this thread on HN:
https://news.ycombinator.com/item?id=20545561 .

Cutting More Space Off The Twenty Seventeen WordPress Theme

What drives me crazy about the WordPress Twenty Seventeen theme is that it’s almost the perfect starting theme, but it wastes so much screen real estate – especially in the header.

Here’s CSS to shave off space and makes the header a lot less “aggressive” looking:

div.custom-header {
	text-transform: lowercase;
}

div.site-branding {
	padding-top: 1em;
	padding-bottom: 1em;
	padding-left: 2em;
	padding-right: 2em;
}

h1.site-title {
	text-transform: lowercase;
}

Google Maps Routes Cars Into Mud…

Quite a few news outlets are reporting a mistake in Google Maps that led to cars being stuck on a muddy road.

Apparently, the highway to Denver International Airport was backed up so Google Maps suggested a detour route – unfortunately this detour route was a dirt road that became mud after earlier rainstorms. A number of cars were stuck in the deep mud and had to be pulled out. See the video at this CNN article:
https://www.cnn.com/2019/06/26/us/google-maps-detour-colorado-trnd/index.html .

This Time article is a nice summary:
https://time.com/5615813/google-maps-mud-detour/ .

Screenshot of Time article, linked above.

It’s fun to blame Maps for incidents such as this, but it underlines how important it is to review maps and confirm where the route takes you. It would have been easy to pop open Google Maps Satellite View and quickly thumb through the overhead view to see where the detour took you – if you see a poorly maintained road, or any other warning signs, it’s definitely a good idea to avoid.

Gmail API Lockdown

I wanted to highlight this ArsTechnica article, Gmail’s API lockdown will kill some third-party app access, starting July 15, for several reasons.

The Security Audit Rule

Last October, Google announced that all applications accessing and storing Gmail data must pass a security audit from an outside firm – Google estimated that such an audit would cost $15,000 – $75,000 or more. Many useful Gmail plugins and integrations are shutting down due to this requirement, even open source applications where the code is available for all to review.

Historically, Google has been slowly repositioning Gmail from an email inbox to an app platform itself: there are Chrome addons and Gmail plugins to turn Gmail into a CRM, a todo list, a kanban board, and so many other integrations – which is why I’m surprised to see Google seemingly reduce the usefulness of Gmail by adding these requirements and losing these plugins.

We’ll see how this goes, but I would bet on Google slowly loosening up restrictions over time, or possibly offering subsidies for the security audits of popular Gmail plugins.

Google Reader Strikes Again

A particularly cheeky ArsTechnica commenter wrote the following insightful comment:

ArsTechnica commenter criticizes Google for shutting down other Gmail integrations.

And quite a lot of commenters seem to agree:

An ArsTechnica commenter agrees with the previous poster, criticizing Google for shutting down Gmail integrations.

WordPress Twenty Seventeen Theme Page Spacing

I think the WordPress Twenty Seventeen theme is pretty close to the ideal starter WP template – it’s simple yet looks very nice, especially if there’s a nice header image.

One of the major annoyances with using the theme is that there’s so much empty space in a default page. For example, here’s how my /about page looked like with just the default CSS (note how small the “ABOUT” text is, and it’s a H1 heading!):

Picture of unstyled

I added the following custom CSS to help reduce the space and slightly increase the size of the H1 text:

h1.entry-title {
	font-size: large !important;
	font-weight: bolder !important;
}

header.entry-header {
	padding: 0 !important;
	margin: 0 !important;
}

div#content.site-content {
	padding-top: 1em !important;
}

Firestore Errors

Most of my apps are using Google’s Datastore, but I decided to try out the new Firestore on a test application. I’m receiving quite a few of the below errors:

io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference cleanQueue: *~*~*~ Channel ManagedChannelImpl{logId=346, target=firestore.googleapis.com:443} was not shutdown properly!!! ~*~*~* (ManagedChannelOrphanWrapper.java:151)
    Make sure to call shutdown()/shutdownNow() and wait until awaitTermination() returns true.
java.lang.RuntimeException: ManagedChannel allocation site
	at io.grpc.internal.ManagedChannelOrphanWrapper$ManagedChannelReference.<init>(ManagedChannelOrphanWrapper.java:94)
	at io.grpc.internal.ManagedChannelOrphanWrapper.<init>(ManagedChannelOrphanWrapper.java:52)
	at io.grpc.internal.ManagedChannelOrphanWrapper.<init>(ManagedChannelOrphanWrapper.java:43)
	at io.grpc.internal.AbstractManagedChannelImplBuilder.build(AbstractManagedChannelImplBuilder.java:514)
	at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createSingleChannel(InstantiatingGrpcChannelProvider.java:223)
	at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.createChannel(InstantiatingGrpcChannelProvider.java:164)
	at com.google.api.gax.grpc.InstantiatingGrpcChannelProvider.getTransportChannel(InstantiatingGrpcChannelProvider.java:156)
	at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:157)
	at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:122)
	at com.google.cloud.firestore.spi.v1.GrpcFirestoreRpc.<init>(GrpcFirestoreRpc.java:122)
	at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:80)
	at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreRpcFactory.create(FirestoreOptions.java:72)
	at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:510)
	at com.google.cloud.firestore.FirestoreOptions.getFirestoreRpc(FirestoreOptions.java:315)
	at com.google.cloud.firestore.FirestoreImpl.<init>(FirestoreImpl.java:77)
	at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:63)
	at com.google.cloud.firestore.FirestoreOptions$DefaultFirestoreFactory.create(FirestoreOptions.java:56)
	at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:498)
Screenshot of Firestore exception - failure to shut down in code.

These errors stopped when I called close() on the com.google.cloud.firestore.Firestore object after I was done with storage operations:

Javadoc for close() on com.google.cloud.firestore.Firestore.

I can’t help but feel a little disappointed at this new requirement to close the Firestore connection. It feels like a regression from the Datastore – there was no need to close the datastore object after usage.

WordPress Annoyances

I haven’t been posting as much as I want to lately – I’ve been fiddling with some WordPress issues and a lot of work from my day job.

Here’s some minor thoughts that don’t deserve a post by themselves:

Routing

{
  "code":"rest_no_route",
  "message":"No route was found matching the URL and request method",
  "data": {"status":404}
}

I wrote a custom WP plugin which accepts requests from an App Engine application and returns some custom data. Unfortunately, my app on GAE was returning the above error whenever it tried to make a HTTP request to the WordPress app.

Long story short, the register_rest_route() on my plugin only declared a GET endpoint, and my GAE application was trying to use POST. Make sure you’re using the same HTTP type if you get this error.

WPEngine Firewalls

By default, WPEngine has a firewall that blocks GAE-originated requests from hitting WP plugins – fortunately, if you need GAE to WPEngine-hosted WP communications, you can email WPEngine through their contact form to remove the firewall on a per-blog basis.