How to Create Great Night Long Exposure Shots

Recently, I’ve been spending a lot of time taking long exposure photos. I’ll be doing more daytime ones soon, but the easiest are night shots. If you spend enough time with your camera, you’ll quickly find that light is both your best friend and worst enemy. If your shutter exposure is too long, your photo will end up over-exposed and washed out. If your shutter isn’t open long enough, you risk under-exposing.

This is even more so true, on the underexposed end, at night. If you take a camera out and simply point and shoot, there’s a strong chance your photo will be too dark to make anything out.

Long exposures are incredibly easy to take if you have the right equipment. And the right equipment is incredibly cheap. All you need are:

  • A D/SLR camera capable of shooting “bulb”. I use a simple entry level Canon T5i.
  • A sturdy tripod. This works.
  • A remote release. You can get a cheap intervalometer, but frankly, I find the user experience to be complicated and unnecessary for night shots. I use a simple one button remote.
  • An eye. You can’t buy that on Amazon, but you can develop an eye even with your smart phone.

That’s all you need. And patience. It’s worth it to try and fail, if you learn from how and why you failed.

How I did it

You’d think photography, being an art, would follow a free spirit model of wandering and feeling a shot, then taking it, when it presents itself. I sometimes do that, but I am an engineer. There is a process.


When I’m going to a new place, the last thing I want to do is travel and find out I don’t actually have the shot I hoped in my head. This is where Google Maps comes in to scout my location. You can use street view, often, to scope out a location and even pick the spot. When I was thinking about this shout, I went to Google Maps, found the location and looked for a place where a 6′ tripod could go and have the angle I wanted.


This location was directly next to the Maryland Institute College of Art and I knew thatI could get right up in that driveway, setup and take a long shot there. This is one of the handiest tricks I have and has nothing to do with photography. I don’t want to waste my time.

I spent about 30 mins attempting different settings but the key to a long exposure is a tripod that keeps your camera steady and a remote so you don’t touch it. Even just touching the button can introduce shake. You have to have a remote.

Put your camera into Manual. Don’t be scared. Open up your aperture as wide as it can go. My 50mm lens can open up to f/22. On the Shutter side, crank it all the way up until your timing settings read “Bulb”. Point and shoots, or most of them, won’t have this setting. You’re going to need a dSLR. Turn your ISO to 100. This reduces the noise and makes the sensor more more sensitive to deep light. It won’t overexpose you and you’ll have richer colors with less noise.

Two more settings that you’ll need. Make sure your camera is on manual focus and you focus it before taking a shot. Allowing your camera to find the focus point in the dark is a recipe for pain. Trust your eye on this.

Finally, every camera is different, but find your shot setting. Typically this will be set to a single shot, which means you hit the button and the shutter opens and closes exactly one time. You can also have burst which will take three shots in a row. However, for this, find your setting that is designated as remote control. This will vary by camera, so check your documentation if you’re not sure.

Now comes the psychological side.

On my camera, there is a general ratio of one second of exposure for every second of writing to the card. A 60 second exposure will take 120 seconds to complete. You have to be patient and not rush these things. Good things come to those who wait.

This shot had a 63 second exposure. I tried longer and I tried shorter, but 63 seconds gave me the appropriate amount of sky (it was dark, but the sky has a nice blue glow) while capturing passing tail and headlights. This is a trial and error thing and will depend on your  location. It’s really important to be patient and not be in a hurry even if you find yourself twiddling your thumbs.

Finally, this particular shot has been HDR’d. That’s an entirely different lesson, but, frankly, everything I know I know from reading Trey Ratcliffe. Also, my style is an over-exaggerated one on purpose. But that’s me.

Let me know if this is fun. I really enjoy teaching opportunities and I do love sharing what I know. Get out there and shoot and don’t be afraid to fail.

What Brings Us Together

Photo Credit: Rachael Adams.

We are a race divided.

We are divided by gender, class, race, geography, politics, and so much more. If you don’t believe me, go take a look at your Facebook news feed.

At this time, on my news feed, someone is trolling New England Patriots fans. Someone is arguing about how much money they would owe in taxes under Bernie Sanders tax plan. Someone is wishing Canadian Prime Minister Justin Trudeau would run for U.S. President (yes, that’s a head scratcher). Somebody is complaining about digging out from snow, while another person is happy for a snow day.

