May 14, 2014

I Have Opinions about Apple's Rumored Acquisition of Beats by Dre

It's been formally requested in our office that we institute a moratorium on #beatstweets, but I've had a note to blog this post by Shahrzad Samadzadeh since last July when iOS 7 was announced, and with the recent rumors of Apple's acquisition of Beats, her comments are more relevant now than they were even then.

Samadzadeh's entire post is worth reading, and please do, but I will excerpt two points here:

To paint a simplified picture of the industry, as I know it: relatively low-priced accessories like sunglasses and wallets are often the point of entry for new relationships between customers and brands. Higher priced accessories like shoes and bags become a manifestation of a tentative commitment, and the clothes themselves are an indication of a more permanent alignment between the person and the stories and products generated by the company. To put this in technology terms: UI is sunglasses, the most accessible piece of technology is shoes and bags, and the ecosystem is clothes.

Lower-priced accessories are important to the fashion industry, and they change style constantly. With every release cycle, the new model has to be so compelling that customers volunteer to adopt it. It has to make the old style look old, and it has to get people talking. Designers, especially designers of digital products, often work towards a Platonic ideal of classic design that can stand the test of time. In fashion, there is no ideal. There are ideas of what is timeless and classic, and those ideas (think “little black dress”) are reinvented constantly.

