Paul Roub

blah blah blahg

People: Gotta Love (Some of) ‘Em

Yesterday, I had the minor misfortune of witnessing a serious accident from far too close. A pickup, traveling very fast on a crowded highway, cut off the car in the adjacent lane, started rolling to one side, swerved back the other way, and flipped; he rolled twice before stopping sideways 20 feet from the road. I was the driver he cut off.

I say “minor” because I wasn’t in the truck; wasn’t harmed; saw what he was going to do, and the load of unsecured pipe and metal in the truck bed, and had slowed down enough to avoid the debris.

Somehow no one else was hit, and there was no pileup. The adults and small children in the car walked away from the crash, bloodied but surprisingly OK. (The wonderful thing about car seats and seat belts - they work even when you’re too young to appreciate them)

I’ll refrain from comment on the driver’s behavior before and afterwards. I’m immensely glad the kids are OK.

I pulled over immediately, and ran back to the truck. By the time I got there, several other drivers had already reached them and were helping everyone out of the truck.

Within two minutes, random passerby were already calming the children, pressing clothing to their cuts, because of course you’d do that.

A man stopped and brought water bottles from his trunk, for the kids, because it’s hot and shadeless and of course he would.

We all confirmed that one woman had called 911, and got out of her way as she checked the kids out per their instructions, because of course she would.

The rest of us decided at the same time to clear the worst of the shattered pipe, rebar, and sheet metal from the road. It needed to happen, we were there, so of course we did.

A nurse came running down the grass, from however far back she’d stopped. Because of course.

Fire Rescue, Sheriffs and Troopers arrived within 5 minutes, and we all gave our versions of events. Except for one man who couldn’t stick around, but left me his name and number to pass along. Of course.

Once we’d done that, and the professional and responsible folks had things in hand, we all got out of the way and left without further discussion.

Because we hadn’t done anything special; we were just the closest of many decent people in the area at that moment. That’s what choked me up, driving on afterwards - it was all so matter-of-fact. The awful exceptions make the news, and make better stories, but most people? When they see they can be of use?

Of course.

Sunday Morning Password Audit

We all know about the value of strong passwords, and the essential extra value of never reusing passwords, right?

Right. Of course we do.

And we all follow that wisdom, always, without fail, right?

Right?

I mean, except for that throwaway password. You know the one. The same one you’ve been using for random I’ll-probably-never-be-here-again sites (and apps) for years and years. The one you never use for important things. I mean, who cares if anyone cracks that one? That’s why it’s OK that it’s short, and crackable, and re-used so often.

For “fun” this morning, I opened up 1Password and created a Smart Folder like so:

1Password Main Menu - "New Smart Folder"

1Password Search - Items where password is like the throwaway

That blurry part there, is of course, my throwaway password of choice. That count is, indeed, 104 logins. 104 logins that were somehow trivial enough for a junk password, yet worthy of a “Save” click when I created them.

But hey, none of those are important sites, right? Nothing with financial implications or anything.

Oh, just:

I had planned to spend the rest of the morning doing my taxes; that sounds like more fun than what I ended up doing.

Changing 104 passwords takes a while, but at least I’m not doing it in a blind panic after one of those many sites had their database compromised.

Take a minute today to search your favorite password tool. You may be embarrassed by what you turn up, but console yourself this way: “At least I didn’t tell the whole internet about it like Paul did.”

You’re welcome.

TextExpander Snippet: Extract the Real URL From a Google Search Results Link

The Problem

You’re searching Google, looking for a link to email/blog/otherwise save. In this example, you’re looking for me, but you’re confused as to how my name is spelled.

Searching Google for "Paul Raub"

Great, let’s grab that first link:

Copy Link Address

Paste that into your text editor, and you see… oh.

Link surrounded with Google tracking data

You can, of course, actually visit the link in question, then copy the URL from your address bar. Or you could edit the URL, turning %2F into / as you go. I’ve done both, thousands of times. So have you. Neither is particularly entertaining.

The Solution

