My Predilection to Collection.

I was raised to save things. My parents had a garage full of antique car parts, scrap lumber, old toys, antique lighting, 80's camping equipment, bikes, tricycles, paints, extension cords, garden hoses, spare tires, motor oil, nuts, bolts, odds, ends…

Don’t get me wrong, my parents are by no means pack rats, but they loved to save stuff. Sadly, I inherited my parents predilection to collection, and as a result, I had too much stuff.

I had a breaking point and wanted to burn it all, but instead, I rage cleaned.

I gave away most of my shirts, jackets, pairs of pants and shoes, sheets, games, furniture, books, hats, toys, and knick knacks. If it was sentimental, I took a picture, and sent it off (save a few small pieces I couldn’t stomach getting rid of). It took me a half-dozen trips to Goodwill in the ol’ Corolla, but I got rid of more than half my stuff.

On my way home from the last drop-off I was afraid my once cozy apartment would feel empty and lonely, but to my surprise, it was quite the opposite. I felt zen. I felt composed. I felt organized. I felt like Steve Jobs in that one photo of him chillin in his empty apartment.


Since the deep purge of 2011, I’ve continued my quest for getting rid of stuff by giving away anything I haven’t used for 3 months. Of course, there are exceptions, but I try to follow the rule as strictly as possible. It’s an incredibly freeing experience.

I implore you, dear reader, to give it a try.

Too afraid to do it for your whole apartment or home? Pick a room or “type of thing” (clothing/appliances/knick-knacks) and start there. If it’s sentimental, take a picture of it. If you’re really struggling, collect everything you would get rid of, toss it all into garbage bags, and hide it in the basement. You’ll find you won’t miss it and are happy to be rid of it.

Next Story — Dear Skeleton
Currently Reading - Dear Skeleton

Dear Skeleton,

I know it’s been a long time since I’ve written. It was so abrupt when we parted. I went to work for Twitter and was growing as a designer and front-end there. I forgot to write you more often. And things weren’t better when I joined Medium a couple years later. You just get busy…ya know? I completely abandoned you.

I wasn’t worried about you though. I figured a few thousand people were still working with you every year. I saw you in mentioned in the occasional Tweet or front-end tools article. It felt like despite my lack of attention, you were doing fine on your own.

You must understand I had no idea what you were up to while I was focusing elsewhere. Imagine my shock when I checked your download counter for the first time in almost three years. I expected to see 10k…maybe 20k at most.

Over half a million people downloaded you over the past three years.

Forgive me. I didn’t know. Compared to the big boys like Bootstrap and Foundation, I know the number is insignificant, but to me, it’s tremendous. Hundreds of thousands of people are working with you and I abandoned you. I feel wildly irresponsible. I brought you into this world and have been neglecting you ever since.

That changes today. You probably didn’t notice, but I’ve been hard at work for the past week or so in a separate branch building you up. Making you new again. Updating you where you’ve grown painfully old.

Is this new you perfect yet? Of course not.

Am I committed to sticking by your side this time? Absolutely. You won’t be alone again. I’ll be there helping build you up.

Don’t be scared. It’s not a “whole new you” really. I mean, you’ll look different and might feel a bit different inside, but you’re still the same Skeleton. At your core, you’ve always been a simple grid and basic styles for core HTML elements. That hasn’t changed. You remain lightweight and style agnostic. Heck, you’re even still built with vanilla CSS. I know we both like it old school and simple.

The short of it is, I’m sorry I forgot about you. We’ve both been busy these past couple years, but this time around, I won’t give you the silent treatment. I can’t promise I’ll write every day or even every week, but I’ll keep up and make sure you get the love you need. That I can promise.


I released Skeleton 2.0 today. It’s nothing revolutionary, but I hope it helps the hundreds of thousands that have used it to date…and the hundreds of thousands that will use it someday.

Next Story — Parallax Done Right
Currently Reading - Parallax Done Right

Parallax Done Right

Getting great performance with parallax is tough. Here’s how to make it happen.

Tldr; There are an easy handful of things you can do to get buttery parallax scroll. Check out a demo I cooked up to see it in action.


Parallax has become, for better or worse, an increasingly popular web trend. The first parallax site I ever saw was Ian Coyle’s BetterWorld for Nike. I was in love. At the time, I’d never seen the technique before. It felt like I’d left the web of PDF-esque static pages and entered the future.

Since then, parallax has blown up. It feels like every day there’s a new marketing page using the technique…and with good reason. Done right, it feels awesome. The problem is, a vast majority of sites using parallax suffer from terrible scroll performance. It’s especially bad on devices with high pixel density like retina MacBook Pro’s.