We sit in isolation staring at our phones, not interacting with others. Some people spew hate speech against women in the gaming industry, Muslims, non-Caucasians (mostly black) and it goes on. It’s easy because, despite the highest population on earth ever in the history of the globe, we have made ourselves isolated in our own bubbles, uninterested or unwilling to become involved in other humans. It’s easy to say things online without repercussions, so… we do.

If you really take a hard look at the divisive issues in our nation and world, there’s an attitude at the root of misogyny, racism, classism, and homophobia that has existed for as long as humanity has existed… tribalism.

Tribalism isn’t something new, and it isn’t going away, sadly. It has evolved, as it always does.

Tribalism used to be among actual tribes. Now it’s among different groups.The gay community. The black community. The Wall Street group. Christians. Muslims. Jews. Us. And them. It comes from a place of glorification of self over anyone else. If someone else can join me in my quest to prove everything I am and do, and the people I ally myself with are better…. then we get these faux-alliance tribes. I’m guilty of this personally too!

Inevitably, when people step out of their tribe and discover people from other tribes and the qualities they offer, then those tribal barriers break down. We’re not gay, straight, black, white, Christian or Muslim. We just are. And they just are. And together, we just are.

MLK day just passed and, for many, it was a day of service. People volunteered at shelters or other organizations on a mission to help others. Everyone I know who participated in the MLK Day of Service found it very rewarding, but to many, volunteering is not a comfortable thing.

We could talk in length about getting out of a comfort zone, but that’s a topic for a different day. Sometimes, breaking down tribal lines should be handled in smaller, more natural bite size pieces.


Photo Credit: Katrina Tolentino.

Back in 2010, shortly after I moved to Austin, I posted on Facebook sometime in November about wanting to go to a park and have a pickup game of football. There was a lot of interest in this, but a lot of folks already had plans or were out of town. Over the next week, I gathered dates that interested parties could join and we decided on a mid-December Saturday.

Before long, it dawned on me that it was the holidays and we should do something with this. I brought in my friend who excelled in fundraising and event organizing and we collected toys for a local Austin school charity, local businesses donated coffee and breakfast tacos and.. we played football and had a blast.

This weekend, during the Blizzard of 2016, I posted an impromptu Facebook post, knowing that local residents in my neighborhood weren’t going to be able to go anywhere or do anything and would probably be cooped up. It was loosely based on the famous Washington D.C. Dupont Circle snowball fight that happens during every storm. I wanted to be in DC for it and then it dawned on me, Baltimore has it’s own park that would serve well for a neighborhood snowball fight.

After initial interest, it became clear there was A LOT of interest and so I made a public Facebook event. Within 36 hours, over 600 people RSVPd, with 1700 expressing interest. In reality, about 200 showed up. Check out the fantastic video below by neighborhood videographer and documentarian, Steve Celano.

Video Credit: Steve Celano.

What was astonishing about this scene wasn’t the immense amount of snow being thrown about. It was that everyone was happy! And they were happy to be together. To be clear, I only knew a handful of the several hundred people that came out, and I’d venture to guess that most people only knew a handful of people.

I watched (and participated) as blacks, whites, asians, hispanics, gays, straights, Muslims, Jews, and Christians all came together and had a blast. There was a Republican who dive bombed a Democrat with a snowball bigger than his head, while a gay man threw a well-positioned snowball into the back of a lesbian. And everyone loved it and didn’t care because we were having fun… together.


Photo Credit: Shaun Collins.

Every weekend, as one of those crazy soccer fan, I join a barful of Liverpool supporters to watch our boys pull hamstrings. One of our number is a staffer for a Democratic Maryland state legislator. Another is a black Marco Rubio supporter. We all come together in commonality and hate no one… except Chelsea, but who doesn’t?

This happened back in Austin too when the local Baltimore Raven’s Nest got together every Ravens game day, take over a bar and have camaraderie. It didn’t matter our politics or religion. It just mattered that we were together.

736493_10151407631749396_314907652_oOne could argue that this just enhances tribalism. Instead of smaller tribes, you have bigger tribes. That argument wouldn’t be false, but I think there’s value in approaching togetherness and unity in a way that is manageable.

In a city like Baltimore, it’s cliché and unhelpful to say… we’re all in it together, because we’re not. But on a neighborhood basis, on a smaller “micro” scale, tribalism, I believe, can be reduced.