I searched in vain for a TextExpander snippet to take care of this, but I didn’t turn one up. (OK, I didn’t search that hard; writing one is more fun)

Now, after copying the link, I type

;ungoogle

into my editor, and all the tracking cruft is removed, leaving me with:

Plain Link

Getting the Snippet

You’ll need to download and install the Ungoogle TextExpander Snippet, it will be preassigned an ;ungoogle shortcut. Feel free to change the shortcut as you see fit.

One prerequisite: the snippet is actually a Perl script, and you’ll need the URI::Query module installed. sudo cpan URI::Query will do the trick from the Terminal.

You can also just create a new “Shell Script” snippet of your own, and paste in the Perl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl

use strict;
use warnings;

use URI;
use URI::Query;

my $googleUrl = `pbpaste`;

my $uri = URI->new($googleUrl);

if (($uri->authority =~ /google\.com/) && ($uri->path =~ /^\/url\b/) && ($uri->query =~ /\burl=/))
{
  my $q = URI::Query->new($uri->query);

  my %params = $q->hash();

  my $url = $params{'url'};

  print "$url\n";
}
else
{
  print $googleUrl;
}

Chris Coyier: Don’t Overthink It Grids ∞

Boiling (potentially responsive) grids down to their essence. Planning on stealing much of this, soon, for a music site near you.

If a more complex layout presents itself, people often reach for a grid framework. They assume grids are these super difficult things best left to super CSS nerds. That idea is perpetuated by the fact that a lot of the grid systems they reach for are very complicated.

I am a certified CSS nerd, but I’ve avoided rolling my own grids for just these reasons. To be fair, I reached that conclusion a few years ago when certain older browsers were still a non-fractional part of my sites’ visitors.

Life’s simpler in a post-IE7 world.

Chris Coyier: Don’t Overthink It Grids ∞

Matt Gemmell: Managing Email Realistically ∞

I could quote-mine this for days. I kept bouncing back and forth between “that’s hilarious”, “I should do that” and “I shouldn’t do that… should I?”

Take a lesson from quantum mechanics: an email isn’t definitively important until you see it. If you don’t see it, it’s not important. It remains in a dead-alive, important-unimportant superposition of states. And who cares about emails like that? Not me.

Matt Gemmell: Managing Email Realistically ∞

‘Full of Holes’ Reverse Kickstarter

“Full of Holes” Reverse Kickstarter

When I recorded Acrophobe, I funded it using Kickstarter. For my new digital single, “Full of Holes”, I’ve decided to go another route. A reverse Kickstarter.

Instead of paying in advance for something I plan to create, I went ahead and made the music. Now… and here’s where it gets weird… you get to buy it.

And? AND! Bonus Reward Levels! Also in reverse.

Here’s how it works.

  • The thing already exists. It’s done, and available in the present (and the past).
  • You pledge money, but that pledge is fulfilled right now.
  • You get the music immediately. The funding goal is reached.

The minimum pledge (which we’ll call “the price”) is $1.00. You can pledge (or “pay”) more.

At higher reward levels, you’ll be able to choose something you already have, so you know you’ll be happy.

Reward Levels

$1.00: “I love you, man”

Receive “Full of Holes” in your favorite download format, and I’ll throw in a bonus track, “What I Just Said”, for free.

$2.00: “Whoa! Thanks!”

Everything above, plus that spare key you can’t find. It’ll turn up, watch.

$5.00: “Starbucks cash!”

Everything above, and your most-beloved object within reach at the moment of purchase. Like that red stapler? You’re welcome.

$10.00: “For reals?”

Everything above, and one or more of your favorite, comfy, well-fitting T-shirts.1

$25.00: “Have you thought this through?”

Everything above, and… are you sure? You should perhaps consider spending less on this, and buying my CD. Oh, and tomorrow? Hit the snooze button one extra time, guilt-free. I know. I’m awesome.

$50.00: “Please don’t do this.”

Everything above, and – I presume – a refund, when you realize your mistake. Don’t drunk-pledge, kids!

Where do I sign up?