I’ve played quite a bit with parallax sites and have come up with a non-comprehensive list of Do’s and Don’ts that will hopefully keep you on track to get killer performance.

Before we go through the commandments of parallax though, I would encourage you to check out the demo if you haven’t already.


Some Do’s

Only use properties that are cheap for browsers to animate. Those are, more or less: translate3d, scale, rotation and opacity. Anything else and you’re probably not going to be running at 60fps.

$(animation.selector)
.css({ 'transform': 'translate3d(' + translateX +'px, ' + translateY + 'px, 0) scale('+ scale +')',
'opacity' : opacity
})

Use window.requestAnimationFrame when firing the animations in JS. This basically tells the browser animate stuff before the next repaint. Do this instead of just directly adjusting properties.

window.requestAnimationFrame(animateElements);

Round values appropriately. If you’re animating some object 100px over the course of 200px worth of scroll (so an object at 50% normal speed), don’t let it get pixel values like 54.2356345234578px. Round that to nearest pixel. Trying to do opacity? Two decimal places will likely do.

animationValue = +animationValue.toFixed(2) 

Only animate elements in viewport. Continuing to pass thousands of values during scroll to elements off-screen makes no sense and can be expensive.

Any code example I tried for this felt super contrived. Probably best to check out the living demo code to understand one way to do this.

Animate only absolutely and fixed position elements. I’m not 100% why, but I’ve seen significant performance pickup with only animating absolute/fixed elements. As soon as I apply a single animation to a relative/static element, the fps suffer.

.parallaxing-element {
position: fixed;
}

Use natural <body> scroll. Some browsers, specifically Safari I’ve noticed, really take a performance hit on scrolling elements other than the body. Honestly, I can’t think of a good reason to do it. Even in cases when everything on the page is positioned fixed, so there’s no actual scroll height, just use JS to set an appropriate body height to get the height of scroll you need for all your parallaxing goodness.

Define all your animations in an object, not as messy spaghetti madness. This has almost nothing to do with performance, but it just makes everything so much easier. Plus, c’mon, you’re worth it.

keyframes = [
{
'duration' : '150%',
'animations' : [
{
'selector' : '.parallaxing-element',
'translateY' : -120,
'opacity' : 0
} , {
'selector' : '.another-element',
'translateY' : -100,
'opacity' : 0
}
]
}
]

Some Don’ts

Avoid background-size:cover unless you’re sure it’s not affecting performance. It’s usually fine if you’re not animating that element, but as soon as you try to translate it, there’s a chance it’ll cause serious problems. If you must have a full-bleed background that parallaxes, try other techniques to ‘full-bleed’ the image.

Don’t bind directly to scroll event. Use an interval to update element positions. The scroll is called like a bajillion times a second and can cause crazy performance hiccups. Instead, for elements that are parallaxing, just update thier position every 10ms or so.

scrollIntervalID = setInterval(animateStuff, 10);

Don’t animate massive images or dramatically resize them. Forcing browsers to resize images (especially huge ones) can be very costly. Now, that’s not to say using scale on an image element is bad — in fact in my experience it seems to work quite well — but resizing a 4000px wide image to be 500px wide makes no sense and it just expensive all around.

Avoid animating 100 things at once if you’re seeing performance problems. Honestly, I’ve not run into the issue of moving too many elements at once (even when animating upwards to 15 things simultaneously), but I’m positive it can happen. I have seen occasional performance problems when animating a parent and child at the same time though — avoid it if you can.


Quick Points on the Demo

How much of a difference can these handful of rules make? A huge difference. Not following even a couple of these can make the difference between butter and more chop than a Bruce Lee movie.

It should be noted that the demo:

  • is a bit contrived and simple.
  • is far from perfect in terms of organization and feature-completedness.
  • completely neglects fallbacks and mobile.
  • can get stuck if you scroll like a maniac because I haven’t implemented guards against (though this wouldn’t be particularly tough).
  • hasn’t been extensively tested on different machines since I’m traveling and only have access to my MacBook Pro and m’lady’s Air. Update: Someone on the internet’s mentioned Windows machines might be choppy…I promise I’ll fix when I’m done traveling!
  • is just a demo for education. Be nice ☺

If you want to see how the code works just inspect the page and JS, or check it out on Github.

Better yet, check out Dropbox’s marketing site for Carousel. They follow basically all these rules, have been so gracious as so not obfuscate their JS, and the code is pretty easy to understand. The polish on the site is quite incredible. They have a touch version and have even gone so far as to ease their scrolling implementation, resulting in a somehow liquid feel (not necessary for 60fps, but an interesting and nice touch). It should also be noted that I learned a couple of these above rules from studying their site — huge shoutout to @destroytoday who implented it!