What makes us stronger is what brings us together. What makes us different should be a strengthening quality, not a divisive quality.

How I Rediscovered Purpose

This weekend, my life purpose was reawakened. And it was important.

I had the chance to not only attend, but also speak, at the inaugural WordCamp US in Philadelphia.

But before we go there, let me share some related feelings.

The first WordCamp was held in 2006 in SF and I was one of a few people who had the privilege to speak to that audience. I don’t even remember what I spoke about but it was designed as an unconference.

Ok let’s go remedial for a moment to explain what an unconference is. A decentralized get-together where people who have an idea can share it… As opposed to an organized conference of your traditional means.

All this to say… WordCamps have trended more toward traditional conferences as opposed to a community-driven “dinner table” sort of thing.

But, while there have been hundreds, if not thousands of WordCamps since, across the globe – of which I’ve organized two – the “big one” that attracts attendees from all over the globe, has been WordCamp SF where it all began. And it has largely been spearheaded from the top down. It was an important move, inline with open source ethos, to democratize the big one. And so the Philadelphia WordPress community and WordCamp Philly organizers were given the opportunity to do “the big one”.

And boy did they do it.

There was a tone to this WordCamp that was different than every other WordCamp that, to my knowledge, has ever been organized.

You typically find WordCamps, generally organized for the regional community, catering to every level of user… From non-technical users wanting to understand how to market their content on Google, to talks about leaving a day job to freelance.

Wash, rinse, repeat.

There’s a reason why veterans in the industry typically hang out in the hallway talking to each other instead of going to sessions.

This WordCamp had a forward-thinking tone that had sessions oriented in such a way to challenge the norm and looked at what WordPress could be instead of what it was. It was truly amazing and inspiring.   

Look, WordPress runs one out of every four websites you’ll visit today. It’s a gigantic responsibility but… Those of us who work with it every day also are the first to forget that. We treat WordPress like a job.Freelancers find a way to find gigs that will get them to their next gig. Agency folks take the tasks assigned by project managers and make them reality knowing that next week, we’ll have another task. Product folks keep building out features because a couple people want them.

We forget that every line of code we write contributes to humanity.

Every line of code enables a freedom fighter in the Middle East.

Every line of code expands the ability for an activist to achieve her intended goal.

Every line of code allows a young man in a Congolese village to communicate with his community isolated by physical obstacles like jungle.

Or sell a product they hand craft online to customers who can’t reach them.

It builds economy. It builds relationships. It builds humanity. It gives those who have less opportunity the ability to compete with those of us who have more.

I watched as Anthony D. Paul built a website using nothing more than a smart phone. Important because developing countries are being flooded with free smart phones where there is no Google Fiber or Comcast.

With WordPress 4.4 being released on Tuesday, we will for the first time, have the ability to break WordPress out of the paradigm of “running websites”… We will be able to run apps, run data visualizations, create elaborate interactive stories.

And what’s the most fundamental means of human evolution? Storytelling. Passing knowledge from one generation to another.

I got into this world… I spent hours of many nights over many years pouring myself into WordPress and I have admittedly allowed it to become my job. I forgot why I got into it. I lost my inspiration.

This weekend, I remembered. I want to change the world. Literally.

So thank you everyone who organized, sponsored with real money, the speakers and every single one of the hundreds of people I spoke with. You made WordCamp. You gave yourself to me, to the community and… By definition… The world.

Asynchronous WordPress

This morning, at WordCamp US, I will be giving a lightning talk to a room full of WordPress professionals from around the globe. This talk was given earlier this year at WordCamp Baltimore as a full 45 minute talk, but sadly, I don’t have that kind of time today. So I figured I’d provide those attendees and anyone who might be interested additional context.

In WordPress, there are a “event opportunities”, usually referred to as hooks, that occur throughout the loading of a page and execution of the WordPress code. Which hooks are fired depend on the context. If you’re publishing a post, one series of hooks trigger. If you leave a comment, another series of hooks fire. If you’re in the WordPress admin, a different set of hooks are executed.

All of these hooks exist without any sort of innate overhead. They exist to allow other areas of code, including plugins or themes, to attach events to them. We are used to these things. Plugins have created all kinds of things over the years that might get triggered by a hook.

