Google can and will permanently ban your Android app if Google thinks you’ve clicked on your own ads

If you’re running Google AdMob/AdSense ads and you have an Android app that you care about, take down your Google ads immediately and switch to another ad vendor.

If Google decides to ban you from AdMob/AdSense, they may also ban your Android app from the Google Play Store. This happened to DroidScript and it can happen to you.

Android death ray. Don’t let this be you. source: pixabay

Anyone can be banned from Google ads at any time

Google AdSense is the product where Google pays you for running banner ads on your website. AdMob is the product where they pay you for running ads in mobile apps.

Under AdSense/AdMob, Google pays you when users click on your ads; if…


Also: Seven reasons why you might not want/need remote UI rendering

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

When I first read the definition of micro-frontends, I didn’t “get it.” Specifically, when I read Cam Jackson’s article on martinfowler.com and Michael Geers’ mini-site micro-frontends.org, I was still asking myself questions like:

  • Are we already doing micro-frontends? We’ve been using UI component frameworks for years. Are micro-frontends just UI components?
  • If not, how would our code be different if we were using micro-frontends?
  • But, seriously, what are micro-frontends?!

After more thinking and research, I’ve now figured out why I was struggling: both articles go to some lengths to avoid…


Interop between them is possible, but it’s a hassle

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

In Node 14, there are now two kinds of scripts: there are old-style CommonJS (CJS) scripts and new-style ESM scripts (aka MJS). CJS scripts use require() and module.exports; ESM scripts use import and export.

ESM and CJS are completely different animals. Superficially, ESM looks very similar to CJS, but their implementations couldn’t be more different. One of them is a honey bee, and the other is a murder hornet.

A hornet and a honey bee. One of these is like ESM and the other is like CJS, but I can never remember which one is which. Credit: wikimedia, wikimedia

Calling CJS from ESM and vice versa is possible, but it’s a hassle.

Here are the rules, which I’ll explain in…


A bluffing word game. It’s Liar’s Dice, played with Boggle letter dice.

This game works best with three to five players. Here are the rules.

At the start of the game, randomly deal Boggle letter dice to each player. (The standard Boggle set has sixteen dice; if you don’t have four players, discard a die so that each player has the same number.)

Starting Bid

At the start of each round, all players roll their dice secretly, looking only at their own letters. The first player then bids a word.

When you bid a word, you claim that it’s possible to spell that word using all of the letters on the table, including the…


How and when to cheat on semantic HTML accessibility guidelines

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

I’ve been spending the last month or so updating some legacy HTML to support screen readers. Screen-reader software can read a web page aloud, allowing visually impaired users to understand and interact with the page.

The problem is, sometimes the developers used <span> or <div> elements where they could have used <button> elements. Keyboard users can focus <button> elements with the Tab key, and click on them with the Enter key or Space bar; screen readers use the same rules.

By default, none of those keyboard shortcuts work for <span>


Google’s new “Speed Update” search ranking factor is too little, too late

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

Google uses hundreds of different factors (“signals”) to decide which web pages to show at the top of Google Search results. In January, Google announced that in July 2018, page speed will be a ranking signal for mobile searches.

The “Speed Update,” as we’re calling it, will only affect pages that deliver the slowest experience to users and will only affect a small percentage of queries. It applies the same standard to all pages, regardless of the technology used to build the page. …


Technical explanations allow candidates to demonstrate their technical skills and social skills at the same time

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

Discuss on Hacker News
Discuss on Reddit

Interviewing engineers is a hard problem. Every interviewing technique has vocal detractors who say, “I would never work at a company that used that interviewing technique.” Whiteboarding, take-home assignments, pair programming, reviewing open-source contributions, contract-to-hire … you name it, somebody hates it.

But almost everybody I talk to seems to like the idea of asking candidates to explain something, at least as one part of the interview process.

And it seems to me that very few people know that this is a widely…


IFrames cause all of AMP’s problems, but they provide unbeatable performance. Fixing this is hard, but possible.

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

Discuss on Hacker News
Discuss on Reddit

A lot of people hate AMP, and now that Google has announced AMP for email, the AMP haters are out in force again, and understandably so.

I’m aware of roughly two categories of complaints about AMP on the web:

1) The URL of AMP pages is wrong. It points to google.com instead of the original web site. This is bad, because it puts Google in control of your website. …


I’m afraid you’ll have to learn the entire Service Worker API along the way.

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

In a previous article, I explained how and why Service Workers break the browser’s Refresh button by default.

But nobody likes a whiner! In this article, I’ll document how to fix the Refresh button.

Getting this right requires an intimate understanding of the Service Worker lifecycle, the Caches API, the Registration API, and the Clients API. By the time you’ve plowed through this article, you’ll know pretty much everything you need to know about the Service Worker API.

Discuss on Hacker News
Discuss on Reddit

Step One: Read my previous article

My previous article on refreshing…


Service Workers are like apps. You can’t safely upgrade an app while it’s still running.

Dan Fabulich is a Principal Engineer at Redfin. (We’re hiring!)

tl;dr:

  • By default, users have to close all tabs to a site in order to update a Service Worker. The Refresh button is not enough.
  • If you make a mistake here, users will see an outdated version of your site even after refreshing. Users abandon sites that never update.
  • Service Workers break the Refresh button because they behave like “apps,” refusing to update while the app is still running, in order to maintain code consistency and client-side data consistency.
  • We can write code to notify users when a new version…

Dan Fabulich

Dan Fabulich is a Principal Engineer at Redfin. We’re hiring! https://www.redfin.com/jobs

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store