Final Notes

Here are a few final tidbits that might be of value if you’re considering diving into parallax development.

  1. Checkout Krister Kari’s post on parallax performance. He dives much deeper into explanation of a few of the same rules I outlined above.
  2. Use the Chrome Inspector to checkout Timeline > Frames to record some FPS action, or just navigate to about:flags in Chrome and turn on the FPS counter (though I prefer Frames in Inspector since it can go above 60fps).
  3. It’s totally a design-touch, but easing values instead of just regurgitating linear ones goes a looooong way in making parallax feel right. Look for the easeInOutQuad function in the JS if you’re interested.
  4. Be aware, this is just one technique for parallax. Another really performant (arguably more performant) technique is to use canvas, though I shy away from it because of the added complexity. That said, it’s totally viable. This technique is used right here on Medium.
  5. Remember, not every browser/device is going to be able to handle parallax. Make sensible fallbacks for touch devices, smaller viewports and even potentially older browsers. Again, I ignored this in the demo…cause it’s just a demo.
  6. Finally, while I’m all for parallax sites, I would encourage you to ask yourself if the parallax you’re implementing is adding value or just ‘cause it’s cool’. Either way is fine, but just know adding parallax can add significant complexity.

Well, that’s all I have to say about that. If you have any questions, thoughts, or corrections though, I’d be happy chat. Hit me up on Twitter @dhg or just leave a note in the margin here on Medium.

Next Story — Mel Gibson called me “bro”
Currently Reading - Mel Gibson called me “bro”

Mel Gibson called me “bro”

After about two or three hours of navigating the Costa Rican mountains in our busted Rav4, I assumed the worst was behind us. Jacob, Alex and I were only 40-50 miles away from Santa Teresa, so I thought we’d be on the beach enjoying Piña Coladas in an hour or so.

Between the time I had that thought and the actual beach, we forded 2 rivers with water higher than the door jams, jumped our SUV over a ditch 5 feet wide, played chicken with an obese ox, and blindly rerouted because the only road on our map was washed out by high tide. We would have been completely lost if wasn’t for a local guardian angel on a Ducati who escorted us all the way to the beach.

We pulled into the remote beach town of Santa Teresa and immediately B-lined it for one of the few restaurants on the main road. After sitting for a half-hour and B.S.’ing about how lost we were, I peeked out the window at another gringo fiddling with his phone outside. I take another few seconds to give him the once over, then I realize.

“Man, that guy looks a lot like…holy actual shit you guys…that is Mel fucking Gibson.”

Yes. Mel fucking Gibson.

The proof. I panic snapped this in case he left right after.

He was sitting at the same café in an isloated corner of Costa Rica, taking selfies and reviewing. A moment later he came inside, paid for some pastries, and as he was on his way out, I casually leaned back and said:

Hey man, love your movies.

Yup. That’s the best I could think of.

He paused for a moment with the door already open in front of him. He looked over his shoulder and said:

Thanks bro.

It was at that moment I soiled my pants and considered my life complete.


I have no idea why Mel was out there and can only assume he too was taking a little vacation time. Either way, it was one of the crazier celeb sightings I’ve ever had.

If you’re reading this Mel…I’d just like to say, specifically, I really enjoyed Conspiracy Theory and Forever Young. I did not love What Women Want. Thanks bro.

Next Story — Did Dexter Inspire Real Serial Killers?
Currently Reading - Did Dexter Inspire Real Serial Killers?

Did Dexter Inspire Real Serial Killers?

I’m a TV binge watcher. I will go months without watching any TV, casually put on a show for background noise while I clean, then spend the next 2 weeks sprawled on my couch from 6PM — 3AM gobbling season after season until I hit the series finale.

My latest unhealthy love affair was with Dexter. 8 seasons in just over a couple weeks. Approximately 96 hours of ass-glued-to-couch existence. I was neither terribly thrilled nor disappointed with its conclusion, but I found myself obsessing over a question after the finale.

Has anyone committed murder because they watched Dexter?


Honorable scholarly and scientific sources inform me that since the mid-2000's, “undergraduates studying forensic science and crime scene science has more than doubled over a five year period…students said they had been inspired by TV coverage of the profession.

If watching CSI inspired thousands of teens to choose forensic science majors, could Dexter inspire people to murder?

Obviously TV can change our behavior — the advertisement industry has proven that — but the difference between buying a razor and killing someone is a doozie.