Some examples:

  • When a post is saved, a third party service analyzes the content and provides a set of suggested tags.
  • When a post is published by an author, an email is dispatched to an editor for review.
  • When a new user is added, information from social sources is pulled in and added to the user’s WordPress profile

All of these sorts of events add liability to WordPress in the form of processing time or load time. In the case where many events are queued up to be executed or, particularly, third-party APIs are slow to respond or possibly even down, the execution time in WordPress will be increasingly long while the web server waits for responses. This is a bad user experience as the user may just be sitting there watching and waiting for something to happen. In extreme cases, this waiting may timeout resulting in errors.

Some time ago, 10up was engaged by TechCrunch to solve a long and lingering problem with the site load time. One of the bottlenecks discovered to performance was a series of events that were occurring, particularly around the Crunchbase API at the time, that was causing significant delays as every occurrence of the save_post hook also carried a call to the API to get information about investors, startups and key people mentioned in the article. and render the information in the article.

We created a library that TechCrunch open-sourced and that is the topic of this talk. This library essentially offloads events that would be on a hook like save_post and fires it asynchronously 1.

This WP_Async_Task class can be included as many times as wanted as it will ever only ever be included once thanks to a class_exists() check.

Once this core class is included, it’s time to get to work. For every hook (not event) that you wish to fire asynchronously, this class must be extended with a protected $action variable which contains a string identifying the hook name and two required protected methods – prepare_data() and run_action().

The prepare_data() method exists to take a numeric index of data passed into it. The purpose of this method is to return data identical to what would traditionally be passed into the hook you’re making asynchronous. The save_post hook takes three optional arguments 2 — $post_id (integer), $post (object of type WP_Post), $update (boolean).

The run_action() method accepts the returned array from the prepare_data() method as a $_POST superglobal, so normal sanitation should also happen in the context of this method. This method is where you would define your newly named hook “wp_async_save_post”. Code examples can be seen on the Github page.


  1. More like faux-asyncronously since they are really just moved to the end of execution on the shutdown hook
  2. Despite some arguments, with some hooks, being optional to use, they should not be optionally returned in these classes, as any event from any plugin may or may not use all three arguments — return all data that is available to be used by the hook!

Wish Me a Happy Birthday. Give.

Tomorrow is my birthday and I’m going to be 39.

That’s one year shy of 40! Yikes!

I want you to give to someone else. Read on.

This past year has not been the easiest in my life. In fact, it was maybe the hardest. In the past year, I saw myself recovering from unemployment to being financially on top of the world to being beyond broke. I saw myself visit the darkest part of soul as I struggled with severe, sometimes crippling depression. I saw a relationship slip from my grasp while also going through recovery, joining 10up and getting back to a healthy place in life. It’s truly been up and downs for me, and while it’s been painful in many ways, it’s also been very rewarding.

Particularly when it comes to recovery from depression, I’ve come to realize how much of a positive impact it is to be outwardly focused and put resources, time, money and focus on others.

Tomorrow, my Facebook and text messages will explode with happy birthday messages, and I’m grateful. I hope in addition to sending me well-wishes (or maybe offering to buy me a drink… you can do that too), you’ll consider giving to one of these organizations, all representing my interests (my very diverse spectrum of interests!), that are working toward a goal near and dear to me.

European Migration Crisis


01.05.2014 Hamburg, Germany: 500 people opened a Refugee Welcome Centre in Hamburg situated in an empty school, while Hamburg City Council and the ruling SPD refuse and fail to solve the problem of the Lampedusa in Hamburg group. As the Hamburg Government is not willing to find a political and humanitarian solution, people took the initiative and showed how easy things can be solved!

Rasande Tyskar, via Flickr

As so many refugees are flooding into Europe from Syria and the Middle East, many EU nations are strictly interpreting EU rules that require member nations to “hold” asylum seekers in-nation until clearance can be granted by the entire EU body of nations. Due to the sheer number of refugees, this is creating enormous humanitarian challenges and tempters are running high. Across the EU, governments are struggling with what to do with hundreds of thousands refugees while the general population in most member states fall on the side of the spectrum that is welcoming to these refugees.

The International Refugee Council is based here in the United States and is coordinating with refugee councils in Europe on managing the crisis in Europe. Please consider making a donation to the IRC to assist in these efforts.

Forever Homes For All the Dogs


Fender Excited about Snacks at Christmans
Fender Excited about Snack at Christmans

