Skip to content

Instantly share code, notes, and snippets.

Kent Brewster kentbrew

Block or report user

Report or block kentbrew

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
kentbrew /
Last active Aug 30, 2019
Sorting a JSON Object by Key Name

Sorting a JSON Object by Key Name

While performing eyeball-based QA for an API update I needed a fast way to reformat output so that all keys would be in the same order. Here's what I came up with:

sortByKeys = input => {
  // default: return anything whose typeof is NOT "object"
  let result = input;
  // do we have an object? look inside
  if (input && typeof input === "object") {
kentbrew /
Created Mar 4, 2019
Hiding Ads from All Facebook Advertisers who have Added You From a Contact List

Hiding Ads from All Facebook Advertisers who have Added You From a Contact List

Here's a scary page:

Open up the Advertisers section and check out that first section: advertisers who use a contact list added to Facebook. Unlike the other tabs in this section, these ads have nothing to do with your behavior on Facebook or elsewhere on the Internet. All these advertisers got your name the old-fashioned way: by trading something of value for a list containing your contact information.

Per Facebook's vague-but-cheerful explainer, this is "typically" your e-mail address or phone number, but there's really no way to know for sure.

kentbrew /
Last active May 10, 2019
Finding Twitter User IDs

Finding Twitter User IDs

User accounts on Twitter are commonly identified by screen name, which may be changed by operators when they take over an account, or have been sitting on an old account for a long time and want to transition it into malicious use.

User IDs, however, are permanent. There are several services out there that will try to find them for you but it seems like a bad idea to me, since you're alerting them to the fact that there's something interesting about this account. There's also plenty of bad advice that uses many long-since-abandoned Twitter API endpoints.

As of this writing (2018-02-18) you can view source and search for /profile_banners/, which will show something like this:

.enhanced-mini-profile .mini-profile .profile-summary {
kentbrew / spinny_button.svg
Last active Jan 31, 2018
Recreating the Pinterest Spinny Button
View spinny_button.svg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
kentbrew /
Last active Sep 23, 2019
How to change the Chrome default language on OSX

How to Change your Chrome Default Language

Open up a Terminal window. (If you have never seen Terminal before, go to Spotlight Search and type "Terminal.")

In the Terminal box, try this:

defaults read AppleLanguages

If you see this:

kentbrew / content.js
Last active Jan 5, 2018
Alt-Titler: fill blank image TITLE attributes with what's in their ALT attribute, if found.
View content.js
// Fill blank image TITLE attributes with what's in their ALT attribute, if found.
((w, d) => {
let $ = {
// w = window
w: w,
// d = document
d: d,
f: {
// return an event's target element
kentbrew / background.js
Last active Nov 30, 2017
Tracker Jacker
View background.js
const BLOCK_ME = "://";
function(r) {
return {
cancel: r.url.indexOf(BLOCK_ME) != -1
{urls: ["<all_urls>"]},
kentbrew /
Last active Oct 24, 2017
Using DOMParser to clean HTML input

Old School:

  var clean = function (input) {
    var testMe = input, dupeTest = '';
    while (testMe !== dupeTest) {
      testMe = new DOMParser().parseFromString(testMe, "text/html").documentElement.textContent;
      dupeTest = testMe;
    testMe = testMe.replace(/</g, '&lt;');
    return testMe;
kentbrew /
Created Jul 11, 2017
Some Notes On Zetterberg's Static Search Widget
kentbrew / wilensky.js
Created Jul 9, 2017
Imagine a room full of 100 people with 100 dollars each. With every tick of the clock, every person with money gives a dollar to one randomly chosen other person. After some time progresses, how will the money be distributed?
View wilensky.js
// paste me into console to explore the counterintuitive problem found here:
// setup: tweak as needed
var rounds = 10, turns = 1000, max = 100, start = 100;
// play one round
var round = function () {
// setup
You can’t perform that action at this time.