www and josh ampersand Josh

Dec 16th, 2014

gatrack v1.3 Released

A new release of gatrack is out today. With it comes error tracking support (and fallbacks) for Internet Explorer 6/7/8 as well as installation support via Bower and NPM package managers. You can see the release notes on GitHub.

Dec 10th, 2014
Returning to a Computer After A Week In The Desert

Returning to a Computer After A Week In The Desert

Coming back to a computer after a week in the country. 30 miles from a city.

Everything looks vibrant. Fonts are so crisp and different from each other. It amazes me that so many can exist on one screen and evoke a different context separately. Everything looks smoothly tactile. Crisp. Like infinitely heavy, infinitely thin paper that glows from within itself.

Sep 23rd, 2014

Fix to Enable Display Features - Google Analytics iOS SDK

In the official Google Analytics iOS SDK documentation, this function call will enable Display Features in your app:

id tracker = [[GAI sharedInstance] defaultTracker];
// Enable Advertising Features.
[tracker set:allowIDFACollection value:@YES];

Sadly, this causes an error, as allowIDFACollection is an invalid key. The real way to enable display features is to call this method:

[[GAI sharedInstance].defaultTracker setAllowIDFACollection:YES];

Save yourself a few minutes of frustration. Build and be happy.

Sep 17th, 2014
Logo Exploration for Nareta

Logo Exploration for Nareta

I pulled out Paper last night to put down a few ideas about a logo for my most recent project. It bounces between text and audio, so I was thinking about showing that dichotomy or conversion in the logo image.

Nightly Drawing #1

Aug 26th, 2014

That Feeling of a Pending Break-Through

From The Verge, This is Uber's playbook for sabotaging Lyft:

Using contractors it calls "brand ambassadors," Uber requests rides from Lyft and other competitors, recruits their drivers, and takes multiple precautions to avoid detection. The effort, which Uber appears to be rolling out nationally, has already resulted in thousands of canceled Lyft rides and made it more difficult for its rival to gain a foothold in new markets.

As dirty as these tactics sound to me, I can't help but feel anticipatory about the response from Lyft. They have two options, as I see them:

  • Kneel under the pressure and be subsumed by Uber.
  • Rise to the challenge and find a way to navigate a way through Uber's barrage.

If Lyft can find some technology or method of weeding out all the bad Uber requests from the good customer requests, they will not only have found a way to stay afloat as Uber dumps all over them. They will also have found a great tech advantage that will undoubtedly be useful in everyday business.

Imagine something like Akismet, but for customer service calls or service requests. That tool might be a business in itself, but it would definitely get Lyft up and out of this hole Uber is digging them.

Aug 14th, 2014

House-elf Bias


...it is the far easier cognitive task to assume that my comfort is the result of cosmic favor rather than the unseen efforts of the people around me.

A fantastic read and observation, if you are amenable to Harry Potter references.

Bonus points for having a very nicely designed site, and nice typography.

Aug 13th, 2014

Pingbacks Aren't Coming Back

I enjoy reading the Stratechery blog, but I think it's time it got rid of its pingback display.

Even looking at one of Thompson's great posts on the Uncanny Valley, there are sixteen pingbacks recorded and displayed. One is a link by Thompson himself in a podcast description, and the other fifteen are spam.

Pingbacks are broken, and I think they have been for a while. This just brought it to the surface for me. WordPress is great, but I think it could do without this feature.

Aug 8th, 2014

ID My Pill for iPhone or How to Use Fear as a Motivator

Protect your family and yourself. Identify your pills before you take them. Snap a photo of any prescription drug using your built-in iPhone camera and identify it immediately.

Though, as @_ybvk pointed out, this app is "actually using technology to do something better than taking snaps and adding colors to them," it still makes my skin crawl a bit.

Fear is a great motivator, but that doesn't mean you should scare people on medication and then charge them $5 for an OCR app.

Also, I'd just like to point out that I don't believe this will catch all possible medications simply based on visual appearance.

Aug 4th, 2014
Error Tracking In gatrack.js V1.2

Error Tracking In gatrack.js V1.2

I'm releasing a new gatrack.js this week (previously introduced back in January). Amongst some minor fallback improvements, the main changes are:

The ability to track client-side errors in an efficient and referential way is invaluable. I've seen a few options out there, but none that allow me both to have absolutely no worry about keeping it running and to have error data tied into the visitor's browsing history elsewhere on my sites.

By putting the error details into a Google Analytics event, you can immediately tie it to the rest of the user's session history. Gatrack.js also goes a step further than providing you with just the available error details - it includes the time at which the error was triggered (relative to page load).

Enabling error tracking in Google Analytics with gatrack.js is a one-liner. All you need to do is place the following snippet in a script tag so that it will be the first code executed on your page, preferrably in the head of your document.

// One-liner, minified (use this one!)
(function(g,a,t,r,a,c,k){g[r]=g[r]||{};g[r][a]=t.getTime();g[r][c]=[];g[c]=function(m,u,l,c,e){this.gatrack.onerror.push([m,u,l,c,e])}})(window,document,(new Date()),'gatrack','timer','onerror');

Here is the snippet, expanded for clarity:

// Expanded, so you can see
  g[r] = g[r] || {};
  g[r][a] = t.getTime();
  g[r][c] = [];
  g[c] = function( m, u, l, c, e ) {
    this.gatrack.onerror.push([m, u, l, c, e]);
})(window,document,(new Date()),'gatrack','timer','onerror');

This snippet will allow you to record errors that are raised even before any other JavaScript code is executed. The gatrack.js library records errors in the following format:

  • category: 'Recorded Error'
  • label: The error's message string
  • action: 'Error line:column(url)'
  • value: Time of occurence after HTML load (in seconds, rounded to nearest hundreth)

I know this error tracking method has allowed me to chase down a couple IE bugs, so I hope it will help others increase usability for their users. It also translates into a really direct Key Performance Indicator for businesses to tap into. Hint: I'm already doing that as well.

Tweet @jbckmn if you use it!

Jul 31st, 2014

Stellar.org released: Bitcoin as transactional layer

I wrote previously about Stripe's great post on bitcoin as a transactional layer instead of an actual currency. Today they are realizing that fantastic idea with Stellar.org.

Stellar is a decentralized protocol for sending and receiving money in any pair of currencies. This means users can, for example, send a transaction from their Yen balance and have it arrive in Euros, Yen, or even bitcoin. We’re expecting to support the usual categories of transactions: payments to a merchant, remittances back home, or rent splits with a roommate.

If you want to try sending me 'stellars,' my Stellar.org username is josh. I'll probably give some back.

Next Page »