I met Fender in 2011 after he was unceremoniously abandoned at Whole Foods in Austin. I decided on that day to give him his forever home. In that time, he has lived in two states, two cities, peed on 13 state capitals, claimed 973 bushes in Baltimore and has been loved and cherished by all who have met him. He’s a joy to have next to me, even when his 25 lb stretched out frame takes up my entire queen size bed, at times, relegating me to the floor.

Though I did not adopt Fender via Austin Pets Alive, their mission resonates with me. Many people I know have either worked for, volunteered with or adopted from APL, Austin’s largest no-kill shelter. The national standard for the “No Kill” label is 90% of all pets being adopted or fostered.

Since I adopted Fender, I’ve advocated for people adopting a pet rather than getting a puppy from a pet store, which are often sourced as “puppy mill” puppies. It’s so much more rewarding to take a broken and hurting animal and give that pet the life of royalty. To make that pet feel special, when they have had their trust shattered in the past through abandonment or abuse.

As a birthday present to me, if you’re in Austin, go volunteer or adopt from APL. If you’re not, please consider a donation to help APL continue their mission.

Free as in Speech, not as in Beer


A Colombian teacher uses WordPress.
A Colombian teacher uses WordPress.

Photo by Oriana Robles, via Flickr

I have made an entire career on open source software such as WordPress. I’ve had significant contributions to the community, including being a cofounder of WP Engine, writing the WordPress Bible (sadly, out of date — ask Wiley to let me write another edition!) and WordPress core and plugin contributions. Not bad for a kid from Baltimore that dropped out of college and never got a degree.

I wouldn’t have been able to do this without free, open source technology. Free as in speech, not as in beer… free does not indicate that money does not change hands. It indicates that my software can be taken, modified and distributed for other purposes.

In much of the developing world, including Africa (where I also have roots), money goes less farther than here in the relatively prosperous western bloc. When 25 cents can buy a meal, expensive proprietary software is simply not an option. The developing world is where open source becomes extremely important in bridging the digital divide.

The Free Software Foundation is on the forefront of open source technology distribution and evangelism here in the United States and abroad. For my birthday, help them continue being that champion.

Thank you, in advance, for a birthday gift on behalf of me to one of these, or many other organizations, that are doing the hard work.

Letting Perfect Get in the Way

I’ve been contemplating a phrase for a few days now. It applies to writing code, as I do for a living, as well as a whole host of other things… from relationships, to home life, life goals and endeavors… the list goes on.

Don’t let perfection stand in the way of progress.

I know what some people are immediately going to think when they read that. You’re asking me to settle for less than the best, Aaron? Let me say, emphatically, no. In fact, settling is the opposite of what I’m suggesting.

You may have heard of the Lean Startup concept of building a new business or product. I’ve talked about it before. The basic idea is you don’t wait to be feature perfect… you build, iterate, gather feedback, iterate on that feedback and continue the process. That philosophy hedges your bets around building something nobody wants by not waiting for the final, polished product before launching into the world. It relies on the concept that you don’t have to have something perfect in order to release into the wild.

Too often when making engineering decisions in a product, the risk is that you will want to make sure everything is perfect right now. Make sure the classes are all structured perfectly. Perfect object oriented methodologies are in place. Every edge case considered. An entire code-base unit tested.

All of these are extremely important, but they are also things that can be iterated on. Sometimes you can’t write code that relies on code you haven’t yet written yet! So you write shitty code that does the job in order to get ahead, and then return to that shitty code to refactor later.

Sometimes in your personal life, you may find yourself in a relationship that doesn’t have all the ideology of “The One” (Note: What the fuck does “The One” even mean?). That person is perfect in every way. They get your hearts. Understand your twitches. Empathize and support you through all your difficulties and struggles. Yet there’s just a couple things you just can’t stand. Do you give up and move on to the next, expecting next time that you’ll find perfection? Or do you buckle down and realize what you have is pretty damn good and it will be even better than that later on?

Do you let perfection get in the way of progress?

You shouldn’t. You should release, iterate, get feedback and release again. In code. In life.

New Adventures with 10up

It’s such a weird feeling.

Since I began this blog in 2004, I’ve been able to say I was truly hired exactly one time.

That day was Jan 9, 2013.