There’s tons of research on the behavioral impact of TV, but even with a solid decade of SEO-guru-ninja-rockstar experience, I couldn’t sift through the heaping mass of shit about “TV and violence ruining our youth”.


I could have gone to the library and immersed myself in scholarly journals, but I chose an alternative investigatory practice. I swiveled my lazy ass 90° counter-clockwise and consulted my spiritual guide and fellow Dexter fanboy Bradley.

“Yo, you think Dexter might have got some shady Miami kids too amped and inspired them to go on killing sprees? Or is it the opposite and serial killers in Florida were like…‘Dexter is blowing us up too much and ruining our hidden lifestyle’?”

Brad, being the sage that he is, took a moment to ruminate. He furrowed his brow hard, causing his pipe-cleaner eyebrows to crowd his dreamy eyes.

I dunno man, but I bet you could find some murder counts and solve rates for Miami and do some deep nerd science to figure it out.

Genius. I’ll look at trends for Miami’s murder rate vs. the rest of the U.S. for the past 8 years (8 seasons) and see if Dex inspired an uptick in murders in his home city.


Since the government shutdown made all of the usual crime data totally unavailable, I was forced to trust the seemingly reputable people of www.city-data.com.

I discovered that murder trends in Miami haven’t drastically changed in over a decade. There have been between 50 — 80 murders annually in Miami for the past 11 years.

What can be said for Miami is that Dexter definitely chose the right city to kill in:

Miami-Dade County recorded 8,793 homicides between 1980 and 2008 — by far the most in Florida, and nearly three times the number recorded by Duval County, the next highest in that period, according to FBI reports. Law enforcement officers from the 30 agencies that work in Miami-Dade cleared 3,951, for a 44 percent clearance rate — the lowest in the state.

How does that compare to the U.S. at large?

Despite dramatic improvements in DNA analysis and forensic science, police fail to make an arrest in more than one-third of all homicides. National clearance rates for murder and manslaughter have fallen from about 90 percent in the 1960s to below 65 percent in recent years.

Even at its worst, the U.S. average is 20+% better than Miami in homicide solve rates.


Now, being the astute reader you are, I know you’re wondering how I planned on definitively tying Miami murders to a Showtime series, given the infinite number of other variables I couldn’t possibly account for.

Let’s be real — I was going to blindly assume that Dexter is the only possible explanation for the upward trend in murders in Miami. I may not have strictly adhered to the scientific method per se, but it would have been close enough for me. Unfortunately, my research left me no closer to solving my quandary.

I had gone astray. The real question haunting me wasn’t about demographics or trends. It was about an individual. It was more like the intro to Kickass. Dave Lizewski wanted to know why no one ever became a vigilante crime fighter. I wanted to know if anyone watched one too many episodes of Dexter and started covering garages in plastic to kill people.


Google autocomplete is a crazy thing. Sometimes it thinks you want to know why your parakeet hates you, but other times — with just the right word ordering—it knows you want to find a serial killer who was inspired by Dexter Morgan.

His name is Mark Twitchell and he wanted to be Canadian Dexter. Twitchell emulated Dexter’s kill rooms. He talked openly about his “inner savant power” during trial, mirroring Dexter’s obsession with his “dark passenger”. He watched the first four seasons of Dexter before he was convicted and went to great lengths to get a TV and Showtime in his cell so he could finish “every episode of Dexter’s four seasons that he missed since he was arrested and convicted of first degree murder.

Unlike his muse, Twitchell was messy and careless, making it quite a bit easier for forensic investigators to pin the murder of John Altinger on him. The sticky note in Twitchell’s car that read “kill room clean sweep” was incriminating, but not even close to the manuscript police found on his computer. Titled “S.K. Confessions” — “Serial Killer Confessions” — the first line of the book read:

This story is based on true events. The names and events were altered slightly to protect the guilty. This is the story of my progression into becoming a serial killer.

Twitchell admitted his guilt in court and hailed Dexter as an inspiration.


I wanted to discover a Dexter-esque murderer who killed with a twisted altruism. A troubled genius who kept to a code, only killed the “bad guys,” and never made flippant mistakes like leaving post-it’s around with murder-related to-do’s. What I realize though, is if he exists, I will never find him. He doesn’t have a Wikipedia page. No one is writing stories on HuffPo about him. His family probably doesn’t even know about his secret life. I will never find the disturbed, but well-intentioned killer inspired by Dexter Morgan, driven to carry out his mission outside of fiction.

That doesn’t mean he doesn’t exist though.

Sign up to continue reading what matters most to you

Great stories deserve a great audience

Continue reading