Glad you asked. Head right over to music.paulroub.com, choose your price, and download away.

You can also buy from the usual suspects (and the other usual suspects), but none of the bonus levels are available2, and the free bonus song isn’t free. Your call.

  1. Quantity will vary from closet to closet.
  2. Except in your miiiiiiind, maaaaannnn.

Just Released: ‘Full of Holes’

I’ve been visiting my friend Mark for a few days, and we’ve been making music.

This music. Please check it out; I’m really proud of this one. First time in forever I’ve done a “band” recording… “band” in quotes since it’s mostly me, but with Mark (thankfully) taking over the drums.

IE View Updated, Still Exists

Remember IE View? Little Firefox extension, lets you quickly open the the current page or link in IE, see how it looks on the wrong side of the tracks?

It’s still here, I’ve just forgotten to tell you about the last few updates. We’re at 1.5.1 now.

Nothing major has changed - mostly fixes to work in the latest Firefox pre-releases, as well as fixes to some minor bugs. If you’d disabled IE View because it didn’t work in far-flung pre-alpha releases, you should feel free to reinstall.

Grab the latest from addons-mozilla.org; your feedback is always appreciated - see the home page for details.

Note to Self: Run Right Now.

Just got in from a nice run on a beautiful night. Not too long, not too fast. An easy weekday run. Almost punted and gave in to “I’m tired, there’s laundry, I’ll run in the morning.” I’m glad I didn’t, and I’d like to remind my stupid self why, for next time.

You’ll be tired in the morning, too. Tired and sleepy.

There’s always laundry.

You’re often more tired after running. At night, that’s a good thing; less so in the morning.

You like running, remember? You pay money and drive places to pin a number on your shirt and get excited and take pictures of starting lines.

walking to the starting line

The rice and beans and veggies and curry powder you put in the pot before you left smell amazing. All post-running food is the best food. Remember the bananas after the last race? Yes, you do.

If you’re reading this in the summer, remember that you get to jump in the pool afterwards. I suggest bringing a mango (see above re: food).

“Tired legs from running” is a much better feeling than “stiff neck from falling asleep on the couch.”

When else do you get to listen to music with no other distractions? How great is the new Craig Finn? (correct answer: pretty great)

That feeling after the first mile.

That feeling after the second mile.

That feeling with one mile to go.

That feeling right now.

In Summary: Shoes on, out the door, now.

How to Exclude Replies From the Twitter Profile Widget

Should you (for some reason) visit the root page of roub.net, you’ll see a collection of posts from this blog, my work blog, Flickr photos, and other things, all collected by an aggregator named Planet Venus.

To keep the noise level down just a bit, I decided to keep my twitter activity out of that list, and use Twitter’s Profile Widget instead. It’s in the sidebar on that page.

That was still noisier than I wanted, though. I didn’t need my @replies to others showing up there, but the configuration options didn’t offer a “don’t include replies” choice. A bit of Googling led me to this page, which noted the code needed to add a filter, without explicitly showing where. Reading the widget code cleared that up, but it may be less than obvious if you don’t spend your days wrangling JSON.

The widget code that Twitter provides you with includes a block that starts with:

1
2
3
new TWTR.Widget({
  version: 2,
  ...

Look for the section below that which looks something like:

1
2
3
4
5
6
features: {
  scrollbar: false,
  loop: false,
  live: true,
  behavior: 'all'
}

The exact contents will vary. Leave them as is, and add, right after the features: line, the following:

1
2
3
filters: {
  negatives: /^@\w{1,20}\s/
},

The indentation doesn’t matter, but copy it verbatim otherwise. In the example above, we end up with:

1
2
3
4
5
6
7
8
9
features: {
  filters: {
    negatives: /^@\w{1,20}\s/
  },
  scrollbar: false,
  loop: false,
  live: true,
  behavior: 'all'
}

We’re telling the widget to remove any lines that start with a @ followed by 1-20 “word” characters. That is, anything starting with someone’s Twitter handle – a reply.

That’s it. Feel free to view the source at roub.net to see it in place.