In 2004, I was employed by Northrop Grumman. In 2006, I left NG to pursue the startup world, I took up residence at b5media as the CTO who never got the title. I did this on a contract basis. I worked for myself for a very long time, got hired in 2013, left that job in 2014 and went back to working for myself. I just realized, over time, that I wanted something different.

I’ve avoided agencies, though quite a few have wanted me. These usually boiled down to what I term as “web development sweat shops”… Usually in the political space. They ramp up for campaign season – presidential and mid-term. They have a bunch of sales people in suits driving deals with campaigns – federal, state and local – to build websites and promote whatever brand of ideology they adhere to and the developers are overworked, have no seat at the table, and generally are expected to perform and work at 200% or risk getting fired.

I’m not that guy, so I’ve avoided agencies.

Unrelated note: Republicans have the deepest pockets. They spare no expense and question no cost. Democrats are far stingier. Though I fall on the left politically, I’m a capitalist who wants to make money as long as my name isn’t on it. Sometimes leaving ideology behind is worth it economically. Redistribution of wealth to my pocket, as it were.

I have, however, encountered a number of agencies who do not work in the way I abhor. One, in particular, is 10up.

For the past month, I’ve been working full-time with 10up on a contract basis. I’ve been blown away by their drive and collaboration from top to bottom. I have gotten to sample the goods and ensure they meet my high expectations of “work”. I have been respected and valued, and that is how they treat their entire team.

We have seamlessly worked together to ensure that, in a distributed company, I could deliver on my commitments of chemistry, communication and charm (the last not being a real thing, but I needed 3 C’s to be a better alliterative writer).

Prior to this engagement, I recognized 10up as a high-level WordPress agency. They only do WordPress, unless there’s a supplemental solution that engages the WordPress ecosystem. They give back to the WordPress community. In fact, they actively participate.

But I really knew very little about the nuts and bolts and the extent of their work. Now I do and I’m proud to call myself a 10upper as of tomorrow morning.

Thank you, Jake Goldman and team for the opportunity and the last month of fun, work and amazing innovation. I’m looking forward to doing more.

Something that caught me early on was an engagement between 10up and the company I helped start, WP Engine. It happened in San Francisco this past Christmas season and you may have heard about it… GIF the Halls.

It so happens that I will be working on the team that pulled that engineering feat off. I refer to it as the DARPA of 10up. The team tasked with creating crazy stuff that nobody has tried. GIF the Halls was a crazy project my team did. It tied WordPress with cameras for video greeting messages at the holidays. As a photographer, that’s right up my alley.

Can’t wait to try new crazy stuff. Onward!

Dishonesty in Digital Marketing


We used to look at that number, scratch our heads and rationalize the price as a marketing tactic to make buyers believe a product was cheaper than it was. This is all based on the psychology that $9.99 looks cheaper than $10 visually.

$99.99 isn’t $100 because it’s not a 3-figure number. It’s a 2-figure number and change. It has more psychological impact with bigger purchases. $999 isn’t $1000 and subconsciously, we think, it’s cheaper.

The psychology works even if the facts don’t bear out.

But there’s a nefarious new plot twist in the digital marketplace: $19.98 isn’t greater than or equal to the minimum purchase of $20.

In the old days (of yesterday), if you go into a convenience store and tried to buy a bag of chips and a coke, you might be told that the credit card minimum was $5. That tactic is a based-on-data-driven-business reality. Credit card companies charge a per-transaction fee that is usually a flat rate, so the law of diminishing returns comes into effect.

But you could always add a pack of gum or similarly low prices item to get over that credit card minimum.

But the marketplace is different than these harsh business realities. In the marketplace, specifically digital, companies are forced into a profit-or-bust scenario where anytime they can get $9.99 more, they inch closer to profitability… And that’s a business reality too.

When I decided to try Drizly, the fantastic new alcohol delivery service that fashions itself a liquor-store-meets-pizza-delivery service concept, I placed two six packs of great IPA in my cart and went to close. Total: $19.98.

Store minimum: $20.

Mind you, pretty much everything comes in at a minimum of $9.99 so the closest you can get without going over? $19.98. To buy that pack of gum, so to speak, that gets you that extra 2 cents? Another $9.99.

This is, of course, intellectually dishonest.

If you cared about minimums, you’d make each six pack a penny more. And if that’s an artificial number to inflate profit, you force the user to spend another $9.99 for a real store minimum of $27.97. Plus delivery fee. Plus tip.