(Seriously, please, read her entire post, even if it means you're not going to finish this one! Samadzadeh worked at a fashion company, interned at Adaptive Path and is wrapping up her Masters in interaction design from Carnegie Mellon.)

During a recent Samsung/Apple trial (I am honestly not sure which one, I don't follow this stuff as closely as I used to!), several of Apple's internal memos and presentations were revealed. One included this slide, which was obviously not meant to see the light of day:

Apples internal fy14 planning doc shared during the samsung trial shows 1

What Apple has right now is a line-up of high end laptops, iPads and iPhones all of which exhibit what Samadzadeh references above - "classic design that can stand the test of time." It's a relatively pleasant problem, but it's a real one. The meme of "Apple is becoming a fashion company" has been percolating through tech blogs, and while (as Samadzadeh notes) "A UI is not a wallet," Apple is positioning themselves as a high growth company by taking cues from the fashion industry.

Beats headphones make people feel cool, Apple wants people to feel good when using their products. Making people feel cool is Apple's strongest competitive advantage, and I think it's a significant one. Amazon has an app store where they control the pricing and cheap (or free) apps and media do well, this drives Kindle sales. Google has an app store where free ad-supported apps and media do well, and paid apps do not, and this drives ad revenue and market share. Apple sells great products, and they need to shore up their flank. This is most of what the Beats deal is about, and we should expect more like it over the next few years.

Maybe the Beats deal doesn't close at all, but it's not hard to extrapolate what will happen next: Improved software & services that compliment hardware acquisitions that offer multiple points of entry to the Apple brand. Maybe Beats becomes attached to a cheaper iPhone, a wearable "iPod mini" that connects to Apple's rumored Healthbook service, or even an iPad that comes with streaming media services that leave Amazon and Google in the dust.

And one more thing...

Jimmy Iovine and Dr. Dre will hopefully be coming to Apple, but I'm actually much more curious about the career of Ian C. Rogers. He's worked at Grand Royal, which was the first record label to offer streaming media on their own web site (if memory servers, they were using Xing's streaming mp3 servers - which at the time was an exotic format). He's been at Nullsoft where they took the desktop mp3 player mainstream, Yahoo! where they grew the subscription streaming music market several times over, Topspin where they brought to market the first end-to-end toolkit for artists to sell music direct to their fans, and now Beats.

Have you used iTunes recently? If I want to download and play a podcast, it takes live seven clicks. Apple has been slowing peeling out the mess of features built into what was once their flagship software (Photos to photo stream, books to iBooks, etc.) but it needs a complete reimagination. Even my biggest Apple-fan friends use rdio or Spotify; I've been roundly mocked for buying a subscription to iTunes Match (which I like!) If Apple doesn't do reboot iTunes, someone else will. And the best person in the world to have this job is Ian Rogers.

And there's no reason this ethos should stop at music. Earlier this year, Manton Reece wrote that Apple should acquire Beats and put the team to work on the App store as well. As an app publisher & software developer, I love that idea too.

October 25, 2013

Bagels, In Order

A superior remix of Bagels, In Order: Sesame Everything Pumpernickel Cinnamon Raisin Rye Salt Whole Wheat/Whole Grain Onion Garlic Poppy (Via NZLE.)

July 1, 2013

Fifty Years of ZIP

Half a century ago today, the United States post office launched a massive and multi-faceted campaign behind its latest innovation: the ZIP code. This wasn't a matter of just a few press releases and posters; there were Miss ZIP beauty pageants, a cartoonish Mr. ZIP "spokesperson," lunch boxes, public service announcements, and even a comic strip ("Mr. ZIP and the Five Little Digits.") What now feels like an ubiquitous part of our daily life -- not just our mail -- began as a bit of persuasive magicking by a government department targeting a public that exactly zero interest in memorizing more numbers.

I wrote about the fascinating, hilarious, and utterly bizarre story of ZIP codes in The New Republic awhile back, and, today, I spoke about it on "Take Two, " a program on KPCC, a public radio station in southern California; its bandwidth covers certain well known ZIP codes.

Here is a bit from KPCC:

Today, after 50 years, there are still conspiracy buffs who see the codes, along with social security numbers, as part of some spooky new world order. Other more moderate critics worry they can be used to discriminate because they can identify groups by ethnicity and income. Anna Clark says she's a fan of the post office, and of zip codes in general, but has some reservations.

"Zip codes serve a purpose," she said. "They help connect us. What I have a problem with is when zip codes are used to separate us in a way that exacerbates inequalities that already are a really big problem in our country."  

On this 50th anniversary, spend a moment to ponder the zip code, and maybe be glad that the experiment to expand from five to nine numbers, which the post office introduced in the early 80s, only took hold for business mailers. 90211, no problem. 90211-1809. Just too much, thank you.

Intellectual jokes

Tyler Cowen at Marginal Revolution picks up on a Reddit thread that asks "What's the most intellectual joke you know?" I've always been fond of this one:

Q: What does the "B" in Benoit B. Mandelbrot stand for?
A: Benoit B. Mandelbrot.

And this one:

Knock knock.
Who's there?
Knock knock.
Who's there?
Knock knock.
Who's there?
Knock knock.
Who's there?
Knock knock.
Who's there?
Knock knock.
Who's there?
Phillip Glass

Two of the current favorites in the Reddit thread are:

Jean-Paul Sartre is sitting at a French cafe, revising his draft of Being and Nothingness. He says to the waitress, "I'd like a cup of coffee, please, with no cream." The waitress replies, "I'm sorry, Monsieur, but we're out of cream. How about with no milk?"


It's hard to explain puns to kleptomaniacs because they always take things literally.

Tags: lists

The Times Seeks a “Dialogue” About Bikes Clogging NYC Streets

Danger! Danger! NYC streets may get clogged with bikes! Photo: Doug Gordon/Brooklyn Spoke

Who can resist this tasty New York Times linkbait? Not us. The paper wants responses to this preposterous rant from reader Gary Taustine. Mr. Taustine sees Amsterdam, with its 32 percent bike mode-share and minuscule pedestrian death rate, as a cautionary tale for NYC, with its 1 percent bike mode-share and 150+ pedestrian deaths per year:

The horrendous bicycle congestion in Amsterdam (“The Dutch Prize Their Pedal Power, but a Sea of Bikes Swamps Their Capital,” Amsterdam Journal, June 21) portends my worst fears for New York City if Mayor Michael R. Bloomberg’s crusade to promote cycling at any cost is not scaled back by his successor.

In addition to the ubiquitous tombstone-like parking stands for the new bike-sharing program, Citi Bike, more and more bikes are appearing on our sidewalks, clumsily chained in bunches to anything stationary, cluttering pedestrian areas and complicating emergency services, trash collection and sanitation.

The density and vertical nature of our city mean that hundreds of cyclists could live, and park, on a single block, leaving neighborhoods with all the charm of a junkyard.

Cycling should be neither deterred nor promoted, but certainly not singled out as a privileged mode of conveyance whose operators enjoy segregated lanes, free parking and exemption from the licensing, insurance and safety precautions (like helmets) required for other two-wheeled vehicles such as motorcycles.

One shudders to think of all the motorists who could live on a single block if we designed traffic lanes for motor vehicles, let people risk their lives by driving without a helmet, and gave away street parking for free, leaving neighborhoods with all the charm of a garage. New York would choke on traffic!

It would be even worse if we forced developers to build parking, subsidized massive garages, and let people kill other people with their cars without any consequences. Oh right, we do all of that and it causes actual problems.

The Times will publish responses to the imaginary problem of too many bikes (email in the Sunday paper. But it will also grant the last word to Mr. Taustine, who gets to submit a “rejoinder” to the reality-based perspectives on urban transportation planning that are heading his way. The deadline to submit is tomorrow.

The Ballad of Jeff Francoeur

Well, he came up and hit .432
For a month his talent looked so true
And there’s always hope when you’re brand new
This is the ballad
Of Jeff Francoeur

And he did not walk but he tried real hard
And as long as hits escaped the yard
He still deserved a baseball card
This is the ballad
Of Jeff Francoeur

When you still don’t walk and your average falls
And you swing at all of the pitcher’s balls
It shouldn’t be a shock when your progress stalls
This is the ballad
Of Jeff Francoeur

So the Braves said bye and he joined the Mets
And for quite a while there were no regrets
But soon enough, doubters won their bets
This is the ballad
Of Jeff Francoeur

It was no shock when the Royals called
And into the lineup he was installed
Another good start, the GM was enthralled
This is the ballad
Of Jeff Francoeur

The press he gets is second-to-none
If smiles counted, he’d be number one
But if you look at the stats, he seems kinda done
This is the ballad
Of Jeff Francoeur

Oh, lefties he hits and balls he can throw
And maybe just maybe his patience will grow
He’ll suck someone in and he’ll put on a show
This is the ballad
Of Jeff Francoeur

Then fifty games later, the luster will fade
He’ll go 0-for-40, they’ll look for a trade
Another team desperate, and they will be swayed
This is the ballad
Of Jeff Francoeur

Repeat it again, he’s still young, there’s still hope
Will he turn it around? Smart money says nope
Declining skills are a slippery slope
This is the ballad
Of Jeff Francoeur

Joe Maddon Trolls Miguel Cabrera

BACKSTORY: After the Detroit Tigers acquired the final out against the Tampa Bay Rays last Friday, third baseman Miguel Cabrera mimed the signature “arrow shot” Rays closer Fernando Rodney performs after each save (a gesture that appears to be an oblique tribute to his late father).

On Saturday, Miguel Cabrera faced Fernando Rodney and the Katniss-esque flamethrower had a few pitches go high, one going high and tight. Cabrera did not appreciate the pitches.

On Sunday, Tigers pitcher Rick Porcello of the 4.7% BB-rate hit his second batter of the season. It was with two outs in the first inning; it was the first pitch to Ben Zobrist. Both dugouts received a warning.

Then, in the bottom of the 8th, Miguel Cabrera came to the plate.

JOE MADDON, THUGGIN’: Joe Maddon had two relievers warning. He had his 8th inning setup man, Joel Peralta, warming in the ‘pen. He had his hard-throwing karate-master, brawl-champ, GIF-via-fight machine Kyle Farnsworth warming.

Kyle Farnsworth entered to face Miggy. Then this happened:

Let us put aside Miggy’s career numbers against Farnsworth (which lean in Miggy’s favor) and likewise put aside Miggy’s career splits against GB/FB pitcher-types (which weigh in Farnsworth’s favor, especially over extreme FB pitcher Joel Peralta). Let us put those items in a separate bucket and consider the message of this matchup.

Maddon brought in his enforcer and then did what he always does: Break the unwritten rules. He has historically shown a predisposition against HBP arms races, and he furthered that reputation on Sunday. Like a mobster who shows a pistol but does not look at or talk bout the firearm, Maddon opened the door for fear to enter Cabrera’s mind (see how Cabrera twists in, anticipating a beanball on the first pitch from Farnsworth) and also blasted a message to Tigers manager Jim Leyland. It would appear the two managers play different games.

Maddon saved his more direct, less-nuanced messages for the post-game interview:

[Miguel Cabrera] is outstanding, he’s wonderful. I just wish he wouldn’t cry so much.

If that’s not MLB-level trolling, then what is?

The Smith restaurant to open in Nomad?

Via Experience Nomad, we read that The Smith may be opening a 4th location in NYC on 27th Street near Broadway. A confirmation call to their publicist was not returned in time for this post. The Smith has locations in the East Village, Lincoln center, and midtown east, and is a cousin of Jane restaurant in Soho. They serve breakfast, brunch, lunch and dinner and have a full bar. Here are the menus. The Smith gets 3.5/5 stars on Yelp at all three locations and seems most popular for their brunch. More to come as we get it. Almost everything is under scaffolding on the south side of 27th Street over to Broadway, but after some scouting here are some possible locations: 1) The corner of 27th and Broadway is a great space, with frontage on 27th and Broadway. It used to be the home of X-tensions, a wig/hair store. 27th and broadway 2) On 27th Street between 5th and Broadway there is some unoccupied space that could also be a candidate for a new restaurant.

27th between 5th and broadway

The Hundred Dresses: Day 29

I do appreciate the irony of these next few photos being slightly out-of-focus:

Echino glasses Vogue 9929 front

Echino glasses 9929 bodice

This is another Vogue 9929, of course, and it’s in that heavy Japanese Echino fabric. I’ve only sewn with it a couple of times but I really like it. It’s easy to sew with and very comfortable to wear. The only downside is that the whites are all more on the “unbleached/ecru” side, so if you need your whites sparkling, Echino may not be the fabric for you. (It looks like a variant on this print is still available, too.)

I bought what seemed like a lot of this fabric quite some time ago, and made a nice-enough pleated skirt out of about half of it. Which left me just slightly under what I needed for this dress, as you can see from the visible sliver of the selvage at this underarm seam:

Echino glasses Vogue 9929 zipper

Here it is close up:


A better example of me going “eh, what the heck, nobody will notice and if they do they’ll surely be polite enough not to say anything” cannot be found. You can also see that there wasn’t enough for self-fabric bias, so I resorted to good ol’ double-fold straight from the package.  (Oh and that zipper is about a C+.)

Here’s the back view:


If you went by sheer number of approving comments, this is probably the most popular dress I own. I am regularly stopped on the street and asked about it (which I use as opportunities to evangelize the many many benefits of sewing).

(If you want to see this being worn, I posted about it here. I also have this fabric in green.)

June 30, 2013

GIF of Prince Fielder at the Request of Author’s Brother-in-Law

Because the present author’s brother-in-law is both a medical doctor of some local repute and also does things like “own a house” and “shower daily,” there are few occasions upon which he (i.e. that same author) is able to demonstrate competency in areas where that brother-in-law does not.

The capacity both to manufacture animated GIFs and also embed them, then, is perhaps one of the few skills the author has acquired which remain outside of his brother-in-law’s purview. Accordingly, when the brother-in-law in question — a Tigers fans, it should be noted — made a passing remark about Prince Fielder‘s towering home run from Friday at Tampa Bay, the author regarded it as an invitation to engage in the lamest brand of display behavior currently known to science.

So, for the benefit of Jason, here’s a GIF of Fielder’s home run from Friday that required almost no effort for your sister’s husband to make and embed:

Fielder 2

And here’s a second GIF of where Fielder’s homer struck the Tropicana Field catwalk and was also really simple for the author to make.

Fielder Catwalk

Data Journalism is improving — fast


by Frederic Filloux 

The last Data Journalism Awards announced last week at the Global Editors Network News Summit in Paris established one important fact: The genre is getting better, wider in scope and gaining many creative players.

Data Journalism is thriving. This the most salient conclusion from the second edition of the DJ Awards organized by the Global Editors Network and sponsored by Google. I was part of a 20 persons jury, chaired by Paul Steiger, founder of Pro Publica. We had to choose among a short list of 72 projects divided into seven categories: data-driven storytelling, investigation, applications (all three for large and small media), and data-journalism section or website.

Here are some quick personal findings.

#1: Data-journalism is a powerful storytelling tool. The Guardian won the Storytelling Big Media category, with this compelling graphic showing the situation of gay rights for each state of the US. It did so by analyzing a range of stats and administrative rules or laws such as hospital visits, adoption, schools or housing. (In half of US states, gays have no clearly stated rights). On that matter, no story could have spoken more loudly.


In a different way, Thomson Reuters collected another prize for its amazing Connecting China project that looks like a visual LinkedIn for the PRC elite. It’s a huge, 18 months endeavor, built on more than 30,000 connections between Chinese power players.


#2: Data-journalism extends well beyond the usual economical/social topics. One DJA 2013 laureate displayed the explanatory power of good data-journalism. The French site Quoi? explored aspects of the art market. In its Art Market for Dummies (available both in French and in English), Quoi? explains who are the most bankable artists (since 2008, it’s Picasso, Warhol, Zhang Da Qian); it also shows why it is a terribly dead-male-dominated business; and it illustrates the rise of Chinese artists. It’s both entertaining and information-rich.


Another French company, WeDoData collected an award for a great app showing the (terrible) state of female/male parity in France, in a smart, user-friendly package commissioned by France Television.


Another great example of clever data journalism expanding to society issues is the Great British Class Calculator presented by the BBC (it won the Data-driven apps category). The project started with a survey of 161,000 persons, conducted with several universities. This helped define seven social classes ranging from the Elite, to Precarious Proleteriat, or more imaginative New Affluent workers or Technical Middle Class.


#3: Tools can be surprisingly simple. In many instances, data-collection and analysis are performed using relatively simple tools such as large Excel or Google Docs spreadsheets (the latter being excellent at scraping data repositories — just google the terms to find tons of resources on how to use those. The Argentina newspaper La Nación, winner of the Data-driven Investigations Big Media category, explained in its DJA filings how it retrieved 33,000 records showing the expenses of senate members by using sets of Excel macro commands.


For its Art Market for Dummies project, the French multimedia journalist Jean Abbiateci explained how he scraped the ArtPrice database (links are mine):

For scraping data, I used Outwit, a amazing Firefox Add-on. This is very useful to convert a pdf file to an Excel file. I used Google to refine, to clean and merge my dataset. I used the Google API Currency Converter for my uniform monetary values. Finally, I used D3.js and Hichcharts.js. I also reused open source code shared by Minnpost and a software developer called Jim Vallandingham.

The projects mentioned above are just examples. A visit to the GEN Data Journalism section is well worth your time. For once, the digital news sector has fostered a healthy, creative segment, one that relies a lot on small agile companies. I find that quite encouraging.

Related columns:

  1. Can Data Revitalize Journalism ? Get a demo of a Bloomberg terminal. You’ll be is blown away by the depth of available data. Thousands of...
  2. The Need for a Digital “New Journalism”   The survival of quality news calls for a new approach to writing and reporting. Inspiration could come from blogging...
  3. The real cost of genuine journalism Updated with a video on PolitiFact Guide to Fact-checking The idea for this column came to me last March; I...

Xcode Interface Builder Tips

A couple of quick tips when using Interface Builder that I picked up whilst watching the WWDC 2013 videos. It turns out that whilst these are new to me they are not actually new. I do not know when these were introduced but they work fine in the current public release of Xcode (v4.6.3 at time of writing).

Selecting An Object

The first tip addresses an annoying situation when you are trying to select a specific object in the view hierarchy. Consider a table view controller containing a prototype cell view which itself contains a number of labels:

It can be tricky to click-on a specific object such as the table view cell or the table view without getting one of the UILabel objects by mistake. One option is to find the object you want in the document navigator window:

However a much easier way is to control-shift click in the scene. This displays a popup window with the full view hierarchy for wherever you click. For example, in the screenshot below I control-shift clicked with the mouse pointer over the “Country” UILabel:

It is now simple to select the table view cell or the table view without resorting to the document browser.

Viewing Layout Metrics

The second quick tip allows you to view the relative spacing and positioning of a view. With a view selected, press the Option key and move the mouse pointer over the scene in Interface Builder. As you move around a set of guides are displayed showing the number of pixels from the selected view to the view you are currently hovering over. For example, with the Country UILabel selected and the pointer over the table view the following is displayed:

Useful for those situations when you want to align and carefully position a number of views.

Xcode Interface Builder Tips was originally posted 30 Jun 2013 on Copyright 2013 Keith Harrison.

June 29, 2013

In Palestine pt.6


This is an 8 track railroad crossing in Lyd, a historically Palestinian city within pre-67 borders Israel (called simply "48" by most Palestinians) which is very poor and is undergoing a heavy process of Judaization (the structural and ideological process of converting more and more parts of Palestine into Jewish-only areas). This crossing is the ONLY entry into "the Station"—the name of the largest Arab neighborhood. Over 300 trains pass by in a day from all directions, so Palestinians have to wait for 10 minutes, 20 minutes, 30 minutes, or more EVERY time they want to cross in and out of their neighborhood. This is the most dense train crossing in all of Israel, conveniently structured to block off the Palestinian neighborhood.

multi-grain pizza with sirloin, arugula pesto + sundried tomatoes


This week was a rollicking roller coaster, and next week proves to be equally as exhilarating, if not exhausting. From Sophie’s follow-up vet visit {please cross all applicable body parts}, to research and three-hour meetings, to an endless stream of calls, I’m going to need vats of coffee in preparation for the ride.

Right now, all I want to do is curl up with a video and my kitty, whilst sipping sparkling water and hoovering fresh slices of homemade pizza. You’ll find me seeking quiet and recharging the proverbial batteries, getting ready for the ticking, ticking.

INGREDIENTS Multi-grain pizza dough recipe couresty of Roo Cakes. Arugula pesto recipe courtesy of The Kitchn.
For the multigrain pizza dough (You can honestly get dough at the store. Don’t let this stress you out. Most markets sell pizza dough, as do many pizzerias)
2 cups warm water (approximately 110°F)
2 packages rapid rise yeast
4 tsp cane sugar
2 tsp salt
½ cup millet
½ cup sunflower seeds
½ cup rolled oats
¼ cup ground flaxseed
½ cup wheat bran
5½ – 6 cups all-purpose flour
4 tbsp olive oil

For the arugula pesto
1 1/2 cups arugula
3/4 cup chopped fresh basil
3/4 cup toasted walnuts
1/2 cup extra-virgin olive oil
2 cloves garlic, quartered
1 lemon, zested and juiced (about about 2 tablespoons juice)
1/4 tsp kosher salt, plus more to salt pasta water
3 tbsp grated Parmesan, plus extra to serve
Freshly ground black pepper, to season

For the ground beef
1/2 pound of lean ground sirloin
Salt/pepper to taste
1 tbsp of olive oil

Additional ingredients for the pizza
1 tbsp olive oil
1/2 cup of sundried tomatoes packed in olive oil
3/4 cup packed arugula

For the multigrain pizza dough: In a large bowl of a stand mixer fitted with a paddle attachment, combine warm water and yeast. Let sit for 5-10 minutes until the yeast dissolves. Add all other ingredients except the flour, and stir to combine. Now, switch to the dough hook. Add the flour one cup at a time (on medium speed), slowly, allowing the flour to incorporate into the dough. Depending on the time of year and your flour, you might get a dough that’s too dry. If so, add 1 teaspoon of water at a time until the water is absorbed. If your dough is too wet, add a tablespoon of flour at a time until the dough is less sticky and more elastic. Beat until the dough pulls away from the sides of the stand mixer and is elastic and not sticky (approximately 6-10 minutes)

Place the dough in a slightly greased large bowl. Cover the bowl with a damp cloth and leave in a warm spot for 3-4 hours to rise, doubling in size.

For the arugula pesto: In the bowl of a food processor, blend arugula, basil, toasted walnuts, olive oil, garlic, lemon zest and juice, salt and a few grinds of pepper until well combined and smooth. Feel free to add extra olive oil if the pesto feels too thick or chunky.

For the sirloin: Add the olive oil, beef, salt and pepper to a medium-sized skillet, and cook until the beef is brown on all sides (5-6 minutes). Drain, set aside.

Making the pizza: Preheat the oven to 500F. You will have oodles and oodles of pesto, so you will only need 1/2-3/4 cup of the pesto for the pizza. I tend to make pesto in large batches so I can use during the week, so feel free to store the rest of your delicious mixture in an airtight container, and use during the week for pasta, chicken, sandwiches, etc.

On a baking sheet covered with parchment paper, drizzle pizza dough with 1 tablespoons oil and stretch or roll into a 16-inch-long oval. Add 1/2-3/4 cup of the pesto, leaving a 1/2 inch border around the dough. Add the sirloin, sundried tomatoes, and cook for 13-15 minutes, or until the crust is golden brown.

Once out of the oven, allow to cool for 2-3 minutes and top with the fresh arugula. Slice + serve!


Who the hell lets their babies sleep in an alleyway?

Who the hell lets their babies sleep in an alleyway? is a great way to view Web development reference materials (via webappstorm).

Human rights begin in small places

“Where, after all, do universal human rights begin? In small places, close to home – so close and so small that they cannot be seen on any maps of the world. Yet they are the world of the individual person; the neighborhood he lives in; the school or college he attends; the factory, farm, or office where he works. Such are the places where every man, woman, and child seeks equal justice, equal opportunity, equal dignity without discrimination. Unless these rights have meaning there, they have little meaning anywhere. Without concerted citizen action to uphold them close to home, we shall look in vain for progress in the larger world.”

– Eleanor Roosevelt

Via Moyalynne

June 28, 2013

Vesper and DB5

I’ve been remiss in not mentioning John Gruber, Brent Simmons and Dave Wiskus’s little gem of a notetaker, Vesper before now. It’s a smart, crystal clear piece of software that defines a very specific problem — quick, frictionless capture of ideas — and polishes the heck out of it. Maybe even more interesting is the way that the product was shaped: developer Brent Simmons created a CSS-like method of manipulating the display variables — color, spacing, fonts — that his colleagues could edit independent of the main code. This is the next step for native app development; abstracting the display layer so that designers can have direct access. Simmons calls his system “DB5” and you can read more about it here. You can also learn more about Vesper.

To follow me on Twitter click here.

Q&A: Noah Syndergaard, Mets Pitching Prospect

Noah Syndergaard made his Double-A debut for the Binghamton Mets this past Sunday. In six innings against Erie, he allowed two runs on five hits, he walked one and fanned seven. How did the right-hander look? According to a scout who was at the game: “The kid is 20, but it wouldn’t surprise me if he’s pitching in New York next season. He‘s a horse.”

The 6-foot-6 prospect joined the Mets’ stable last December as part of the R.A. Dickey deal. Drafted 38th overall in 2008 out of Legacy High School in Mansfield, Texas, Syndergaard (pronounced SIN-der-guard) came into this season rated the team’s No. 3 prospect, behind Zack Wheeler and Travis d’Arnaud. Prior to his promotion, he logged a 3.11 ERA in 12 starts for High-A St. Lucie.

Syndergaard discussed Sunday’s outing — as well as his repertoire and a recent mechanical adjustment — prior to Monday’s game in Portland, Maine.


Syndergaard on his repertoire: “I throw a fastball, a curveball, a slider and a changeup. I primarily throw four-seam fastballs, although I’ll mix in a few sinkers. Yesterday, in the first three innings, I was sitting 97 and touching 98. My best secondary pitch is probably my curveball. Last year is when it really started to develop. Something just clicked to where I was able to maintain my arm speed and get max revolutions on the ball. Now I’m anywhere from 78 to 82 mph with it. My changeup is a four-seam circle

“The slider is something the Blue Jays toyed with a bit last year, but more [as] a hard cutter — that‘s what they were trying to do. Now I just kind of grip it a certain way and cut it at the very last moment. I consider it a slider, though. The wrist action is pretty much the same, just not as drastic. It ranges from 84 to 87-88.

On his mechanical changes: “I changed my arm angle a little bit before my last start in St. Lucie. My velocity was about the same as last night; I was topping out at 98. I’m using my core a lot more, and also my legs. [St. Lucie pitching coach] Phil Regan has kind of toyed with my mechanics a little bit. When he first got a hold of me, I was kind of on my heels and not using my legs as much as I should. He got me more on my toes and driving toward home plate. Instead of falling off the pitch, I was driving through the pitch. And instead of my arm being directly over the top, I dropped it down just a little bit. I’m more three-quarters than over the top now. I have a little more velocity, and a little more run on the ball.

“The whole back side of my body is shot today. It’s pretty sore. I have good muscle soreness, which means I was using my legs quite a bit; I was using my body to the fullest advantage. You don’t gain velocity from your shoulder. You get it from your legs and your core. You’ve got to have a strong base.

“I only threw two bullpens in spring training — that’s because I pulled my lat — so they didn’t get a good feel for my mechanics down there. It was maybe the second-to-last day of spring training that I threw in a game. From there I went to full-season ball, and Phil Regan and I started working together. He and I were in constant contract throughout the course of my starts. One day we’d do touch-and-feel, where we’d work on my delivery, and the next day would be my side work. He really harped on me using my legs more.

“When a team has runners on base is when they get to me the most. When I’m out of the windup, I have one thing in mind, and that’s the catcher. Having a runner on first base kind of takes away from my focus to home plate. My stuff can be different [out of the stretch]. With a runner on first, sometimes I’ll be a little too quick to home plate, and that will sacrifice either velocity of location. That’s something I need to work on.”

On his Double-A debut: “They sent me up on Saturday, and I traveled all day, so I didn’t really have a lot of time to think about the game. I didn’t have a lot of time to be nervous. I pretty much woke up and went to the park. I didn’t really get into my own head and feel nervous. Or maybe I was so nervous that I just tuned it out.

“We went over the hitters, but it was the first time I had faced any of them, except for the Suarez kid [Eugenio Suarez]. I had played against him last year in the Midwest League. I just went out with the mindset of locating my fastball to both sides of the plate, working in my changeup from there, and then, second time through the order, starting to mixing in my curveball and slider. I basically trusted Blake [Forsythe]. I had never thrown to him before, but he and I were on the same page the entire game. I didn’t shake him off once.

“I gave up a single to the first hitter. The pitch was near the middle of the plate, although it was down. He then stole second. I think we could have gotten him, I just didn’t make that great of a pitch. I was pretty quick to home plate — I checked later and my time was 1.2 [seconds]– but I kind of pulled the pitch to Blake’s right side and he didn’t have a good chance to get him from that angle.

“After that, I kind of got into a groove. I ended the inning by striking out [James McCann] with a slider. We started him off slider, which he swung at. Again, I was just trusting Blake, because he knows the hitters a lot better than I do. I don’t remember the entire sequence, but I know we started slider and finished slider. Both were out of the strike zone, but they were good enough pitches that he chased.

“I had a good second inning, but I don’t know if I can remember too many details. I think the two strikeouts came on fastballs. I had a little longer inning in the third, where I gave up a couple runs. I got ahead of [Luis Castillo] 0-2 or 1-2 and threw him a curveball, and he poked it down the line for a triple.

“The first three innings I was working up in the zone more than I’d like, but in the next three I settled down and started locating fastballs at the knees. The first few innings, the umpire was giving me the higher strikes. Their hitting coach obviously thought they were too high, because the umpire tossed him from the bench. I think that happened right after the triple, but I wasn’t really paying much attention.

“I deserved the runs I gave up that inning. On the triple, he just hit it where no one was, and it rolled all the way down the line. It was a decent pitch, although I probably shouldn’t have thrown a curveball in that situation. Then there was another base hit, on a changeup. After that there was a double, but I got out of the inning okay. I got a ground ball to third base, then a fly ball where the runner tagged and got thrown out. That was a really clutch play.

“I felt relieved to get out of it. Last year, I had trouble when I started to accumulate a lot of pitches in an inning. The Blue Jays were kind of tight on how many pitches you could throw in an inning. Twenty-five and you were done. You can kind of feel the pressure when you see someone warming up in the bullpen. You know you’ve thrown a lot of pitches, so you  kind of start pressing a little bit.

“In certain situations, I’ll pitch to contact. When there’s nobody on base, I’m just trying to locate my pitches, and if I happen to strike the guy out, that’s fine. If I have a runner on first base, I’ll throw a sinker away to try to get a ground ball double play. In the fifth inning, with a runner on first, I got a ground ball to second base. That’s exactly what I was going for. It was one of the pitches I executed well.”

Grace Paley

Meredith Stern Grace Paley $4 Grace Paley, 1922–2007. Poet laureate, educator, peace activist, feminist, short story writer. "It is the responsibility of the poet to say many times, there is no freedom without justice and this means economic justice and love justice." 2 color offset printed poster 11"x17" unsigned/unlimited edition 02paley_400.jpg

Setting Tile

I checked this out of the local library when getting ready to tile a full bathroom floor and shower, and ordered my own copy before returning it. It’s not quite a reference, and it’s shorter than a bible, but it’s comprehensive.

The author does a wonderful job of explaining processes and tips. The information is presented logically, and is a pleasure to read. (This sets it apart from other how-to books that require multiple readings before you comprehend the information.)

I have remodeled one bathroom before finding this book and one after. It saved a lot of work and worry the second time around.

(I also recommend John Bridge Tile Forum for great FAQs and friendly advice.)

-- Dave Rudolph

[Author Michael Byrne also has a few tiling how-to videos at the Fine Homebuilding site. -- Mark Frauenfelder]

Setting Tile
Michael Byrne
1995, 260 pages

Available from Amazon

June 27, 2013

Saying Goodbye to Google Reader

Barring a miraculous, last-minute reprieve from its corporate parents, Google Reader will shut down in just a few days. I’ve been trying out a few alternatives: Feedly, Feedbin and Digg Reader (in beta for the Web but just out today for iOS), among others. They each have their strengths and weaknesses, but I’m struck by how much they all look like Google Reader — a list of feeds and folders occupying the left third of the screen and a stream of articles in the right two-thirds.

When Google Reader’s demise was announced, in my head I pictured a slew of new products vying to take its place by reinventing the very idea of an RSS reader. I was looking forward to seeing some radically new user interface approaches that would challenge my notions and habits around feeds. I haven’t seen that, at least not yet.

However, when I think more carefully about what I like and don’t like about these contenders, I realize that in truth I’m actually not looking for something different at all. What I want are the very same paradigms that Google Reader used, the same keyboard shortcuts, the same auxiliary features — basically the exact same interface. When one of these products omits something that Google Reader featured, or takes a slightly different approach, I think to myself, “Well that’s not right.”

Changing habits is hard, especially with something that’s as geared towards expert usage as RSS. It just goes to show how biased towards advanced users Google Reader was; acclimating yourself to its quirks took some time, but once you adopted Google Reader-specific habits, they become ingrained and you never wanted to give them up. Software for experts tends be like this, I find, and in many ways that is exactly the opposite of what a software company wants if they want to build a huge audience. I guess Google Reader never really had a chance.

To follow me on Twitter click here.

→ MacStories Interviews John Siracusa (6 Months Ago)

I finally got around to reading this lengthy interview (thanks), and it’s full of great commentary. From what it’s like being John Siracusa:

When you spend all day writing for a compiler, it’s sometimes frustrating to have to switch over to writing for humans, which have far more inscrutable rules and terrible error messages.

…to strong insights into technology and design:

Simplicity is great, as iOS has shown. But there’s a difference between conceptual simplicity and visual simplicity. Just hiding controls does make things appear simpler, but it doesn’t actually make them any simpler. The complexity is now just hidden. Similarly, removing features that few people use is a good idea, but like any good idea, it can be taken too far. At a certain point, you’re just making your application worse for everyone, even new users.

Worth the read.

∞ Permalink

June 26, 2013

technically it’s no longer our anniversary but it’s...

technically it’s no longer our anniversary but it’s still wednesday somewhere and we are celebrating today as that’s when the grandparents could babysit for a few hours so we can get dinner outside of our home. and #tbt and all of that nonsense.

The Dunham Collection

Lena Dunham shares her fifteen favorite Criterion films, saying she's embarrassed that "so many of these films are in English, but I just love speaking English".

Tags: best of   Criterion Collection   Lena Dunham   lists   movies

Nothing Will Ever Be The Same You Are Going To Mess Up...

Nothing Will Ever Be The Same You Are Going To Mess Up Everything.

There is a connection between hip hop, internet memes, and creative fandoms and if you want to understand the future of what we like to call the “audience" you need to understand this one thing above all else.

I gave this talk last week at MPJC in Amsterdam. It was fun.

I’m going to convert my slides into a series of blog posts over the next week or so.

NSEW: films by Vanessa Renwick

Vanessa Renwick NSEW $25 Vanessa Renwick, a film-maker and artist who lives in Portland (OR), has been a long time ally and collaborator with many folks in Justseeds. NSEW is a compilation of 25 short films by her, with over three hours of feminist, experimental, political, lyrical, documentary films. The dvd comes in a beautiful box with a cover image by Margaret Kilgallen and lettering by Carson Ellis.
"Vanessa Renwick's films reveal the hidden stories and secret lives that define our great national weirdness, imbued with the radical curiosity and vision of a true pioneer."
Todd Haynes - filmmaker
"Vanessa Renwick was a powerful influence on me in my twenties -- here is a woman who has taught herself how to make movies, following her own rules about what movies can be and creating them in ways that are personal, organic, and sometimes wildly risky. Her body of work is substantial and important, and radiates with love and anger and sense of real joy in the gritty specifics of life (and death) on Earth."
Miranda July - filmmaker DVD in letter-pressed case vava_long1.jpg

June 25, 2013

bostonreview: No comment.


No comment.

Announcing the Release of Movable Type 5.2.7

Movable Type 5.2.7 is the latest version of Movable Type and offers patches for several bugs found in Movable Type 5.2.6.

Most notably, a bug was found in the 5.2.6 release that caused an error to occur if certain block tags were present within an <mt:Ignore> tag.

This release does not include security related patches.

Released Versions

  • Movable Type Open Source 5.2.7
  • Movable Type Pro 5.2.7
  • Movable Type Advanced 5.2.7


(What is the difference?)

Installation/upgrade instructions

Note: if you purchased a Movable Type license you can also purchase our installation or upgrade service and have all the work done by our excellent support team.

Five Photos by the Author’s Actually Talented Wife

The present author has noted previously in these pages both that (a) he’s married to a real human woman with nearly all of her limbs/senses and also that (b) the woman in question has a number of Special Skills, one of which is goddamn art photography.

Below are some recent baseball-related efforts by that same wife, a result of trips to Class-A Kane County in Geneva, IL, and also to a Madison Mallards game of the collegiate wood-bat Northwoods League.

All images are both (a) embiggenable via clicking and (b) stolen directly from the aforementioned wife’s lightly maintained website.










Google Reader Apocalypse

Jamie Zawinski:

Currently everyone and their mother is scrambling to write some new web-based replacement for Google Reader, but I don’t want that, even a little bit. I want a pair/trio of apps that synchronize. I have no interest in reading my feeds through a web site (no more than I would tolerate reading my email that way, like an animal).

I have yet to find a mobile RSS reader that feels fast enough, so I’d be happy with just an updated version of NetNewsWire 3 that doesn’t sync, but which fixes a few longstanding bugs.

June 24, 2013

Drew Smyly: Old School Relief Ace

The Tigers bullpen has been a running punchline for a while now, and if you were to identify a flaw on their team — besides corner infield defense, anyway — you’d point out their shaky ninth inning options when being asked to hold a lead. Bruce Rondon showed he wasn’t ready for the gig, then Jose Valverde tried and failed once more, so now it’s Joaquin Benoit‘s chance to hold down the closer role.

However, the modern singular focus on the closer as representative of a team’s bullpen strength can be misleading, and Detroit is a prime example of why the guy getting the save doesn’t have to be your best relief pitcher. The Tigers might not have a closer, but in Drew Smyly, they have something even better: an old school relief ace.

Smyly has appeared in 26 games this year, which isn’t a remarkable number. In fact, 26 appearances ties him with Cesar Ramos and Kyle Farnsworth for the 124th highest total on the season. However, Smyly has pitched multiple innings in 17 of those 26 appearances, tying him for the fifth most multi-inning appearances among MLB relievers this year, and of the relievers ahead of him, only one — Pittsburgh’s Justin Wilson — is regularly asked to hold leads. Jim Leyland is deploying Smyly in the role that relievers used to play 30 years ago, and it’s working really well.

Here’s Smyly’s last three outings, as an example of how he’s being used:

June 17th, vs Baltimore: Enters to begin 7th inning with a 5-1 lead, Smyly retired nine straight batters to finish the game.

June 20th, vs Boston: Enters with two on/no out in 8th inning, team trailing 3-2, strands both runners, pitches two scoreless innings, Tigers win 4-3 on ninth inning walkoff.

June 23rd, vs Boston: Enters to begin 6th inning, team trailing 4-3, throws 2 2/3 scoreless innings, Tigers win 7-4 after taking lead in eighth inning.

Because of the messed up Hold/Save statistics that do less to inform understanding about a player performance than just about any other statistics in any other sport, Smyly’s performances in these three games are barely noticed. He got a Save for holding the 5-1 lead against Baltimore, but only because he pitched the final three innings, and that was the least useful outing of the three. Because he entered with the team trailing in both of his two outings by Detroit, he doesn’t get credit for a Hold, even though his performance was critical in keeping the gap at one run so that the team could mount a late inning comeback.

Smyly, though, got credited with a Shutdown for all three outings here on FanGraphs, bringing Smyly’s total for the season to 10 shutdowns against just two meltdowns. Those 10 shutdowns rank second on the Tigers — Benoit has 13 — and are all the more impressive because of the quantity of batters Smyly is facing in getting those shutdwons.

10 times this year, Smyly has entered a game in the 6th inning or later and faced at least eight batters in that appearance, and the Tigers are 8-2 in those 10 games. Because they don’t have a lot of bullpen depth outside of Benoit, the safest way for Leyland to preserve middle inning leads has been to ask Smyly to bridge the gap between the starter exiting and the ninth inning, and Smyly has been excellent in that role.

His numbers speak for themselves. He’s racked up 46 strikeouts against just 12 walks in 46 innings, and he’s allowed just one home run all year, so his FIP comes out to 2.19. Given that he was similary excellent as a starting pitcher last year, it shouldn’t be a huge surprise that Smyly has performed well in relief. He’s probably somewhat wasted in that role, and there’s no question that other teams will be asking for him in nearly every trade conversation Dave Dombrowski has over the next month.

However, the Tigers should rebuff those advances. While Smyly should get another crack at the starting rotation at some point in the future, he’s turned himself into a highly valuable member of a bullpen that can’t afford to lose him. In his last three outings over the last week, Smyly has racked up 0.41 WPA, the eighth highest total of any reliever in baseball during that stretch. In this role as a multi-inning bridge, Smyly is a highly valuable weapon.

While I’m sure some will raise concern about Smyly’s “heavy” usage, we should remember that this is how relievers were used for the better part of baseball history. This year, only 27.3% of all relief outings have been multi-inning appearances, but 30 years ago, that number was 59.9%. In 1983, Dan Quisenberry finished second in the Cy Young voting by racking up 45 saves and posting a 1.94 ERA, but he threw 139 innings and had 51 multiple inning appearances that year. That was part of a four year run where “The Quiz” threw between 129 and 139 innings each season and finished in the top four in Cy Young voting all four years.

The game was different back then, sure. The Tigers probably shouldn’t ask Smyly to throw 130 innings in relief. But what’s wrong with 100? He threw 99 in the big leagues last year after throwing 18 in the minors, and he threw 125 in the minors in 2011, so it’s not like his arm can’t handle throwing that many pitches in a year. Bullpen innings probably aren’t the same as starting innings, due to the higher stress and effort exerted on each pitch, but Leyland has done a good job of giving Smyly days off, as he’s only pitched in back-to-back games twice all year.

The Tigers could use another quality reliever as they march towards October, but they shouldn’t give up Drew Smyly in order to get a “proven closer”. The old school relief ace is just as valuable pitching multiple innings earlier in the game, and with the way Leyland is deploying him lately, Smyly is a piece that the Tigers can’t afford to be without.

NetNewsWire/Mac Beta

My friends at Black Pixel have released an open beta for NetNewsWire 4 for Mac. It’s free during the beta period.

I downloaded it. I’m using it. I’m excited.

It’s weird to help test an app I used to work on — especially this app. But it’s fun.

Migrating to the new Twitter search API

It is a little over two years ago that I posted about searching Twitter with iOS. In the meantime the Twitter API v1 has been retired and replaced by the Twitter API v1.1. The example code relied on the now defunct Twitter search API to show how to interact with a web service using NSURLConnection. This post will look at what I had to do to migrate to the new API.

A Twitter Search Application

I am not going to repeat all of the detail of the original example TwitterSearch app. The networking code is largely unchanged so refer back to original post for the full details. The basic structure of the App is organised with a RootViewController which prompts the user to enter a search term.

This search query is then passed to a SearchViewController which handles querying the Twitter API and displaying the results in a table view.

Updating to iOS 6

Before looking at the details of the new Twitter API I should mention a number of more general application updates that I have made to the old project. This really shows how much the iOS platform has changed in just two years:

  • Build with latest versions of Xcode and LLVM compiler using modern Objective-C
  • Minimum deployment target is now iOS 6.0
  • Project has been converted to ARC memory management
  • Converted to using NSJSONSerialization framework which did not exist at the time of the original post.
  • Individual xib files have been replaced with a single storyboard.
  • New launch images and icons for retina and iPhone 5 displays.

I will not go into the details of these changes as they are not the point of this post but you can take a look at the end result in the GitHub repository for the project.

Twitter Search API v1.1

If you are going to use the new Twitter search API you will probably want to read through the developer documentation at the following links:

To query the old search API you constructed a URL that looked as shown below. This would have returned up to 100 results for the search query “apple” in JSON format.

The equivalent new API URL is as follows:

The new API uses https and the session must first be authenticated. There are two possible ways to authenticate with Twitter:

The OAuth signed method allows requests to the Twitter API to be made on behalf of a Twitter user. As we will see this method is directly supported by the iOS SDK making it easy for us to implement.

The application-only authentication mechanism as the name suggests allows requests to be made without a user context. This means you can search without requiring the user to have a Twitter account but it does require that you register your App with Twitter to obtain credentials. As a result I am not going to discuss this method further for now.

The format of the search results has also changed a little. Previously the API returned a JSON dictionary containing an array of “results” where now we get back an array of “statuses”. A number of the fields within the tweet have also changed as the structure of a Tweet has grown.

The Social Framework

The other major change in the last two years is that Apple has added support for social networks in the iOS SDK. This started with the Twitter framework (TWRequest) and Accounts framework (ACAccount) in iOS 5. The ACAccount class makes life easy for us by providing a consistent way of retrieving the Twitter credentials for a user when we need to authenticate the request.

In iOS 6 the Twitter framework was deprecated and replaced with the Social framework (SLRequest) to provide a generalised interface for interacting with social networks including Facebook.

User Authentication

As I mentioned previously we now need to have end user credentials for authentication before making a request to the Twitter search API. The ACAccount framework will take care of this for us by providing an account store organised by account type. At time of writing iOS 6.1 supports accounts for Facebook, Weibo and Twitter. This allows the user to register their Twitter account on an iOS device and authorise applications to access that account.

To get started we need to add a property for an account store to the SearchViewController:

@property (nonatomic,strong) ACAccountStore *accountStore;

I use a lazy initialisation to allocate and initialise the account store:

- (ACAccountStore *)accountStore
  if (_accountStore == nil)
    _accountStore = [[ACAccountStore alloc] init];
  return _accountStore;

Now when we need to load the query we can check the account store for the available Twitter accounts:

- (void)loadQuery
  self.searchState = UYLTwitterSearchStateLoading;
  NSString *encodedQuery = [self.query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

  ACAccountType *accountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
  [self.accountStore requestAccessToAccountsWithType:accountType
                                        completion:^(BOOL granted, NSError *error)
     if (granted)


  • The user may have actually registered more than one Twitter account with the device. The user grants access for all accounts of a given type encapsulated as an ACAccountType.
  • To get the ACAccountType for all registered Twitter accounts we use the instance method -accountTypeWithAccountTypeIdentifier: on the account store which will be lazily created the first time we reference it.
  • Once we have the ACAccountType object we need to check we have permission from the user by calling requestAccessToAccountsWithType:options:completion: on the account store object. This is a block based method with a completion handler which will notify us of the result. Note that for Twitter accounts there are currently no options required. If the user has not yet granted our App permissions to use the Twitter accounts a dialog will be displayed to the user:

You should be aware that the user can revoke permissions to your App at any time from the Twitter screen of the Settings application.

  • The completion handler is called when the user permissions have been determined with the granted boolean indicating if you are allowed to proceed. In this example App if we are refused permission we set the search state and reload the table (being sure to do this on the main queue) to inform the user:

       if (granted)
           self.searchState = UYLTwitterSearchStateRefused;
           dispatch_async(dispatch_get_main_queue(), ^{
               [self.tableView reloadData];

Updating the Search State

A small diversion before we get to actually creating the search request. To manage the state of the search request I added a searchState property to the view controller:

@property (nonatomic,assign) UYLTwitterSearchState searchState;

This property is an enumerated type for each of the states that the application can be in when issuing a request. The enumerated type is defined as follows:

typedef NS_ENUM(NSUInteger, UYLTwitterSearchState)

I will not show it here but the method -searchMessageForState: returns an NSString message for each of these states which is then used to display a message to the user in situations where we do not have search results to display. The relevant code in the tableView:cellForRowAtIndexPath: method is as follows:

NSUInteger count = [self.results count];
if ((count == 0) && (indexPath.row == 0))
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:LoadCellIdentifier];
    cell.textLabel.text = [self searchMessageForState:self.searchState];
    return cell;

So in the situation where the user refuses us permission to the Twitter account type the table view will display as follows:

Creating the Request

Once we have confirmed we have permission to access the Twitter API on behalf of the user we can construct the request. The Social framework hides a lot of the details for us but we still need to construct an SLRequest object with the URL of the search API and the search parameters we want to use:

if (granted)
  NSURL *url = [NSURL URLWithString:@""];
  NSDictionary *parameters = @{@"count" : RESULTS_PERPAGE,
                                   @"q" : encodedQuery};

  SLRequest *slRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter

  NSArray *accounts = [self.accountStore accountsWithAccountType:accountType];
  slRequest.account = [accounts lastObject];             


  • The URL of the search API is now
  • The search parameters are no longer specified as part of the base URL but added to a separate dictionary. To limit the number of results we specify the count parameter (previously this was the rpp parameter).
  • To create the SLRequest we use the class method requestForServiceType:requestMethod:URL:parameters: specifying that this will be an HTTP GET request (SLRequestMethodGET).
  • Once we have the SLRequest object we retrieve all of the available Twitter accounts from the account store using our previously authorised ACAccountType. Since there can be more than one registered Twitter account we will just select the last one returned. In practise you may need a way to allow the user to specify which account to use when there are multiple accounts available.

Issuing the Request

The SLRequest class provides a block-based method with a completion handler for sending the request (performRequestWithHandler:). However we already have all of the code in place for performing an HTTP request using NSURLConnection that we can continue to use:

NSURLRequest *request = [slRequest preparedURLRequest];
dispatch_async(dispatch_get_main_queue(), ^{
  self.connection = [[NSURLConnection alloc] initWithRequest:request
  [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;


  • To use NSURLConnection we first need to have the SLRequest object return us an NSURLRequest for the now authorised HTTP request by calling preparedURLRequest:.
  • Once we have an NSURLRequest we can pass it to NSURLConnection as in the original example. However our NSURLConnection delegate methods assume they are running on the main thread which will only work if we also initialise the request on the main thread with dispatch_async.

NSURLConnection Delegate

I am not going to go through each of the NSURLConnection delegate methods in detail as for the most part they are unchanged from the original example. For reference we have implemented four delegate methods:

  • -didReceiveResponse:
  • -didReceiveData:
  • -connectionDidFinishLoading:
  • -didFailWithError:

The results of the search query are a JSON stream that we can decode using the NSJSONSerialization framework in -connectionDidFinishLoading:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
  [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
  self.connection = nil;

  NSError *jsonParsingError = nil;
  NSDictionary *jsonResults = [NSJSONSerialization JSONObjectWithData:self.buffer options:0 error:&jsonParsingError];

  self.results = jsonResults[@"statuses"];
  if ([self.results count] == 0)
    NSArray *errors = jsonResults[@"errors"];
    if ([errors count])
        self.searchState = UYLTwitterSearchStateFailed;
        self.searchState = UYLTwitterSearchStateNotFound;

Note that decoding the JSON results should give us a dictionary containing either an array of matching tweets (with key “statuses”) or an array of errors (with key “errors”). Once we have the results we need to force the table view to be reloaded so that we can update the user interface:

  self.buffer = nil;
  [self.tableView reloadData];
  [self.tableView flashScrollIndicators];

Updating the Table View

When we receive new results we request the table view to reload its data which will ensure that tableView:cellForRowAtIndexPath: will be called. The relevant code to show the tweet data is as follows:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ResultCellIdentifier];    
NSDictionary *tweet = (self.results)[indexPath.row];
cell.textLabel.text = tweet[@"text"];
return cell;

This code makes use of the table view cell prototype defined in the storyboard. Our results data is as an array of dictionaries each representing the data for a single matching tweet. Once we have the dictionary for the current table view row we can then retrieve the tweet data by key. In this case we are just using the tweet “text”. This is most likely a violation of the Twitter display requirements which you should be aware of if you intend to show tweets in a published application.

Pull To Refresh

As a final improvement to the example code I have added support for the pull-to-refresh UIRefreshControl. This mostly consists of just enabling the refresh control for the table view in the storyboard and implementing the corresponding action method when the refresh control is invoked:

The action method in this case repeats the query after first cancelling any existing connection:

- (IBAction)refreshSearchResults
  [self cancelConnection];
  [self loadQuery];

We also need to dismiss the refresh control when the connection completes or fails by inserting the following method call into connectionDidFinishLoading: and connection:didFailWithError:

[self.refreshControl endRefreshing];

Wrapping Up

It is a shame that Twitter has decided to shut off simple, unauthenticated access to the Twitter API. However if you adopt the Social framework introduced with iOS 6 it is still pretty simple to implement. If you need to support iOS 5 you can follow a similar approach using the TWRequest class. You can find the updated TwitterSearch code in my CodeExamples GitHub repository.

Migrating to the new Twitter search API was originally posted 24 Jun 2013 on Copyright 2013 Keith Harrison.

All the Apps Have Been Written

Kevin Hoctor:

After my research, I was sure that I wasn’t the only person unhappy with the state of personal finance packages on the Mac. How many others were in the same pain as I was? If I can cure this pain my life, maybe I can help them as well.

I want to “fix” most of the apps I like, including his.

The Solstice and the Supermoon

This was a weekend of the Sun and Moon -- a coincidence of the summer solstice and the "Supermoon". Friday was the summer solstice (in the northern hemisphere), welcomed by humans for thousands of years as the longest day of the year. In ancient times, people celebrated this day as the center point of summer. Some still observe the solstice with ceremonies and prayers, gathering on mountaintops or at spiritual landmarks. Over the weekend, skywatchers around the world were also treated to views of the so-called Supermoon, the largest full moon of the year. On Sunday, the moon approached within 357,000 km (222,000 mi) of Earth, in what is called a perigee-syzygy of the Earth-Moon-Sun system (perigee: closest point of an elliptical orbit; syzygy: straight line made of three bodies in a gravitational system). Photographers across the globe set out to capture both events, and collected here are 24 images of our two most-visible celestial neighbors. [24 photos]

The largest full moon of 2013, a "supermoon" scientifically known as a "perigee moon", rises over the Tien Shan mountains and the monument to 18th century military commander Nauryzbai Batyr near the town of Kaskelen, some 23 km (14 mi) west of Almaty, Kazakhstan, on June 23, 2013. (Reuters/Shamil Zhumatov)

"That was gentrification. Now comes plutocratisation: the middle classes and small companies are..."

“That was gentrification. Now comes plutocratisation: the middle classes and small companies are falling victim to class-cleansing. Global cities are becoming patrician ghettos. In 2009, says Sassen, the top 1 per cent of New York City’s earners got 44 per cent of the compensation paid to its workers. The “super-prime housing market” keeps rising even when the national economy collapses. After Manhattan, New York’s upper-middle classes are being priced out of Brooklyn. Sassen diagnoses “gradual destruction”.”

- Priced out of Paris -

June 23, 2013

The New Yorker (US)

Artwork by IVAN BRUNETTIon this new cover The New Yorker. Art editor Françoise Mouly just started her own blog called Blown Covers: "Every week, Mouly hosts a cover contest on the blog, open to all, with themes that closely mirror those she suggests to her regular contributors"

The New Yorker (US)

The Carton (Beirut)

New cover from The Carton magazine Nº6 - SUMMER 2013 "booza." Art Direction Rawan Gebran and Jade George About: This summer is post acknowledging past and future – it's about learning to enjoy the nowness of now, like we did way back when. When there was no notion of guilt or penalty in indulging. Ice cream originated in the Middle East you say? Perfect. Booza it is. Also on Facebook Instagram: @thecarton Twitter: @thecartonquarterly Publisher: Art And Then Some

The Carton (Beirut)

@Frencil: Your flag will never be as cool as that of...

@Frencil: Your flag will never be as cool as that of Zheleznogorsk, Russia - where angry bears tear apart atomic nuclei.

wtfevolution: A parasitic louse that crawls into your mouth,...


A parasitic louse that crawls into your mouth, vampirizes your tongue, then clamps itself onto the withered stub so it can ride around inside you and drink your mucus for the rest of your mutual lives? Why, yes. It’s called symbiosis and it’s beautiful.

What? Relax. It’s going to be fine. This isn’t going to hurt. You won’t even miss your tongue—once the louse is latched onto the muscle, you can simply use its body as a tongue instead. These are exactly the kind of details that evolution has worked out for you, because evolution loves you and it wants you to be all right.

June 22, 2013

Bluetooth Keyboard Caps

Apple BT Keyboard End Caps

Recently, I’ve been carrying an Apple Bluetooth Keyboard with my iPad mini so I can compose relatively long emails. Nothing beats a keyboard for text entry!

While I love the keyboard, it does have an annoying habit of turning on when floating about my murse.

A few minutes in Autodesk Inventor Fusion and I whipped up some printable caps that slide over the ends of the keyboard. The cap protects the power button from accidental activation (there are two styles of caps, one more defensive than the other) and by placing a cap at both ends, they can be left in place while using the keyboard and it remains level.

The STL files and some more photos can be found on

Aside: I clearly need to reprint that piece. I had some schmutz on the print bed, leading to the end not being smooth. That and it looks like my belts need tightening. I’ll switch colors to clear and re-print someday soon.

Aside^2: Something snapped in my brain since the last time I messed with Inventor Fusion. In particular, I went from nerver using to completely embracing the construction feature. Basically, construction allows you to place axis or planes relative to features on the model. Thus, if you want to bisect the model to, say, make the inside wall of a tube a bit fatter for a few millimeters near the end, you simply place a plane parallel to the end face, offset a few millimeters into the tube and then bisect the model with the plane.

Technical Notes on Vesper’s Full-Screen Animations

If you’ve checked out Vesper, you’ve noticed that the transition from timeline to detail (and back) isn’t a standard navigation controller transition. The detail doesn’t slide in from the right — instead, the detail view reveals itself as the other notes disappear.

(The same is true for detail-to-picture view and back.)

Though I’ve been writing iOS apps since before the App Store opened, I’d never done any animations like this. I had to figure it out.

Smokescreen View

Working on Vesper often makes me think of cartoons like Speed Racer that I loved when I was a kid.

(This is seemingly ironic. The Mach 5 is all about buttons and gimmicks, and Vesper is all about no buttons and no gimmicks. But it’s not really ironic because I want to capture the same feeling of cool that thrilled my 6-year-old self.)

When I started work on the full-screen animations, I started by lifting stuff up on the z axis and swapping in the next view controller’s view midway through the animation. This totally sucked. Completely. Terrible idea. Just the awfulest thing.

Then I remembered that one of the common escape plans in cartoons was the smokescreen. They’re firing sonic ray bazookas at us! Activate the smokescreen!

So I created VSSmokescreenView. That’s the view where the animations take place. It gets placed at the highest point on the z axis, and the actual view controllers get swapped underneath.

I thought I’d invented something new — but I soon learned that everybody else has been doing it this way for years. Which is cool: it suggests that there’s a best practice and I wasn’t doing something weird.

Multiple Animation Blocks

A smokescreen view is easy enough to manage if you have one animation block. Add the view, run the animation, and remove the view on completion.

But Vesper’s transition animations have three blocks (in part because one block would have been too complex to manage).

For example, the timeline-to-detail animation has these blocks:

  1. Animate the navbar changes.

  2. Animate the table view away.

  3. Animate the selected note + thumbnail to its detail-view version.

What’s more, these animation blocks could have different durations, and my designers could change those durations at any time without telling me, just by editing a plist. The shortest one could become longest, and so on.

So the problem was this: how does my code know when to remove the smokescreen view? In which of the three animation completion blocks should this happen?

I can think of a few ways to deal with this. None of them are lovely. Here’s the best one I came up with:

Reference Counted Smokescreen View

The smokescreen view has just two methods beyond its init method: incrementUseCount and decrementUseCount. And there’s a read-only useCount property.

Before each animation block, the view controller calls incrementUseCount. In the completion handler for each animation block it calls decrementUseCount.

Once useCount returns to 0, then the smokescreen view is removed from the view hierarchy.

This is reasonably elegant, though I wouldn’t mind to learn of a better approach. (Let me know if you know of one.)

Too Much Information

If you’re used to using standard navigation controllers, you’re used to thinking of each view controller as a silo that exposes nothing about its internals.

Full-screen transition animations like this totally screw with that idea. Something has to do the animating, and that thing needs to know about both view controllers, which means those view controllers have to expose some information they wouldn’t normally expose.

The best thing I could think of was to expose what I needed as properties in the various view controllers, and use a comment to explain that they’re there for animation support only.

Sucky? Yeah, sucky. But way better than the alternative, which would have been to explain to my designers that I couldn’t do the animations because I’m too picky about what goes in my header files. (In plainer language: many Bothans died to bring you these animations.)

Rect ’Rangling

I’m a text guy. (See my earlier apps NetNewsWire, MarsEdit, and Glassboard.) Even simple addition and subtraction hurts my head. Rectangles vex me. (I don’t know logarithms from drumsticks.) (Which is something I intend to fix, by the way.)

But there’s no way out of dealing with geometry when doing these animations. Something at frame x needs to animate to frame y.

The first thing I learned was this: do not write redundant code to make the smokescreen view’s layout match. Instead, rely on UIView’s convertRect methods to convert from rects in a UIView to rects in the smokescreen view.

Even this hurt my head sometimes. But it got better with practice.


One thing I kept repeating in the animations was taking a snapshot of the view-to-animate via renderInContext. What I wanted in almost every case was a UIImageView containing an image of the view.

This was an easy category method to write. Or two methods, actually: one to create a UIImage snapshot of the view, and another to create a UIImageView containing a snapshot image of the view.

There was one thing that made this just slightly more complex: sometimes the animation wanted a clear background and sometimes not. So there’s a clearBackground BOOL parameter on my category methods. (If YES, it saves off the backgroundColor and opaque values, sets those to clear, calls renderInContext, then restores those values.)

Once I got around to writing those category methods (which are simple) I was able to delete a bunch of foolishly-repeated code, which made the animation methods smaller and much easier to deal with.


It still bugs me how the animation code looks. It’s so awfully specific, and there’s too much of it.

Some of it is surely the nature of the problem. If you want to do something unique, you have to pay the price in code.

But it goes against the grain: I want it to be simpler and more general. I’ll keep at it.

June 21, 2013

→ My Interview on Bitsplitting

Yes, I was on another podcast published this week, but this one’s different.

Daniel Jalkut’s Bitsplitting podcast goes into developers’ early lives: parents, growing up, getting started with computers, and so on. I’ve listened to every previous episode, and I always learn a lot more than I previously knew about each interviewee.

I haven’t shared most of what I told him anywhere else before, mostly because it just hasn’t really come up. If you’re into this sort of thing, give it a shot. (Even if you don’t like me enough to sit through it, I bet you’ve heard of some of the previous guests and can appreciate some insight into how they got where they are.)

∞ Permalink

→ (there’s just no way I’m copying this entire title)

John Gruber:

There are indeed many search results on Daring Fireball for “jackass”, but I regret almost none of them. I’ve used the word very deliberately, and I hope consistently, to describe people who are, in fact, jackasses. To call a jackass a jackass may be impolite, but it is not inaccurate or unfair.

The whole piece is great, but I had to quote this part.

I once got in trouble in high school for calling a teacher a jackass in class. My mother had to come in early the next morning for us to have a “conference” with him. After meeting him, she said that I shouldn’t have said it in class, but she agreed with me. I received no further punishment for that one.

∞ Permalink

→ Hypercritical T-Shirts 2.0

John Siracusa:

Last month, inspired by Marco and bolstered by the drop-dead-simple Teespring web site, I put the first Hypercritical t-shirt up for sale. The response from fans was amazing, vastly exceeding my expectations. Unfortunately, that sale was aborted due to my unauthorized use of copyrighted artwork. All orders were refunded and no t-shirts were printed.

John’s being too self-critical here: there’s a bit more to the story.

The previous shirt design included an icon derived from one in the original 1984 Macintosh.1 (Update: John corrected me with the variant used, which is slightly different from the 1984 original.)

On the final day of his previous T-shirt sale, after more than 900 shirts had been ordered, the original icon’s artist emailed John and me — I was copied because the artist mistakenly thought I had something to do with the shirt — with a passive-aggressive, thinly veiled copyright threat.

The artist had no right to make such a threat. Only Apple could, and if their legal department saw the shirt and objected, they could have filed a simple DMCA claim with Teespring. But they didn’t, because who cares if a guy with a podcast makes a one-off run of a thousand T-shirts for a bunch of geeks like us with a decades-old monochrome icon?

Nobody. I believe it’s even fair use.2 But John voluntarily asked Teespring to cancel the sale and forfeit a sizable chunk of money because he’s a nice guy and didn’t want any trouble.

Now, it would be a shame if the new T-shirt sale sold any fewer shirts than the canceled one. How often does John Siracusa ask his audience to buy anything?

Let’s blow away the old one to make all of this worth it. Go buy a Hypercritical shirt!

  1. I previously used an icon from the same artist, with permission, as the favicon for this site in exchange for a promotional footer link. I no longer want to support this artist, so I’ve removed the icon and temporarily have no favicon. I’ll get a new one soon. 

  2. But, like most fair use, nobody can afford to prove it. 

∞ Permalink

At Prendergast Confirmation, NYC State Senators Bash Select Bus Service

It’s been a long road for Tom Prendergast to become the Chairman and CEO of the Metropolitan Transportation Authority. After the previous MTA Chair, Joe Lhota, split to run for mayor, it took Governor Cuomo more than three months to nominate Prendergast. Then his confirmation hearing was put on hold for more than two months by Senate Transportation Committee chair Charles Fuschillo. But yesterday afternoon, on the final day of the legislative session, Prendergast secured a unanimous vote of approval from Fuschillo’s committee.

MTA Chair Tom Prendergast at his confirmation hearing. Photo: NY Senate/YouTube

While it’s not big news that Prendergast’s nomination eventually received support, the hearing did offer an opportunity for senators to question Prendergast and opine on a range of transit issues. The spectacle was noteworthy most of all because of what it said more about the people representing NYC in Albany.

One program that came under heavy criticism from some state senators was Select Bus Service, which received endorsements from just about all the mayoral candidates at this week’s transportation forum. Since its debut in 2008, SBS has been rolling out at a rate of less than one route per year. While that’s not exactly a breakneck pace, it’s too much for some state senators.

Senator Bill Perkins of Harlem asked Prendergast about the plan to bring SBS to 125th Street, where Perkins and others said a months-long planning process, including meetings he sponsored, wasn’t “inclusive” enough, after it resulted in a bus lane proposal. In response, DOT cut the length of the proposed bus lane in half this month, leading Perkins’ office to say that they were now “pleased” with how the process was unfolding.

Perkins continues to claim that he isn’t against better bus service, only the process that brings it to the thousands of bus riders in his district. ”There’s no opposition to SBS. The opposition is to disrespect for community input,” he told Prendergast. Perkins said he wants a more comprehensive study to include parking and enforcement issues — things the existing plan was already taking into account.

Prendergast was accommodating in his response, although he noted that DOT controls the allocation of street space. “I totally agree with you that if we rush a process, and we make people feel that their needs aren’t being accommodated, we don’t address those needs, that’s wrong,” he said.

Perkins wasn’t the only senator opposing SBS. Republican Andrew Lanza of Staten Island was more direct about why he doesn’t like the program, which has brought limited-stop service and bus lanes to sections of Hylan Boulevard and Richmond Avenue. The S79 SBS route, which initially envisioned a center-running peak-direction bus lane for the length of Hylan Boulevard, was shrunk from earlier proposals to include targeted bus lanes to help bus riders bypass traffic at the most congested points. Most of the route, in fact, is in mixed traffic.

Lanza noted that the program has sped up bus times, but then inflated the impact the short bus lanes have had on drivers. “We don’t talk about the thousands of people in their cars who have now had 10, 15, 20, 30 minutes added,” he said. “It’s just a parking lot now, and it’s because there’s this red lane, that by the way there’s hardly ever a bus there.”

It wasn’t just the bus lanes that bothered Lanza, who has joined with Council Member Vincent Ignizio to eliminate flashing blue lights from SBS buses, which are restricted by law to use by volunteer firefighters. The lights have been shut off, but an Assembly bill would allow the MTA to use flashing purple lights instead. Yesterday, Lanza dismissed the need for flashing lights at all, which Prendergast noted helps users distinguish between SBS and local buses before deciding whether to pre-pay their SBS fare in advance of boarding the bus.

Lanza seemed to miss this point entirely, instead referring to his experience with express buses, which unlike most SBS routes, allow riders to pay on-board. “When I saw a bus that had an ‘X’ on it, I knew it was an express bus,” he said. “You don’t need a flashing light to do it.” Although the bill would enable purple lights only for routes that include pre-board fare payment (which would exclude the S79), Lanza said he was opposed to it.

Not all senators were opposed to better bus service: Senator Daniel Squadron, for one, praised the SBS service in his district. Responding to a question from Squadron, who represents many neighborhoods along the East River in Brooklyn, Prendergast acknowledged that the MTA, in partnership with NYC DOT and the Department of City Planning, could be more effective at expanding transit service to new residential neighborhoods in the city. “I’ll give you an example of where we could have done a better job is Long Island City — take a look at all of that development there,” he said. “We want to be in a position where just as the onset of that demand is occurring, the service is being put on the street.”

Prendergast’s nomination was approved by the Senate last night. At the hearing, noting the high turnover at the top at the MTA in recent years, Senator Lee Zeldin asked Prendergast how long he was planning to stay in the job. “Let’s just say I’m not going to run for mayor of the city of New York,” he replied. “I’m not going to take a job in Hong Kong.”

Cory Arcangel, "GAO" (2013)

Cory Arcangel, Clinton, 2011. Pencil on paper (produced with Mutoh XP-300 series printer), edition 1 of 3, 11 x 8.5 inches. 

Last year, critic Alix Rule and artist David Levine suggested in a much-discussed article in Triple Canopy that the dense, quasi-theoretical writing found in contemporary art press releases should be reformatted as meter and appreciated as avant-garde poetry. This week, Cory Arcangel took the next logical step and used the email press release for his forthcoming exhibition at DHC/ART, which was circulated on the e-flux mailing list, as an opportunity for a sly text-based intervention.

Trained initially in classical guitar and music technology at the Oberlin Conservatory of Music, Cory Arcangel is no_ recognized as a major exponent of a pop-tinged, computer-centred art.   

As in the excerpt shown above, the letter "w" was omitted from the entire email. No explanation was offered, apart from this credit line: "Pictured here: Cory Arcangel, GAO, 2013. ASCII modified institutional press release." So I had to email Arcangel to ask what this was about. His reply consisted of a winky emoticon (in Comic Sans font) and a link to this article in the Daily Mail describing reported vandalism of the White House by outgoing Clinton staffers:

President George Bush has launched an investigation into what appears to be a systematic disabling of White House equipment by outgoing members of Bill Clinton's staff, and obscene messages left for the new administration.


Telephone lines have been cut, voice-mail messages changed to scatological, lewd greetings. One Bush staffer's grandmother telephoned his office from the Midwest and was "horrified" by what she heard on his message machine.

Many telephone lines were switched to the wrong offices. Desks were turned upside down and rubbish scattered everywhere.

Filing cabinets were glued shut, pornographic pictures inserted into computer printers, together with obscene slogans. In one office hallway, lewd graffiti had been written with a Magic Marker.


Earlier this week it was learned that many computer keyboards in the White House are missing the letter "W" which is President Bush's middle initial. He is often known by that alone. 

One of the questions raised by Rule and Levine's takedown of "International Art English" is whether anyone is really paying attention to the content of these press releases—whether they have an audience. Along the same lines, the missing "W" is a kind of provocation, designed to nearly fly beneath the threshhold of anyone's attention. Like many of Arcangel's works, GAO is barely anything at all, but through a slight alteration of a given set of paramaters, it illuminates the structure and conventions of the context in which it operates.

Bitsplitting With Marco Arment

Episode #8 of the Bitsplitting podcast features my friend Marco Arment. We got to know each other at first on a professional level when he was the lead developer at Tumblr. When I was working on initial Tumblr support for MarsEdit, Marco helped by adding a number of enhancements to the Tumblr API.

Since then Marco has left Tumblr, founded Instapaper, sold Instapaper, founded The Magazine, and sold The Magazine. That’s among other things, and not necessarily in that order. I’ve had the good fortune of getting to know Marco better as a friend and colleague as we each pursue our indie software development, blogging, and podcasting ambitions. Thanks for joining me on the show, Marco!

Mike Trout and the Greatest Age-21 Season of All Time

Last year, Mike Trout was 20-years-old, and he did things that no other 20-year-old in history had ever accomplished. He’s the only 20-year-old in baseball history to post a +10 WAR season, and it wasn’t just driven by his positive fielding numbers, as his 166 wRC+ was the best hitting performance any 20-year-old has ever posted. It was an historic season in many ways, but it was also the kind of season that didn’t look repeatable.

His BABIP was .383, and both his fielding and baserunning numbers were among the best in the game, but all of those variables are heavily influenced by speed, and speed peaks very early. During his run last year, I repeatedly noted that I thought Trout would probably settle in as more of a +6 to +7 WAR player, because his defense and baserunning would regress faster than his offense would improve.

And, really, his BABIP, his defense, and his baserunning have regressed somewhat. Trout’s UZR is just +0.5 despite spending about half of his games in left field, his BABIP is down to .357, and he’s only stolen 16 bases this year after swiping 49 last season. Trout noticeably bulked up over the off-season, and he doesn’t appear to be quite as fast as he was last year. He’s still a burner, but he’s probably not in the fastest player in baseball conversation anymore. So, in that sense, my expectations for Trout regressing have been vindicated.

Except, you know, his wRC+ has fallen from 166 last year all the way down to 163 this year. The BABIP correction has essentially been canceled out by an improvement in his contact rate, so he’s just not striking out as often as he was last year and the increase in balls in play has allowed him to maintain his offensive levels from last season. And, while his stolen base totals are down, he’s still taking a ton of extra bases, which shows up in his league leading +3.3 UBR, the part of our baserunning calculation that measures value from advancing my means other than stealing a base. Trout had a +5.0 UBR last year, so he’s actually on pace to get more value from his non-steal baserunning this season than he did in 2012.

Last year, Trout was the best 20-year-old in baseball history. This year, his performance is going to give him a shot at being the best 21-year-old in baseball history.

Here’s the all-time age-21 leaderboard, with just the top ten seasons by WAR highlighted below.

Season Name G PA AVG OBP SLG wOBA wRC+ Fld BsR WAR
1917 Rogers Hornsby 145 589 0.327 0.385 0.484 0.416 162 18 0 9.4
1911 Joe Jackson 147 641 0.408 0.468 0.590 0.494 184 5 2 9.3
1953 Eddie Mathews 157 681 0.302 0.406 0.627 0.451 167 3 0 8.6
1929 Jimmie Foxx 149 638 0.354 0.463 0.625 0.480 177 4 -2 8.1
1980 Rickey Henderson 158 722 0.303 0.420 0.399 0.377 136 18 10 7.8
1972 Cesar Cedeno 139 625 0.320 0.385 0.537 0.413 163 2 4 7.8
2001 Albert Pujols 160 676 0.329 0.403 0.610 0.423 159 6 -1 7.2
1998 Andruw Jones 159 631 0.271 0.321 0.515 0.353 113 35 4 7.0
1991 Ken Griffey Jr. 153 633 0.327 0.399 0.527 0.399 148 7 1 6.9

(Fun side note: Trout’s 2013 season already ranks as the 42nd best age-21 season ever. By the All-Star break, there’s a good chance that his half season will have been more valuable than what guys like Mickey Mantle and Joe DiMaggio did in their entire age-21 season.)

While Hornsby comes out on top, Shoeless Joe is in a virtual tie for the top spot and isn’t as dependent on the fielding part of the calculation, and fielding numbers from 100 years ago shouldn’t be taken too literally. Hornsby was probably a really good defender, but was he good enough to make up for 78 points of wOBA in 52 fewer plate appearances? I don’t know, and there’s no way to know, but either way, you could say that the best age-21 season of all time is probably in the +9.5 WAR range.

Well, after last night’s performance, Trout is now at +4.3 WAR in 73 games, and that’s with some demerits for his defensive performance. If he sustained this exact performance and played in 88 of the Angels remaining 89 games, he would finish with +9.5 WAR. In other words, Trout is on pace to have the best age-21 season in history even with the fielding metrics not being particularly in love with his first half performance in the field.

Of course, defensive metrics can have big swings in small samples, and the reality is that Trout is probably still a very good defensive outfielder, especially when being compared to other left fielders. We shouldn’t continue to project Trout to be rated as a league average defensive outfielder, so if we work in some positive regression for his fielding, he doesn’t even have to keep hitting at this level to get to +9.5 WAR. And yet, there’s signs that his offense might be getting even better.

Here’s Trout’s offensive performances by month since his callup to the Majors last year:

Month Contact% BB% K%
May, 2012 87% 9% 23%
June, 2012 80% 7% 18%
July, 2012 85% 11% 19%
August, 2012 78% 10% 24%
September, 2012 78% 15% 26%
April, 2013 78% 10% 20%
May, 2013 86% 11% 20%
June, 2013 92% 14% 11%

As good as Trout was last year, he was that great while only making contact 82% of the time, and those contact issues carried over in April. His contact improved in May without being reflected in his strikeout rate, but in June, he’s hitting everything he swings at and the result is a dramatic drop-off in strikeouts. Basically, Trout is showing signs of dramatic improvement in the the one area you could kind of point to as a deficiency. A strikeout-free version of Mike Trout is essentially the perfect baseball player.

While changes in contact rate can be identified in smaller samples than in other outcome based metrics, we’re still dealing with just a few weeks of data here, but Trout should be expected to improve facets of his game given that he’s still at a point in his career where most players are working their way through A-ball. Even if the improvement is more incremental than a huge leap, an uptick in his contact rate is going to help offset BABIP swings. If he really can start making contact in the 85-90% range on a regular basis, with the rest of his skillset, then he’s a true talent +8 or +9 WAR player.

So, yeah, Mike Trout is pretty good at this baseball thing. Both ZIPS and Steamer project Trout for +4.1 WAR over the remainder of the year, which means he would finish at +8.4 WAR, which would be the fourth highest total for any player in their age-21 season. Expecting him to play 88 of the next 89 games and sustain this pace might be too much to ask. On the other hand, we’ve all been expecting Trout to stop playing at an all-time-great level for a while now, and when parts of his game get worse, he just makes up for it by getting better at other things.

I’ll always remember how amazing Albert Pujols’ 2001 debut was. Really, it was just a stunning season from a guy who spent the previous year in low-A ball. To just show up as a 21-year-old rookie and post a 159 wRC+ was incredible. Mike Trout, right now, is basically having Albert Pujols’ rookie season if Albert Pujols was also a great baserunner.

I think I’m going to stop putting a ceiling on what Mike Trout can do. The best 20-year-old ever might end the year as the best 21-year-old ever. We should appreciate what we’re seeing. No one has ever seen this before.

reBlog Sources

  • Get this list in XML (OPML)


Powered by
Movable Type 1.5 and ReBlog