The 99 cent marketing tactic has evolved. Of course, I didn’t purchase anything from Drizly and they are, by no means, the worst culprit. But they are the most recent example.

Beware the 99 cent rule. And beware companies who sell their wares in sneaky ways in pursuit of that almighty dollar.

Adding a Time Start to WordPress Media Embeds

Ever have those times that you’d like to share a piece of media but have it start at a particular time? I did recently, and figured I’d share my solution.

It turns out, WordPress does not support this feature out of the box (though you could argue, theoretically, that it should).

We just remembered the 50 year anniversary of the Selma march which was nicknamed Bloody Sundy as 600 civil rights marchers were attacked viciously by law enforcement in 1965. It seems appropriate to sample the MLK “I have a dream speech for this demo.

Now of course, it’s all a great speech worth listening to, but what if I want to start the audio at the place we all know?

Boom, just like that. The nuts and bolts of this are tied up in this code:

Simply, I filter the shortcode attributes for the audio and video shortcodes adding a new argument – “start”. This is in seconds.

The second adds a little snippet of Javascript after each embed that moves the internal time pointer to the appropriate spot in the supplied media.

Caveat: This will not work for media that is simply cut and paste. While WordPress will translate appropriate media URLs into embeds, it does not pass anything more than the required `src` argument.

Full source code, as a WordPress plugin, can be found on Github. (Pull requests encouraged)

If I Had to do it All Again

As I sit here tonight, at a bar, typing on the WordPress app (which will undoubtedly make my fingers cramp typing long form), I’m thinking about my life. What has made me a man, a developer, a friend, and lover (I can even get in Oxford commas on the app!)

In exactly five hundred and fifty six days, I will be 40. FORTY!

I don’t look like an old man.

I don’t (usually) feel like an old man.

I don’t even behave like an old man.

Note: what follows may sound like I’m saying “Get off my lawn!”

Where were we? Oh yes, FORTY.

I just finished my first week on a new job. I’ve been doing WordPress stuff since 2004. I was learning PHP in 2000. I was developing coding chops in 1987 on an Apple IIc!

I’ve been married. Divorced. Had a kid. Owned a house. Chased the rabbit hole that is the American Dream™.

I’ve loved and I’ve lost. I’ve had dear friends pass away from cancer and heart attacks. I’ve watched national tragedy and personal tragedy, and even suffered my own.

My perspective has evolved. Sometimes willingly, sometimes not.

Take weekends and evenings. You may be single. You may not be. It doesn’t matter. Don’t work at all hours of the day and night. You’ll be less productive, because you’ll be less rested. You’ll also be better socially adjusted.

Get up early. Don’t sleep in until 11am. Your body wasn’t meant to do this. Don’t force it to. It will rebel. Related to this, and the last point, get to bed before midnight.

The man who cooks is the man who gets the woman. I’m happily involved, but my girlfriend and I both love to cook. And you know what? It got me ahead when I was single. No woman wants your idea for dinner at your place to be frozen dinners or delivery (there’s a time and place for delivery!).

Find passion that you aren’t aware of. Later in my adult life, I bought a camera and started learning how to shoot… How to visualize and see a photo. Do something, try something. Get outside your comfort zone and challenge yourself. Volunteer!

Always learn. When I started on WordPress, I was hungry. I was curious. I started learning the ins and outs. I admit that in more recent years, I’ve allowed myself to get comfortable. I’m working on some other interesting things that will stretch me even more. If you’re in tech, you have no choice but to move forward. If you don’t learn, you’ll be left behind.

Don’t take the world literally. Seriously, stop. I’m looking at you, political nerds. Stop parsing everything that politicians do. They do it because it’s politics and all the crazy is a vast, orchestrated act to get you worked up and supply them with power. Live your life. Change what you can and accept what you can’t.

Read. Everything. I’m not a book guy, but if you are, have at them. Spend less time on Facebook and Reddit and more time on sites with content that is written at a college level with an informed, intellectual audience. Read The Atlantic, Ars Technica and the huge variety of other excellent sources. Stretch your intellect.

You’re not right. At least some of the time. Give grace to others, even if you “know” you’re right.

That’s it! Or at least all I can think of after 14h of work and several beers. My hands aren’t even cramped!

Update: The dress is white and gold, you morons.