The core premise is pretty simple: bb is a UI wrapper around your Claude Code (or Codex, etc.) sessions. It lets you spin up concurrent threads, and puts those sessions in the sidebar. It kinda looks like this:

bb’s secret power is that it’s nailed the ergonomics of authoring customizations (inline agents and plugin architecture). You can modify bb just as easily as modifying whatever codebase you’re working in!
For example, I love GitHub’s “Mark viewed” feature:

I can easily lose track of which files I’ve reviewed in bb, so I had bb spin up something similar:

Et voilà! If this isn’t magic, I don’t know what is.
Similarly, bb gives you a simple “Preview | Raw” by default for Markdown files:

I wanted to be able to edit Markdown files inline, so I had bb spin up a Markdown Editor plugin. The Raw view is now editable and has a save button:

So cool!
bb is a fascinating exploration of what “open source” means in 2026:
It’s not all smooth sailing, though: it’s a fair amount of effort to sort through all permutations of complex user experiences, and “delightful” isn’t yet the default description of the custom user interfaces.
Check out danielbachhuber/bb-plugins for my latest bb customizations. I’m publishing the ones I feel good about to the bb marketplace (search “danielbachhuber”). Let me know if you try it out, and what you end up building!
]]>If technology is generally deflationary, then AI might be massively deflationary? A big question seems to be: where does the value accrue? But it feels like a lot of the value is turning into consumer surplus. Businesses are stuck with having to compete even more aggressively in stagnant markets. Any productivity gains they see are fouled by the bottlenecks in their organization, or captured as worker surplus by their employees.
It seems like the truly valuable uses of AI are harder problems, or massive parallelization. Anyone who simply puts AI on the critical path between themselves and their day-to-day tasks ends up with mixed results. The latency cost of having to wait for the tokens to come back is generally too expensive. Orient towards harder problems, or working at a higher level of abstraction.
But what are the hard problems worth working on, and how do you make those problems accessible to more people?
I really, really want to experiment with the UI/UX of working with this intelligence substrate. At the moment, more concurrent work means more interfaces I have to switch between. English isn’t a programming language (yet) was a great read this week.
Robots are going to be the second, even more significant wave of AI. At the moment, the remaining work for humans is manipulating the real world. But in the same way humans have lost the cognitive race to AI, at some point robots will win the physical race too.
I feel like the best use of AI in writing is to review and critique what you’ve written. For instance, I had to draft quarterly performance reviews this week. Normally, it would have been a very laborious, dreaded, and painful process. AI did the busy work of collecting all of the supporting examples I needed, and gave me critical feedback on what I had written. In fact, there were multiple instances where my perception was different from reality, and AI caught it for me. The performance reviews ended up much better than what I could have produced on my own.
Web services need to have better support for delegated access to AI. For example, I want AI to act on behalf of me in GitHub, but clearly communicate when it is AI and not me, and only have access to a subset of what I can do. Similarly, I want to grant AI access to my entire Todoist account, but only let it create new tasks and leave comments on existing ones, not complete or delete.
I finally got Hermes Agent running yesterday. It is so much fun to use through Telegram. I am taking a “limited access by default” approach. It is running in a VPS and has its own Gmail, GitHub, and Todoist accounts. Yesterday, it helped me research lodging in the Hood River area for my wife and me. Our two preferred options aren’t available at the moment, so I then asked it to set up a cron job to check on a periodic basis and send me a message if it finds anything. Today, it’s going to turn this out-on-a-run + Whispr Flow + Simplenote draft into a blog post for me. Tomorrow, I might set it up to automatically populate our Fred Meyer grocery list from Todoist — another 15 minutes of weekly savings. Consumer surplus for the win!
This AI stuff is so, so very cool. Technology isn’t inherently good or bad; it simply provides humans with more capability. Ambition and imagination are the limiting factors. No one has any idea how this growth curve is going to play out.
Time for a couple games of lacrosse! Coaching Charlie this spring has been a ton of fun, and having a coaching staff is pretty much the best thing ever.
]]>
After over fifteen years as a faithful travel companion, I’m retiring my beloved 28L Patagonia Refugio backpack. The shoulder strap started tearing off and I’m too embarrassed to take it to the dry cleaner for another repair.
The 20L Evergoods Civic Travel Bag is its replacement. Interestingly, it seems to have a very similar functional volume to the Patagonia bag. I am extremely confused about how backpack manufacturers measure the volume of their backpacks.
I settled upon the Civic Travel Bag after a couple months of research, and a failed purchase of the Aer Travel Pack 3 Small. My key criteria:
AI was helpful-ish in my search. I think I came across the Evergoods brand thanks to Gemini. However, it also provided a lot of suggestions that didn’t really meet my criteria so I still did plenty of manual digging. The OneBag community on Reddit helped me the most, especially their crowdsourced spreadsheet which was invaluable for considering a range of options.
My one hesitation about the Evergoods bag: it is much stiffer than my Patagonia backpack. I think it will be fine in the long term but it’s made me realize how I much appreciated my Patagonia’s soft duffel-like nature.
A final note on the Aer Travel Pack 3 Small: it’s too big as a personal item. Obvious in hindsight, but not obvious if you’re shopping based on volume. I loaded it up for a recent trip, gave it one last look before going to the airport, and rightfully got cold feet as I realized I wasn’t going to get it past the gate agent. Nor was it going to give me any space at my feet.
]]>On December 26th, Leah, Ava, Charlie, and I cleaned up all of our Christmas decorations and then flew out to eat for twelve days in Hanoi, Bai Tu Long Bay, Can Tho, and Saigon. We never had a bad meal: bánh mì, bun cha, chả cá, nem nướng, copious amounts of seafood, and even really decent Mexican on our last night. Everything is fresh in Vietnam, and you notice it in the food.
Other trip highlights include:
I think Leah and I pride ourselves on being somewhat “off the beaten path” travelers. In the case of Vietnam, I was perfectly fine to stay on the tourist track. The tourist-specific areas we stayed in and the organized activities we did were delightful ways to experience the country. Additionally, so many people visit the country that it feels like it would be inappropriate to journey off trail.
But, there is one way visiting Vietnam was extremely uncomfortable: the shame of being an American. The violence we perpetrated on the country is very difficult to see, and even more unfathomable is how kind and generous its people still are. I was especially touched by how eager Mr. Bean was to tell me of the places he visited in the US while training for his two year stint as a South Vietnamese army helicopter pilot.
Lastly, if you do think socialism or communism are great political systems to aspire to, I’d encourage you to organize a protest in Vietnam and let me know how it goes. There’s a reason there’s very little crime in the country.
I took a lot of photos with my iPhone, but I like the few I took with my Nikon Zf the best.



Other people read books about storytelling. Spoiler alert! Here are my notes on everything I found interesting in The Science of Storytelling.
Resetting takes more than a one night backpacking trip.
Sometimes you need to put a fork in the electrical socket. Please don’t, though. It’s a metaphor.
I’ve eaten a lot of humble pie over the last 18 months. Here are some of the lessons I’ve learned the hard way.
While I was on winter break in December 2023, Matt pinged me and asked, “Would you be interested in running WordPress.com while I’m on sabbatical?” My initial reaction was “no, not really, it seems like a lot of work”, but YOLO was my MO at the time so I said yes.
“Drinking from a fire hose” is a certain form of drowning. Running WordPress.com was like drinking from the entire water main. I went from engineering team lead to being responsible for product development, marketing, customer success, etc. It was a unique learning experience, to say the least.
My guiding hypothesis was that we needed to implement some modern management practices to make the organization more effective. I love EOS, so I adapted some of its systems to Automattic’s culture. Unfortunately, I was wrong in the ways that matter most.
All problems are people problems, and you can’t reorg or delegate your way to solving them. I reorg’d the business twice during my 10 month tenure: once when I started in January, and a second time in May when I was dissatisfied with my first iteration. I thought the effectiveness problem was organizational alignment, but it turned out to be human performance.
Leading with vision requires picking the right challenge, then seeing if you can be even more ambitious. With the humility of hindsight, I oriented the organization towards where the puck was (WordPress hosting), instead of where the puck was going (AI-assisted website building). I needed to take a much bigger swing to have a material impact on the business.
Ultimately, though, my downfall was that I failed to thrive at the executive level. I did a poor job of building relationships and collaborating effectively with my peers. And when my leadership competency came under attack, I took stock of my energy, evaluated my priorities, and decided to move on.
Because I get really uncomfortable when I’m not working, I immediately went on an aggressive job search and ended up at PostHog.
I both loved and hated those six months. I loved it because PostHog has a bunch of really talented people (an obvious example of “talent compounds”) and I learned a ton. I hated it because building B2B software wasn’t what I wanted to be doing and my sleep issues got a lot worse.
On the learning front:
Importantly, the experience made me realize how much I enjoy learning, and that my knowledge had stagnated over the last decade.
But, it was the job I could do, not the job I wanted to do. My insomnia got worse, so I eventually left. In hindsight, I realize I should’ve taken the time to decompress, reflect, and wait for the right opportunity.
After PostHog, I thought I would spend the next several months watching the AI revolution unfold. I learned again, and finally internalized, that I really don’t do well sitting idle. This time, however, I was a lot more deliberate about my search.
The job market is really tough right now. With many companies mandating a return to office and a few years of progressive layoffs, there is a ton of competition for remote jobs. Additionally, those living in the U.S. are competing with international talent that is a lot cheaper.
As a candidate, it’s easy to feel that your challenge in finding a job is a reflection of your inherent self-worth. The reality is that there are many, many factors outside of your control. Even so, it’s worth doing the best that you can with the factors you can control.
Speaking as someone who is involved in the hiring process again:
In July, I started at New_ Public as the Open Source Developer for the Public Spaces Incubator. I really enjoy the people I work with, believe in our mission, and find the work rewarding. The past 18 months have taught me a lot: how to write a cover letter that stands out, why patience matters, and what it takes to be an effective leader. The lesson through all of it, though, is this: do the hard thing and survive long enough to get lucky.
]]>
I had little expectations and I’m genuinely surprised by how much I enjoy this device.
To set some context: I’ve had pretty bad insomnia over the last year. Both the “wake up at midnight and can’t fall back asleep” and “wake up at 2 am and can’t fall back asleep” kinds. Meds get me back to sleep, but they also make me groggy during the day, so I’ve been desparate to figure out a solution.
One recent realization is that maybe I shouldn’t blast my eyes with blue light first thing in the morning. For about a decade, I’ve been waking up at 4 am and starting my work day by immediately jumping on the computer. I then get increasingly short-changed on sleep as the week progresses, and end up exhausted on Friday.
Enter the Boox Go 7, an Android device with e-ink display that retails for $250. I was stuck between “I want to delay my blue light exposure” and “I want to be able to read and write when I wake up”, and it solves my needs… perfectly?
First of all, it kinda works exactly how I want it to. Because it runs Android, I can install the apps I want from the Google Play Store: Instapaper, Simplenote, etc. In fact, I even found an RSS reader, Capy Reader, that seems to be a good clone of my favorite iOS RSS reader, Reeder. Each of the apps work well-enough, albeit with minor quirks. For example, I’m typing this into Simplenote with a Bluetooth keyboard. The app is responsive and screen refresh rate sufficient.
This brings me to a subtle point: I actually think the device has ample power under the hood. When I think “e-ink device”, my stereotype is “underpowered device.” I think it’s actually “quite a powerful computer hiding behind an e-ink display.”
The combination of these two makes the Boox Go 7 a surprisingly delightful device. Computing on an e-ink display is a lot calmer than a full color display. I’m able to read and sit and think without getting pulled into a dopamine slot machine. I originally thought the screen might be too narrow, but the horizontal device orientation (buttons on the bottom) is a great screen width for text.
The downsides of the device are simply a collection of quirks. For example, Instapaper has a pagination feature that works well with the hardware buttons. Capy Reader, on the other hand, only supports scrolling with the hardware buttons and scrolling on an e-ink display isn’t particularly smooth. As another example, for whatever reason, CMD + Shift + arrow key doesn’t select an entire line of text in Simplenote. I’m not sure if that’s an app thing or an OS thing.
But I can live with the quirks because the Boox Go 7 brings me joy in many ways. If I was writing on a laptop, I would’ve already been distracted by now. However, on this pleasant screen with a CPU and memory, I’m able to sit and write for a full 60 minutes. The Boox Go 7 is unexpectedly awesome.
To close the loop on the insomnia: this week (knock wood) is my first great sleep week in many. In addition to delaying when I jump on the computer, I’ve also stopped wearing my watch at night (to track my sleep) and started going to bed later (9 pm instead of 8 pm) to build up more sleep drive. Life’s a lot better on a good night’s sleep!
]]>I love “shaping” so much that David Calhoun and I ran an entire “Better Project Planning in 90 Minutes” workshop on it at the Dotcom Division Meetup in November 2023, and then an encore virtual workshop in December 2023. We presented these six concepts:
Importantly, you can take these as a “choose your own adventure.” Adopt them piecemeal based on whatever pain you’re experiencing, or simply use the language to influence your existing process.
Super grateful to the folks at Automattic for giving me a copy of the slides so I could share them with my new team at New_ Public.

For example:
Thankfully, we had a few great audio books (Space Case was our favorite) and an endless supply of Extra Watermelon gum.
Ava’s trip highlights:
Charlie’s trip highlights:
My trip highlight: countless hours exploring with my kids.

If you need inspiration for your next pizza party, here are the topping combos we enjoyed, ordered by my current preference:
All in all, I prepared and cooked 18 pizzas in ~90 minutes on my Ooni Koda 16. Counter-intuitively, many guests learned that the best way they could help was simply to clear the path between the kitchen counter and the oven. Maintaining my flow state is a key ingredient to the final product.

Some initial first impressions:
It was pretty easy to import my OPML file into Pocket Casts to migrate all of my podcast subscriptions. Overcast lost the OPML export button in the redesign, but I was able to download it from the website.
Using Pocket Casts feels a little bit more like programming a control panel. There are a ton more settings and concepts. For example, there are both folders and filters. I’m not sure why I would use one vs. the other. I tried to create a “Pinned” folder to recreate Overcast’s pinning feature, but it just put the podcasts in a folder that got lost on my screen.
I’m not sure how Pocket Cast’s audio engine stacks up against Overcast. Time to take a walk and test that out.
You might ask, “but Daniel, don’t you work for Automattic? Why haven’t you been using Pocket Casts all along?”
I actually did try to make the switch before. I ran into some buggy behavior with the CarPlay integration, and couldn’t adjust to the overall UX complexity.
Between then and now, Overcast became more difficult to use, and regularly fills up my device storage because auto-delete seems to be broken. Time to make a switch!
]]>First, never use a one-size-fits-all decision-making process. Many decisions are reversible, two-way doors. Those decisions can use a light-weight process. For those, so what if you’re wrong? I wrote about this in more detail in last year’s letter.
Second, most decisions should probably be made with somewhere around 70% of the information you wish you had. If you wait for 90%, in most cases, you’re probably being slow. Plus, either way, you need to be good at quickly recognizing and correcting bad decisions. If you’re good at course correcting, being wrong may be less costly than you think, whereas being slow is going to be expensive for sure.
Third, use the phrase “disagree and commit.” This phrase will save a lot of time. If you have conviction on a particular direction even though there’s no consensus, it’s helpful to say, “Look, I know we disagree on this but will you gamble with me on it? Disagree and commit?” By the time you’re at this point, no one can know the answer for sure, and you’ll probably get a quick yes.
I find the concept to be particularly helpful in software development. When shaping a project, my goal is to get to 70% confident on these criteria:
I use the concept actively, too. Here’s an example dialogue with a teammate:
Me: What’s your current level of confidence with the proposed project?
Teammate: Oh, maybe 50%.
Me: What additional information would get you to 70% confident?
Teammate: Well, I’m still uncertain about X and Y.
Me: Ok, let’s explore those further.
Applied to software development, “70% confident” is both subjective and objective:
“70% confident” is a useful communication tool for finding the sweet spot between not enough planning and analysis paralysis.
]]>Being in charge is a lot of work! Fortunately, my leadership team is growing stronger by the day, and we have clear metrics and objectives in place. Here are two aspects of the role I’m discovering quite viscerally:
It’s a performance. The clothing I wear, what’s in my background, and my audio quality all have an impact on how people perceive me. As much as I love it, my TuHS Boys Tennis sweatshirt from 2005 is no longer work-appropriate.
I need to bring my “A” game every hour of every day. Is there any downtime? Only when I force myself to take downtime.
Speaking of, Leah and the kids are headed up to the mountain right now without me. In a funny twist of fate, February also marks the month Leah has her rural rotation in Coos Bay. I was in “solo dad mode” all week so, as much as it pains me to miss skiing, I’m taking a “me day” to reset.
Time for some soccer!

Slack on my phone makes it easy to sneak away and support The Blazing Books at OBOB (Oregon Battle of the Books).

I still love my “I commit to” from my time at TinyBit.

Leah and I had a fun time celebrating Matt’s birthday, and I stayed up waaaaaay past my bedtime.
My leadership style emulates how I think about soccer. A soccer match has a team, a ball, and one goal. Every person has a position to play, but they must also pass and be aware of the entire field. They will only win if they play together as a team. So, when leading, my mind is always asking: how can I improve the performance of the team?
Ted Lasso is the greatest show I’ve ever seen. Aside from it, here are some books that have influenced how I lead (and when I read them):
Turn the Ship Around!: A True Story of Turning Followers into Leaders (January 2022). I can’t do everything and can’t know everything. In order to have a high-performing team, I need them to come to me with “I intend to”, not “what should I do?”
The Five Dysfunctions of a Team (January 2022). They are: absence of trust, fear of conflict, lack of commitment, avoidance of accountability, and inattention to results. If you’re on a team, reading parts of this will be like looking in the mirror.
The Making of a Manager: What to Do When Everyone Looks to You (November 2022). Chock-full of practical tips drawing from a number of classics. Here are my 43 highlights.
High Output Management (September 2022). One of the classics indicated above. Two key ideas: 1) performance is a function of training and motivation, 2) a manager’s output = the output of his organization + the output of the neighboring organizations under his influence. Everything is a production line, whether you like it or not.
Extreme Ownership: How U.S. Navy SEALs Lead and Win (August 2017). I always enjoy war stories. As someone who has the tendency to micromanage, “extreme ownership” was my first “aha” moment about the importance of delegation.
Crucial Conversations: Tools for Talking When Stakes are High (December 2016). Start with heart!
I’ll close with this distinction between leadership and management from my current read, Scaling People:
Great leaders put forth a vision and set lofty goals that inspire others to forge ahead, even when the path isn’t always clear. The clarity of their vision keeps everyone focused on the big picture and sustains participation and motivation. Leaders don’t have to be managers, but if they aren’t, they need to know how to work with and hire managers to build the right teams to execute that vision. It often feels like leaders are asking for just a bit too much, but in the end, that’s what provides motivation.
Great managers run teams that do the actual building. Management is all about human-centric execution. Great managers know how to define goals and set operational cadences, all while helping each report have a clear view of their current performance and future career aspirations. Teams with great managers have a high level of trust, experience the challenge and reward of hard work, and feel like they’re making progress both as individuals and as a team.
Hope you find some of these as impactful as I have!

Lunchtime soccer crew, November 2019

VIP on a boat, February 2012
Happy birthday, Matt! Thank you for your dedication to WordPress over the years. It has enabled my entire career, allowed me to raise a family I love, and connected me to people all around the globe.
WordPress helped Andrew Witherspoon and I launch a website for the Whitman Pioneer:
… In the meantime, though, why don’t you check out the Whitman Pioneer? It’s a project I’m working on actively, and I would love any feedback you can give me!
Spittle eventually took that over.
I was apparently really into open source right away, too:
This is the first in what I hope to be a series of articles on applying the concept of “open-source” to a non-profit organization.
A month or so ago, I was hit with the notion that the open-source movement might be applicable to systems beyond software…
A year later, I thought WordPress would be a great fit for the Daily Emerald:
…While I recognize there are already many content management systems on the market, my paradoxical goal is for a platform as easy to use and install as WordPress, which also offers advanced management features…
And so the story goes.
In any case, I hope you have a great birthday and an excellent year ahead of you. 😊 Thanks for everything you’ve helped make possible!
]]>It’s hard to pick highlights from the year when the entire year was a highlight. My kids are the perfect age, and we make the most of every day.

Leah and I organized a Newspaper Club at Bridgeport this fall. Over several Wednesday afternoons, the kids learned how to interview, write an inverted pyramid, and draw comics. A local journalist even visited! At the end, we published their best work in a four page edition of The Barking Bulldog.

Leah and I celebrated our 10th wedding anniversary in September with a three night stay at Minam River Lodge. The lodge is one of the four remaining private properties in the Eagle Cap Wilderness and is only accessible by foot, horse, or small aircraft. The food is even more amazing than the location. First, imagine a nice, four-course meal in Portland. Next, imagine having such a meal for breakfast, lunch, and dinner for three days straight. My favorite was the carrot gnocchi with brown butter sauce, toasted sage, and chanterelles.

In October, we visited Taos for a long weekend to celebrate Will and Ariel’s wedding. It was a super fun opportunity to connect with old friends. The kids hiked to 11,040 feet! We had a great time exploring the town, and soaking in our hot tub under the vast, dark night.

Charlie and Ava both had great spring and fall soccer seasons. Coaching them is always a joy. One favorite moment: in the last couple minutes of Charlie’s final game, I said “go score a goal” and he quickly went on to nail an impossible shot.

I flew through Heathrow several times for work this year. My reward for completing the red-eye was sushi from Itsu — always a fun treat. I sent a picture each time to make sure Leah, Ava, and Charlie knew I was eating sushi.



Skiing was fantastic last winter. I made it up to the mountain for multiple deep powder days (my friend Jordan pictured on the top left). We also had a great time taking the ski bus as a family, and Ava did her first black diamond (twice!).
According to Goodreads, I’ve read 29 books so far this year. This is the second year I didn’t hit my goal of 35, so I think I’ll drop it to 30 next year. My favorites were:
Elon Musk. It’s funny to me how some people have such strong opinions about Elon. He’s just a human like the rest of us! But his production function is amazing and, while I don’t aspire to it, I am inspired by it.
Command and Control: Nuclear Weapons, the Damascus Accident, and the Illusion of Safety. We are very lucky there haven’t been any accidental nuclear explosions (knock wood).
Damascus Station. A pretty darn fun spy thriller.
My running is way down this year but my soccer is way up! According to Strava, I ran 366.8 miles in 65 runs (average of 5.64 miles per run), played soccer 48 times for a total of 50 hours, and swam 79 times for a total of 50 hours. I also lifted a couple days a week. I’m pretty fortunate to be able to work out seven days a week.
According to TripIt, I traveled 53,908 miles in 56 days on 9 trips. The destinations included NYC, Switzerland, Germany, Austria, Costa Rica, Barcelona, Alaska, Washington, D.C., Taos, and Munich. Working with a European team has meant a fair bit of international travel.
The biggest thing coming up in 2024: Leah’s graduation from NP school (knock wood!). We’re super proud of her ability to balance life and school, and looking forward to seeing where she takes her career.
Aside from that, I’m excited to try out Nodoguro in January, survive solo dad mode in February, and take the kids on a longer backpacking trip in the summer.
YOLO!
]]>
I’ve always been curious as to why we go over budget. “Overspending” is an obvious answer, but not particularly helpful. Has food gotten more expensive over time? Do we have certain indulgences that are major contributors? Is $1400/month simply a fantasy?
Additionally, with the tech industry where it’s at, the specter of layoffs is never far away. If I were to get laid off again, our “war budget” cuts us down to $1000/month for groceries.
To start exploring, I exported this year’s Grocery transactions to CSV, uploaded them to Google Sheets, and produced this breakdown:

Ok, May definitely seems to be the outlier. It looks like a wild month at New Seasons drove it up a couple hundred more than normal. Generally, when we go over budget, it seems like we overspend by $150-$250.
Marginally helpful, but not yet actionable. One thing I do know is that New Seasons tends to be 50% more expensive than Fred Meyer. If we switched exclusively to Fred Meyer, we could save $70/month right there (30% of $200/month average spending).
Because I’ve been curious about our grocery spending for a while, I’ve saved most of my Costco receipts over the last year. I also have access to most Fred Meyer receipts from their website. I collected them to a folder and used ChatGPT to parse April’s and October’s:
Parse the receipt into a CSV with these columns: date (YYYY-MM-DD), store, item name, item size, item code (number), number of units, price per unit, total amount for the item, and category. Please include the full receipt data set in the CSV.
Putting this receipt data into Google Sheets produced this summary:

Before analyzing, it’s worth highlighting a couple limitations:
The data doesn’t represent 100% of the month’s overall spending, nor does it represent 100% of spending at each store. I was missing some receipts, and I also didn’t validate ChatGPT’s parsing.
We tend to buy in bulk, so I’d really need several months of data to know what our true monthly spend was for a given category. As a simple example, a Costco bag of flour lasts 2-3 months.
With those caveats applied, here’s what stands out:
We buy Kerrigold (the most expensive) butter at Costco. We could probably save $20/month by choosing the low cost alternative.
We spend roughly $200/month on fruits and vegetables. Because they have a short shelf life, I imagine we waste $60/month of that. We could save there, but it would require a fair amount of conscious thought.
We don’t buy super fancy meat, but we could probably save $30/month by eating less of it.
I don’t normally buy health supplements out of the grocery budget. In October, I bought some magnesium supplement and haven’t used it. $30 wasted right there.
We spend a lot of money on snacks ($150/month average). We could probably cut that in half to $75/month. I’m not sure what the substitution would be, though.
Seafood is a luxury that we could purchase when we explicitly have the budget for it.
The primary levers seem to be:
Is it a luxury or indulgence?
Is there a lower cost alternative?
How much are we wasting?
Definitely no silver bullet, though.
If we applied all of these constraints to October, we would’ve spent $1,252.99 instead of $1,577.99 ($325 savings). That’s under our $1400/month budget, but still a bit from our $1000/month “war budget”.
]]>For Ava, ziplining was the highlight of the trip. She asked about it repeatedly until I realized I would have to produce the goods. In addition to ziplining, Charlie also enjoyed surfing (which was “nice and cool”). Leah managed to catch a wave in the first five minutes but it took me the entire 90 minute lesson. Food-wise, simple was the best: Leah and I ordered “comida tipica” once or twice a day (black beans, rice, chicken or steak, plantain, and a salad).
If you care to fork our itinerary, here’s what we did:
Spent two nights at Arenal Observatory Lodge, one night at Camino Verde Bed & Breakfast in Monteverde (could’ve been two), and three nights at a fabulous Airbnb in Tamarindo (“tamagringo” is a correct nickname for the city).
Had a lovely afternoon at Eco Termales Hot Springs near Arenal.
Ziplined the Sky Adventures Sky Trek in Monteverde, and then did the Kinkajou Night Walk in the evening.
Rafted Rio Corobici with RCR Rafting on the drive to Tamarindo and saw crocodiles, howler monkeys, bats, and a variety of birds.
Caught some waves on our last full day with Avellanas Soul Surf School.
Overall, an A+ vacation, and we’re already looking forward to a week of surfing on our next visit.

The normal side of the family.

The other normal side of the family.

If you’re ready to leave after three hours in a hot springs, you’re not relaxing hard enough.

We decided not to drive this road in our rental car.

Not pictured: the several hundred feet between them and the ground.

Thirty seconds before we spotted the crocodile.

See if you can tell who is the pro and who is the beginner.

Waiting for pizza at La Baula on our last night.
In classic fashion, I broke trunk tests because I missed a test file: r55280.
I ran npm run grunt patch:https://github.com/WordPress/wordpress-develop/pull/3796 but I guess the binary isn’t included.
Looking forward to helping with some bug fixing!
]]>
Earlier this week, the WSJ included my story in an article about noncompetes:
Daniel Bachhuber had worked as a software consultant for years when he decided to take an in-house job in the fall of 2018. His new employer required that he sign a one-year noncompete agreement, which he said was so broad it would have prevented him from practicing his core skills if he were to leave the company or be fired.
Mr. Bachhuber balked. Earlier in his career, he had been laid off a few weeks into a new job, just after his first child was born. If that happened at the new job, he recalled thinking, he would be unable to earn a living for a year. “I’m always thinking, worst case scenario, what kind of downstream protection do I have?” the 35-year-old said. “Even if I was employed just one day, I couldn’t go back to the same clients I had.”
It’s pretty cool to help shape public policy! The reporter and I connected after she came across public comment I left for the FTC back in January 2020.
I’m pretty sure I heard about the original request for comment from Marginal Revolution, so seeing MR link to the article really made my day:


These days, I optimize for making the most of every day. Did I squeeze the juice out of every moment?
My kids are the perfect age, which makes life seem even more precious and fleeting.

As we walked up to Baby Beach in June, I saw a dad shouting to his family, “come check out the turtles!” He was standing waist deep in water about 30 feet offshore. I quickly helped Ava and Charlie get their snorkeling gear on, and we got to swim with them too.
Good thing my iPhone turned out to be waterproof!

In May, I rejoined Automattic as an engineer working on WordPress.com. It’s been an unexpectedly delightful experience, thanks in large part to the folks on the “Forge Bowling Group”.

Coaching Charlie’s soccer team this fall was a rewarding experience, as always. Part of the way through the season, I realized we could avoid a lot of goals if they didn’t have a turnover directly in front of their goal.
After that point, “to the outside!” was all the parents ever heard from me. But hey, it worked!
According to Goodreads, I’ve read 31 books so far this year (not quite my goal of 35).
My favorites seemed to be business books. The Making of a Manager: What to Do When Everyone Looks to You is chock full of practical tidbits, including this one:
Here are some ways to tell if your team is executing well:
Lists of projects or tasks are prioritized from most to least important, with the higher-up items receiving more time and attention.
There is an efficient process for decision-making that everyone understands and trusts.
The team moves quickly, especially with reversible decisions. As Amazon CEO Jeff Bezos says, “Most decisions should probably be made with somewhere around 70% of the information you wish you had. If you wait for 90%, in most cases, you’re probably being slow.”
After a decision is made, everyone commits (even those who disagree) and moves speedily to make it happen. Without new information, there is no second-guessing the decision, no pocket vetoing, and no foot dragging.
When important new information surfaces, there is an expedient process to examine if and how current plans should change as a result.
Every task has a who and a by when.
Owners set and reliably deliver on commitments.
The team is resilient and constantly seeking to learn. Every failure makes the team stronger because they don’t make the same mistake twice.
From High Output Management, my favorite idea is that everything relating to human performance boils down to either training or motivation. “Is this a training issue or a motivation issue?” is a hugely powerful lens.
Lastly, Turn the Ship Around!: A True Story of Turning Followers into Leaders is an enjoyable read to understand what the transformation to a highly-effective organization can look like.
According to Strava, I ran 612 miles in 101 runs (average of 6.06 miles per run). Compared to years prior, I am spend a lot less time running. My typical exercise week these days: lift, swim, run, lift, soccer, swim, run.
According to TripIt, I traveled 24,770 miles in 53 days on 11 trips. The destinations included Scottsdale, Chicago, Minneapolis, Alaska, Hawaii, San Diego, Boston, and Denver. I guess TripIt includes driving destinations too? That list doesn’t add up to 11.
YOLO!
]]>In that spirit, here are a few good things I can heartily recommend:
prAna Vaha shorts ($69 $40). More comfortable than sweatpants, and somewhat stylish to boot. Also on sale at REI.
Blue Lotus chai ($19). Spicy deliciousness. Pairs nicely with Oatly. Boost the sweetness with stevia to get pretty close to the real thing. I use a Breville milk frother ($160) to mix it all together.
Blundstone boots ($220). Boots that make you feel like you’re driving a truck instead of a car.
Audio-Technica ATH-M50x headphones ($149). Solid sound at a reasonably affordable price. Great for planes too, no noise cancellation necessary.
If you have no idea what to ask for (or give) this holiday season, hopefully this is a helpful list!
]]>Someone on Twitter asked about what it’s like, so I thought I’d answer their questions in a blog post.
My freshman year (2006) was a big turning point when I:
Applied to six unpaid photojournalism internships and didn’t hear back from a single one.
Applied to one paid web production internship (Grist) and was accepted.
My parents raised me to be pragmatic about work, “you’ll need to find a job that supports your expensive hobbies”, so this experience made it clear to me where the money was.
Even so, after my freshman summer with Grist, I:
Started on my pilot’s license, then ran out of money.
Started CoPress, a hosting company for student newspapers. It eventually folded.
Interned for Publish2, a news tech startup. It eventually ran out of money.
Did poorly at university, took a couple long breaks, and never ended up graduating.
Then, the summer of my “senior year” (2010), I lucked into a full-time job with the CUNY Graduate School of Journalism. I did that for about a year before moving back to Oregon and joining Automattic for the first time.
My career since then has largely been at the intersection of media and technology.
Location-independence was the big draw the first time I joined Automattic. My other job prospects at the time were location-based — Chicago Tribune, The New York Times, and The Boston Globe. I generally prioritize life over work, so I chose the “work remotely from Oregon” option.
More recently, after I was unexpectedly laid off in April, my priority was to find a stable J-O-B. I didn’t really think I’d go back to a company I already worked for, but the stars aligned and I rejoined Automattic in May.
It’s turned out better than I expected! In particular, I really enjoy my team, and that we get to work on some ambitious projects. Plus, I’m generally able to achieve my optimal work/life balance.
Today is actually fairly representative:
Woke up around 4 am, made some chai, started catching up on P2 conversations.
Once I had my bearings for the day, I reviewed one pull request and spent a couple hours on another. Our codebase is a melange of JavaScript and PHP.
Watched a division townhall where they reviewed financial performance and a couple recent product releases.
Went for a swim.
Raced back from the swim to join a technical discussion about an upcoming feature.
Showered, made a smoothie, and headed into my office, where I’m now working on this blog post.
Some days are more code-heavy. Others, like today, are some combination of code and coordination.
I have no idea!
]]>While visiting our good friends Shane and Angela in Boston, this meant…

Taking a moment to watch planes take off before we took off…

Playing Codenames until 11 pm…

Learning Sushi Go! and a half dozen other games…

Bowling the New England way (candlepin)…

Eating shakshuka from Tatte…

Eating cannolis from Mike’s…

Walking all around town…

… and generally having a great time.

Until next time, Boston!

Strava-official.
As I learned the hard way, running the Timberline Trail is really hard. I’m proud to report I completed all 41 miles with 9k feet of elevation gain in 14 hours 33 minutes. Plus, I was fortunate to do it with a great crew (Nick, Michael, Jordan) on an absolutely gorgeous day.
For the unacquainted, the Timberline Trail is a big ol’ loop around Mt. Hood. Most people take 3-4 days to backpack it, enjoying the incredibly diverse ecosystems and views around the mountain. The more hardcore folks (and saps who get suckered into it) try to run it as fast as they can. And if the distance and elevation isn’t hard enough, there are about 20 steam crossings to contend with and the trail quality can be quite variable.
The key to completing? Don’t bonk. If you let your body end up in a depleted state, you’re a goner. For me this meant:
If you do bonk, you might be 10 miles from a trailhead. So don’t bonk.

The fearless crew: Daniel (me), Jordan, Michael, and Nick.

A birthday morning trail run up Fall River Trail.
I turned 35 yesterday! In no particular order, here are 35 things I’m grateful for:
For example, yesterday I discussed user research with Marko, my new lead. Here’s how I framed my perspective:
“A good outcome would be:
A bad outcome would be:
Boom! Immediate clarity to the conversation. If we agree on the desired outcome, we can start brainstorming how we get there. If we don’t agree on the desired outcome, there’s no point in endlessly talking about what we might do.
All too often, a discussion turns into an argument because Person A is talking about apples and Person B is talking about oranges. “Good outcome, bad outcome” is an amazingly effective way to create clarity and gain alignment.
Forever grateful to Justin Kistner for the hack.
]]>What problem are customers having?
What are customers doing to address this problem today?
What do customers dislike about their current solution to the problem?
Please include any supporting research (user interviews, cancellation feedback, etc.)
How are you measuring success? Is it feature adoption, feature satisfaction, or impact on top-level growth, expansion, or retention metrics? Use specific numbers when possible.
A high-level description of how the problem can be solved. It can include images, mockups, fat marker sketches, wireframes, etc. Ideally, it de-risks implementation by identifying and addressing all of the core elements of the feature.
How many design, development, and project management hours will this project require?
Any open questions we’ll need to address before proceeding to the next stage.
Like coding, teaching is hard to do well. I’m still very much a newbie. For lack of a structured opportunity to learn, I’ve always cobbled bits together from what others have passed along. In that spirit, here are some of my lessons from the past two weeks.
ScratchJr is a great place for younger kids to start. After watching a 4 minute YouTube introduction, they understood the interface well-enough to start. In the first week’s session, they started with the drive across the city and run a race challenges. After they successfully completed those, I handed out ScratchJr Coding Cards to each table. In the second week’s session, moving a frog up the stairs with a loop turned out to be much more of a challenge than I had anticipated. Afterwards, they created their own challenge for a neighbor.
Intentional design decisions are a point of leverage. Each kid sits in a table of three. If they have a question, they have to ask one of their table mates before flagging a helper. This approach reduces burden on the helpers, gets them an answer quicker, and creates an opportunity for kids to be a teacher too. Additionally, we intentionally limited the club to 15 students from kindergarten through second grade, which is very manageable.
Even though I plan a few days ahead, I still feel like I’m flying by the seat of my pants. For next week’s session (the third in the series), we’re moving on from ScratchJr to code.org. However, instead of starting at the beginning of the curriculum, I picked out a lesson based on where I think the kids are at. Will it blend? We’ll see!
I would love to have access to a library of engaging “what is coding?” videos. At the beginning of each session, I spend 10-20 minutes introducing core concepts: languages, algorithms, loops, functions, etc. To help reinforce the idea, I try to tie it to a real-world example. However, I’d much prefer to show a hip, entertaining 3-5 minute video — the SchoolHouse Rock version of “what is a function?”.
]]>“Done is” bridges this gap by offering a lightweight style for explicitly defining acceptance criteria at the end of a task:
My awesome task
A ton of great detail about the task.
Done is:
- Simple sentence describing the first acceptance criteria.
- Another sentence describing the second acceptance criteria.
- A third acceptance criteria if there is one.
A missing definition of done can easily cause a rift between the task creator and the task implementer.
The rift starts when the implementer thinks they’re done and hands off the work for review. The creator becomes irritated when they discover the work is missing pieces P, Q, and R. The rift gets worse when the implementer knows they need to add P, Q, and R, but also realizes there might also be an unstated S, T, and U.
The root cause of this frustration? Implicit information that could’ve been explicit.
Later this morning, I need to make lunches for my kids. In our project management system, the task might look like this:
Pack Kids’ Lunches
Ava prefers half a bagel with cream cheese, and Charlie likes a bean burrito. The lunch boxes are under the sink.
The task title is good because it’s actionable, and the task description has useful context. However, there’s lots of important but unstated nuance.
Adding a definition of “Done is” makes the end deliverable even more explicit:
Pack Kids’ Lunches
Ava prefers half a bagel with cream cheese, and Charlie likes a bean burrito. The lunch boxes are under the sink.
Done is:
- Each lunch has a fruit or vegetable, a main item, and a secondary item.
- The lunches have passed the kids’ inspections.
- Each kid has a lunch packed in their backpack.
Over the last several years, I’ve found “Done is” to be an incredibly helpful communication tool.
“Done is” provides a simple mechanism to explicitly define a task’s, often implicit, acceptance criteria. The list format makes it easy to skim as work progresses. Furthermore, it can act as a bellwether for the quality of a task. If “Done is” has more than five bullet points, the task may need to be broken down into smaller pieces. Or, if it’s difficult to communicate what “Done is”, the task may need further consideration.
“Done is” makes it obvious what done is.
Many thanks to Samuel for the introduction.
]]>WordPress tries to be helpful by automatically making your images responsive. It adds sizes and srcset attributes to each <img> to ensure a properly sized file is used at each screen width. Unfortunately, these values are almost always incorrect.
Even worse, there’s no easy fix. Responsive images are one of those historically complex, oft-misunderstood frontend development topics. Or, at least, they have always been difficult for me to understand. Recently, to solve Google Lighthouse’s “Properly size images” warning for our sites, I jumped in anyway, pushed through the misery, and finally figured out a solution.
This epic journey all came about because of the “Properly size images” warning in Google Lighthouse. When Google Lighthouse complains your images aren’t properly sized, it’s saying you are using too large of an image file for how the image displays on the page. Google Lighthouse inspects your page in a simulated Moto G4 browser, but the problem can exist across all browser widths.
Let’s dive into a specific example.

In the example above, the image displays at 300 pixels wide by 200 pixels tall. However, the image file is 640 pixels wide by 480 pixels tall. The image file is too large for the browser viewport. When the size of the actual file exceeds the size of the expected file by 4kb or more, Google Lighthouse flags it as an improperly sized image.
“OK, easy to fix. I will simply resize the image to 300 pixels wide by 200 pixels tall. Boom: problem solved.”

Not so fast! The problem is more complex than that. Because the image appears at various widths as the browser width changes, the file variations you include need to accommodate the responsiveness of the design as well. Additionally, you need to make sure the image has 2x and 3x versions at each browser width for high density displays.
The solution is responsive images, but now you have two problems.
sizes attributeThe mistake I’ve always made is to shove more image widths into the srcset attribute and call it a day. I assumed WordPress’ automatically generated sizes attribute was correct, and a manually prepared sizes attribute was a nice optimization.
In reality, having the correct sizes attribute is critical. The sizes attribute tells the browser how the image will be displayed at various browser widths. Only once you have a correct sizes attribute can you know what image widths you need in the srcset attribute.
Let’s look at our prior examples again.

Calculating the sizes attribute requires knowing how the image displays at various browser widths. In the first example, the image displays at 100% of the browser width. Because this is the mobile version, we can use 100vw (100% of the viewport width) as the default value for the sizes attribute: sizes="100vw". In the second example, the image displays at 50% of the browser width. We’ll add it to the sizes attribute with a media query: sizes="(min-width: 1024px) 50vw, 100vw". Simple, right?
Unfortunately, it’s a total pain and relatively error-prone to manually calculate the sizes attribute. Responsive site designs are rarely as simple as the example above. Plus, you’ll likely have a dozen or more images on a page with varying presentations.
Fortunately, an awesome open source project called Responsive Image Linter can calculate the sizes attribute for you. Thank you Russell Heimlich for the tip. Simply install the bookmarklet, run it against the page, and it shows an analysis for each image:

Once you’ve applied the suggested changes, your image will pass the lint:

When I’ve manually calculated the sizes attribute in the past, it was pretty much always wrong. With Responsive Image Linter, I get the sizes attribute correct on the first try!
srcset widths after the sizes attribute is correctNow that your sizes attributes are correct, it’s possible to calculate the necessary srcset widths for your images. But what should they be?
Responsive Image Linter saves the day again! A couple weeks ago, I opened an issue suggesting Responsive Image Linter provide recommended widths for srcset images. The maintainer, Martin Auswöger, thought it was a good idea and was open to sponsorship for it.
Responsive Image Linter now suggests recommended widths for srcset images:

Identifying these best widths is more of an art than it is a science. Here’s a summary of how Responsive Image Linter’s algorithm works:
When the linter runs, it resizes the viewport (browser window) to many different dimensions and checks how large each image is for each viewport.
The calculateSuggestedDimenions algorithm then takes this data and searches for image widths that appear often. These sizes are most likely statically sized images (non-fluid) and their exact widths are added to the recommendation list as @1x and @2x versions.
Next, it adds the lowest and largest measured size of the image to the recommendation list too.
From this list it then removes sizes that are less than 0.2 megapixels apart. Gaps in that list of sizes that are larger than 0.75 megapixels get divided into equal parts of less than 0.75 megapixels.
At the end of all of this we get a list of image widths where every gap between them is from 0.2 to 0.75 megapixel large. And for the non-fluid sized parts of an image we have an exact match for @1x and @2x screen resolutions.
As of January 2022, what’s going on in Google Lighthouse is actually much simpler than Responsive Image Linter’s algorithm. When Google Lighthouse shows the “Properly size images” warning, it is only looking at one viewport width (that of the Moto G4). For a given image, Google Lighthouse computes the actual pixels displayed (width and height), compares this value to the total number of pixels in the file, and throws a warning if the difference between the two exceeds the 4kb threshold. This may change in the future.
For additional context, here are a few other helpful links I came across in my research:
The primary pages on our sites now pass the “Properly size images” check. It took a good amount of effort though, so I identified some strategies to streamline the process.
sizes or srcset until your design is completeWhen building a new page, I think it’s best to not bother with the sizes or srcset attributes until the design is complete. Because they will change as the design changes, it’s simply extra work to prematurely optimize your images. Once the page is complete, run Responsive Image Linter to identify the necessary sizes and srcset attributes.
Apply sizes to template images by passing it as an argument:
<?php
echo wp_get_attachment_image(
$thumbnail_id,
'thumbnail',
false,
[
'class' => 'rounded-full w-20 md:w-24 h-20 md:h-24 mb-2',
'sizes' => '(min-width: 780px) 96px, 80px',
]
);
For images in the post content, you’ll need to filter wp_calculate_image_sizes. I’d suggest adding the filter early on the_content, and then removing it late, to avoid having the filter impact other parts of your theme.
For images hardcoded into the theme template, my preference has always been to commit the images directly into the Git repository. I wrote a little script to streamline the process of creating the necessary image widths:
$ wp tbc generate-image-widths --widths=270,560,890 --compress assets/images/tasty-recipes-sales/cards/elegant.png
Generated elegant-270x325.png (47kb->14kb)
Generated elegant-560x675.png (169kb->48kb)
Generated elegant-890x1073.png (365kb->103kb)
Success: Image widths created.
The --compress flag throws the image against TinyPNG, which somehow is able to magically compress the image much more than WordPress can.
add_image_size()For images embedded into the post content, WordPress will dynamically assign sizes and srcset attributes as the post is rendered.
For the sizes attribute, there’s one thing to be aware of: unless you’d like to calculate the value for each image in the post content, the sizes will almost always be incorrect. Images can be varying widths within the post content. I think the best thing to do is to figure out the sizes attribute for an image that is 100% of the post content width, and use that for all of the images.
For the srcset attribute, WordPress inserts any “thumbnails” (size variations registered with add_image_size() ) that match the proportions of the original image. The defaults are somewhat sufficient out of the box. If they aren’t, your options include:
add_image_size(), and then “regenerate thumbnails” for all of the images in your Media Library. The latter can be hours of script execution on a larger site.We ended up doing a combination of options 2 and 3. For the most part, I added another image size or two on each site. On Pinch of Yum and Food Blogger Pro, we’re using Cloudflare to dynamically generate a few additional image widths:
add_filter(
'wp_calculate_image_srcset',
function( $sources, $size_array, $image_src, $image_meta, $attachment_id ) {
$full_src = wp_get_attachment_url( $attachment_id );
if ( ! $full_src ) {
return $sources;
}
$widths = [ 480, 680, 960, 1080 ];
foreach ( $widths as $width ) {
if ( isset( $sources[ $width ] )
|| $width >= $size_array[0] ) {
continue;
}
$url = sprintf(
'https://pinchofyum.com/cdn-cgi/image/width=%d,height=%s,fit=scale-down/%s',
$width,
99999,
ltrim( wp_parse_url( $full_src, PHP_URL_PATH ), '/' )
);
$sources[ $width ] = [
'url' => $url,
'descriptor' => 'w',
'value' => $width,
];
}
return $sources;
},
10,
5
);
Et voila! You’ve solved “Properly size images” for your WordPress site.
]]>Warrior Point. 7 mile out and back on Sauvie Island. The destination is kinda meh but the view of the Columbia along the way is really cool. Stop by my other aunt’s for a glass of wine when you’re done :)
Wildwood trail between Germantown and Newberry Road. 11 mile out and back in a nice part of Forest Park. It’s generally less trafficked than Leif Erikson, although the parking lot can still fill up. I usually start from Germantown.
Hagg Lake. 13-14 mile loop around, you guessed it, Hagg Lake. It’s very muddy at this time of year, so would be better to save for June or later.
Timothy Lake Loop. Beautiful 15 mile loop for the summer. Not sure if the trailhead is accessible in the winter (snow).
Dog Mountain. 6.5 mile out and back with a great view down the Gorge. It requires a permit in the high season. I went a couple weeks prior to the beginning of the 2021 season and we were able to get a parking spot at 7 am. Lot was full by the time we got back down though.
Neahkanie Mountain. My favorite hike :) North of Manzanita. I usually prefer an out and back from the ocean trailhead, which ends up being ~6 miles.
Paradise Park from Timberline. Summer hike of 12 miles and 2300 feet of elevation gain. Gets busy but still worth doing because it has awesome lunch spot views of Mt. Hood.
Table Mountain. When you’re ready for 4300 feet of elevation gain over 16 miles, this is your jam!
]]>
One of Google Lighthouse’s peskiest problems is “Eliminate render-blocking resources.” Here’s the nut of it:
style.css file can easily end up as 100+ kilobytes.The established solution is to extract and inline your critical CSS. Essentially, you put styles used above the fold in an inline <style></style> tag, and delay loading the main stylesheet until the page is rendered.

It’s relatively straightforward to generate critical CSS for a static site. Not so much for WordPress! WordPress has dynamic content on each page. If you only scrape the template file for your HTML, you’ll miss the markup in the dynamic content. Plus, production data is likely different than local data, so the HTML needs to be generated in production.
Not satisfied with the alternatives, we built our own solution.
Our solution for inline critical CSS on WordPress is two-fold:
At a high level, here’s how the system works:
One key element to our solution: server-side page renders. The plugin renders and captures the HTML page directly in the generation process. This lets us avoid some complexities: the server needing to bypass cache, the site needing to be web-accessible to the server, etc. Instead, the plugin is able to provide exactly the HTML and CSS to be evaluated.
Our approach is also opt-in on a page-by-page basis. If you have lots of varying pages, you may only care about inline critical CSS for your landing pages.
There are at least a couple of alternatives you could consider: WP Rocket and Autoptimize.
WP Rocket appears to use a similar approach with its own hosted service. There are a few differences, though. First, instead of rendering the page server-side, WP Rocket makes a request back to your site. This request has to bypass cache entirely in order to have the most up-to-date HTML and CSS. Second, WP Rocket picks a somewhat random assortment of pages, so you’ll probably need to tune that. Third, WP Rocket is a large plugin with lots of bells and whistles you may not want in the context of solving this problem.
Autoptimize is a similar implementation to WP Rocket, except it instead requires a paid subscription to criticalcss.com. Autoptimize too does a lot more than critical CSS, so be prepared for configuration tweaking.
If you don’t want to maintain your own Node.js server, both of these would be reasonable to consider.
]]>
On the left is my new Apple 13" MacBook Pro M1, with 16 GB RAM and 500 GB SSD. On the right is my old MBP, which conveniently started having battery issues in December.
M1 so fast! I was very skeptical but now I’m a true believer. The keyboard is quality, too. Now that it has a dedicated ESC key, I’m beginning to think I could get used to the Touch Bar.
]]>After a bit of research and experimentation, I’m really happy with the Laravel Forge + Digital Ocean + DeployHQ solution I’ve put together. It was way easier than I thought it would be.
We’re using Laravel Forge to manage two Digital Ocean droplets. These droplets sit behind Digital Ocean’s load balancer product, and the load balancer sits behind CloudFlare.
Forge’s specific advantages are:
Originally, I tested out Digital Ocean’s new App Platform. However, deployments took too long for my liking (~6-10 minutes). There were a few other things I ran into that gave me pause, too. For instance, you have to provision another container for the queue, and it’s unclear as to whether a deploy will blow away a job in progress.
SSL in front of the load balancer was a bit tricky. Digital Ocean can’t provision a LetsEncrypt certificate unless you also manage your DNS with Digital Ocean. Fortunately, it’s possible to install CloudFlare’s origin certificate on the load balancer, and then use CloudFlare for SSL.
For atomic deploys, DeployHQ ended up working way better than I expected. It’s pretty much magic; they’ve done a really good job with their product.
Here’s how it works:
npm run prod and composer install, and then syncs only the changed files to a release folder on the server. The rest of the release folder is copied directly on the server from the previous release..env file to the release folder on each server.That’s it! Seriously, I’m very impressed with how well it works.
Because I want to manage as few servers as possible, we’re using Digital Ocean’s managed MySQL and Redis. For both of these products, system admin is easy peasy lemon squeezy — nothing. I also get easy access to logs and, if we need to add more capacity, I can easily add replicas.
For uploads, we’re using Digital Ocean Spaces: 250GB storage and 1 TB outbound for only $5/month. It seems like too good of a deal.
In the future, if I need to add more web server capacity, I’ll simply:
deploy to app.upfocus.io.All in all, I think this setup should serve us well for a while. It seems like the right balance between power and simplicity.
Happy to take any questions in the comments or on Twitter!
]]>Ugh. Pandemic. Didn’t see that one coming last year.
We’re fortunate to have found many silver linings in the experience. The pandemic has also been difficult, and some of the policy decisions still make my blood boil.
Overall, I think the last year represents a catastrophic failing of public health. Medical science did great; public health not so much.
For example, a human challenge trial is where you quickly determine efficacy for a vaccine by deliberately infecting a small number of volunteers with the virus. I volunteered to participate in one, along with ~39k others around the world. That we didn’t run human challenge trials over the summer, which could’ve enabled mass vaccinations as early as August or September, represents a catastrophic failing of medical ethics.
Much, if not most, of the virus’ spread is caused by asymptomatic or pre-symptomatic transmission. At-home rapid antigen tests, which work much like a pregnancy test, can be used to significantly curtail the disease. They’ve been approved in Europe for months. That rapid antigen tests aren’t widely available in the United States represents a catastrophic failing of our regulatory state.
It’s hard to say what the next few months will bring.
The best case outcome is effective mass vaccination. Vaccine clinics would be open 24/7, everyone would receive a first dose first, and access would be prioritized based on risk.
A worse outcome is a slow, bungled mass vaccination. Vaccine clinics would only open during business hours (and closed during the holidays), second doses would sit in storage for weeks, and access would be prioritized based on union membership.
A horrible outcome is a 1.5x more infectious COVID strain that causes a massive, uncontrollable fourth wave of infections (here’s a follow-up analysis). I really hope this doesn’t happen.
We had a great summer.
One of the highlights was our regular neighborhood happy hour. Every Thursday afternoon, many of our neighbors would gather in the cul-de-sac (socially distanced, of course) and shoot the shit for an hour or two. When Leah and I moved to Tualatin, we felt culturally isolated: hip urban millennials in a conservative backwater. I’m happy to report that, even though we live in suburbia, our neighbors are great people and we enjoy hanging out with them.
We also took advantage this summer of our close proximity to the Tualatin River. At least a couple times a week, we pumped up our SUPs and relaxed for a few hours on the water. The kids loved swimming with their friends. To cap it off, for our 7th anniversary, Leah packed up some Burmese food and we had a dinner picnic on the water.



In August, we packed up a r-pod for a 10 day RV extravaganza. After a couple of days at the beach, we drove east to meet up with the Kistners in Coeur d’Alene. We had a great time biking the Route of the Hiawatha, swimming in the camp pool, and eating yummy food. Then, for the last night on the way home, we boondocked on a sheep farm. Ava and Charlie had a great time feeding and milking the sheep.

MVPs of the day go to Ava, Charlie, and Alex for crushing 15 miles of gravel trail on 16” and 20” rims.

YESSSSSSS (Walla Walla burrito de pollo was just as good as I remembered)

Not pictured: all of the flies that live in a sheep pasture.
To wrap up the awesome summer, Willa joined our family. She’s a total joy and loves exploring, going on long walks, and meeting strangers. It’s funny how people can change. Leah and I never considered ourselves to be dog people; here we are now, with a puppy we love.



Justin and I finally picked a name in January: Upfocus. After spending the year iterating on the product and signing up some customers, we’re headed towards a public launch next month.
Overall, I’m still achieving the goals I set out for myself. Although we’ve set and missed various milestones along the way, we’re making steady incremental progress and enjoying the journey. The question for the coming year is whether we can find traction…
According to Goodreads, I read 32 books over the year (not quite hitting my original goal of 35). Of this set, my favorites were:
Dignity: Seeking Respect in Back Row America. If you live in a blue state, Dignity is required reading to better understand America. Both the words and pictures are deeply moving.
The Accidental President: Harry S. Truman and the Four Months That Changed the World. An engaging, eye-opening read. Truman might be the most underrated president ever.
Three wonderful collections of sci-fi short stories: Exhalation, Stories of Your Life and Others, and The Paper Menagerie and Other Stories.
A special shout-out to Erik Larson this year. His tellings of history are reliably enjoyable, let it be the rise of Hitler, Churchill’s first year as Prime Minister, or America’s entry into World War 1.
According to Strava, I ran 774.6 miles in 126 runs (average of 6.15 miles per run). Funny enough, this is pretty close to what I did last year (775 miles in 121 runs). In the last several weeks, I’ve dialed down to ~2 runs/week as I rack up the miles on my treadmill desk.
According to TripIt, I traveled 6,108 miles in 12 days on 3 trips. The big one was Mexico City in the Before Times. I also visited Justin once, and skied with Albert and Will in Utah just before everything hit the fan.
Like everyone else, my main hope for the foreseeable future is the continued health of my family.
Stay safe!
]]>I recently (fall 2018) declined a job opportunity because of an onerous non-complete.
I work in an industry (WordPress-related products and services) where several large companies have their hands in most lines of business. I applied to work at one of them and received an offer to become a Principal Engineer. However, the non-compete was so broad (“any business in competition with the Company’s business as conducted by the Company at any time during the course of my employment with the Company”) that, if I were fired on day one, I effectively couldn’t do my line of work anymore.
I hired an employment lawyer but the company was unwilling to modify the contract or include any riders. The irony is that the company has a different employment agreement for Californians, which doesn’t include a non-compete in the contract.
Ultimately, non-competes are anti-competitive because there’s a huge power asymmetry that adds a lot of downside risk to employees.
If you have personal experience too, I’d encourage you to submit a comment!
]]>The soaring cost of housing has created gaping inequalities and inflamed both generational and geographical divides. In 1990 a generation of baby-boomers, with a median age of 35, owned a third of America’s real estate by value. In 2019 a similarly sized cohort of millennials, aged 31, owned just 4%.
Home ownership is the West’s biggest economic-policy mistake
Over the past 70 years housing has undergone a remarkable transformation. Until the mid-20th century house prices across the rich world were fairly stable (see chart). From then on, however, they boomed both relative to the price of other goods and services and relative to incomes. Rents went up, too. The Joint Centre for Housing Studies of Harvard University finds that the median American rent payment rose 61% in real terms between 1960 and 2016 while the median renter’s income grew by 5%.
Broadly speaking, three types of planning systems exist across the rich world: discretion-based; autocratic; and rules-based. The first type is commonly found in Commonwealth countries. Local residents have plenty of power to stop development plans, and they frequently do. It may be no coincidence that those countries have in recent decades seen the fastest growth in house prices, says Paul Cheshire of the London School of Economics. Parts of America follow similar rules. In San Francisco every permit is appealable and, since very few large-scale projects match existing building and planning codes, delays are common.
Autocratic planning systems do a better job of boosting housing supply. Russia has raised its annual rate of housebuilding from 400,000 a year in the early 2000s to over 1m. Singaporeans who protest against development are routinely ignored, says one with a house located near Tengah forest, some of which will soon be razed to make way for apartment blocks.
The third group—rules-based planning systems—are commonly found in European countries such as France and Germany. If developers tick all the boxes then construction is permitted, even if local residents object. These systems have generally done a better job of delivering housing. Since the 1950s Germany has built twice the number of houses as Britain, despite having only a slightly higher population.
Politicians are finally doing something about housing shortages
America has some of the most generous fiscal incentives to become a home-owner. Official estimates suggest that the government forgoes over $200bn a year (over 1% of GDP) subsidizing homeowners through the tax code, with policies including a tax deduction on mortgage interest and not taxing the income homeowners implicitly earn by avoid paying rent.
]]>More radical reforms could be considered. German mortgage-lenders embrace an unusual appraisal technique. When assessing the value of a house, they rarely refer to the market price; instead, they consider “mortgage-lending value”, an assessment of the probable price of a house over the economic cycle. A report from the Bank for International Settlements, a club of central banks, suggests that by discounting short-term price fluctuations, this valuation technique can stop bubbles from forming.
This year cemented my transition into adulthood. Sure, I’ve had kids for several years but those were awkward years like being a teenager is awkward. It’s only after you’ve sent your first off to kindergarten, coached her soccer team, and sat on a city advisory committee that you know you’ve made it.
Jump to: Unnamed Startup | Instagrammin’ | Book Recommendations
My greatest professional accomplishment of the year: taking off the entire month of June.
We kicked things off by traveling to Japan with my parents. They’ve never been to Asia before, so it was a great introduction for them. After landing in Tokyo, we spent a few days in Hakone, a hill town just south. One highlight was the private onsen (outdoor hot springs) in our Airbnb. From Hakone, we went to Kyoto for a bunch of sightseeing (while staying in another amazing Airbnb), and then wrapped up their trip with a couple days in Tokyo. After saying goodbye to my parents, Leah and I took the kids up to Sapporo for a week, and then recovered from the Japan jet lag with a week in Maui. Rough, I know. For the last week of June, I went fishing in Alaska with my dad, uncles, cousin, and some other dudes.
I consider this epic adventure to be a professional accomplishment because:
I literally didn’t do any work for the entire month.
Most self-employed are horrible at taking time off, and end up working even when they’re “on vacation”.
Amazingly, I didn’t have to deal with any client fires, and none of my clients fired me.
Taking a full month off every couple of years seems like a good life strategy.
If you read last year’s Year in Review, you might’ve noticed I was starting a new full-time job. And I did! And then I left a few months later.
Don’t worry, I still work for them as a contractor. I’d like to think everything is peachy. Hi Bjork! ?
The folks at Food Blogger Pro are absolutely wonderful people who I love to work with. Full-time wasn’t a good fit for a few specific personal reasons:
As a contractor, my income is diversified across several clients. As a full-time employee, I only had one source of income. Unexpectedly, I felt less job security when I thought I would feel more.
I lost a significant amount of the agency that comes with being self-employed (e.g. take vacation whenever you want, attend conferences, write off various web tools, etc.). Notably, I had already planned my June month off and didn’t feel quite right about doing so as a full-time employee.
I didn’t feel like there was the proper incentive for me to invest as much of my creative energy as possible.
For me, the lesson learned was that, even though Food Blogger Pro was a really great job by all objective measures, I have a pretty high bar to exceed.
In July, my business partner and I started working together on a new company. We haven’t picked a name yet, nor launched, and that’s just fine by us!
One of the things that’s going really well: only working on the company part-time. This has greatly reduced my stress, and prevents the startup from impinging on family life. Because both my partner and I are able to meet our financial needs with part-time consulting, we have essentially infinite runway to find product/market fit. Or market/founder/product fit. Or whateveryoucallit.
We’ve also found a pretty good cadence. We get together every six weeks (either him traveling down to me or me up to him) and set OKRs for our next six week period. Having OKRs keeps us from constantly questioning our direction; having time together gives us the opportunity for us to have much deeper conversations and course-correct as necessary.
The worst cliché in business is that having a partner is like marriage without the sex. I’m happy (?) to report that it’s true. A business partnership is an emotionally-fraught relationship, with lots of ups and downs. We’re fortunate that we’ve already been able to work through a few rough patches. I’d like to think we’re getting better at reconciling our differences too.
Ironically, because I have something on the side to work on, I’m also enjoying my consulting work much more.
After Ava started kindergarten this year, we went from somewhat flexible routine to fully assimilated into the system. I’m amazed we manage to get her to the bus stop every morning at 7:20. It’s been a pretty great experience for her though. She’s attending Bridgeport Elementary, where I went too, and is in the “two-way immersion program”. Her Spanish accent is already quite good.
Charlie is bumping along being his happy self. Every Tuesday and Thursday he enjoys hanging out with his high school buddies in the Tiny Timberwolves program. At home, he enjoys playing Uno with Ava for hours and will soon be catching up to her on a two-wheeler.
Leah continues to find opportunities to define herself beyond the all-consuming role of “mom”. Notably, she took a wood block printing class this fall and produced some fabulous art. As a mom, she’s proud of the effort she put towards helping Ava grow as a reader.
Outside of work, I really enjoyed participating in the Tualatin 2040 Community Advisory Committee. Along with HB 2001, the Housing Needs Analysis and Economic Opportunity Analysis documents we produced are foundational elements to what I hope will be transformative policy changes in the near future.
Here are some highlights of the year from Instagram:

Leah and I successfully finished the 25k Hagg Lake Mud Run (February)

My dad and I caught steelhead on the Wilson River (February)

Installed a picture window in my shedquarters (March)

Will and Albert joined me to ski a perfect day on Mt. Bachelor (March)

Toured Japan for two weeks with my parents, Leah, and kids (June)

Recovered from Japan jet lag by spending a week in Maui (June)

Fished for salmon and halibut with my dad, uncles, cousin, and other dudes (June)

Had a farm dinner at Our Table (July)

Biked around Sunriver (August)

Biked around Portland’s bridges (August)

Discovered Kachka and their pickle juice chaser (August)

Hiked Cape Horn with David and Andrew (September)

Actually dressed up for Halloween (October)

Participated in the Tualatin 2040 Community Advisory Committee (November)

Ate a ton of bread (December)
According to Goodreads, I read 50 books over the year (with an original goal of 30). Of this set, my favorites were:
The Great Successor: The Divinely Perfect Destiny of Brilliant Comrade Kim Jong Un, Bright Sun of the Twenty-first Century. The truth is stranger than fiction. A super fascinating read if you want to understand North Korea beyond what limited perspective the media provides.
Camino Sunrise-Walking With My Shadows: One reluctant pilgrim packs a weighty load on a 500-mile path. Super fun book by Andrew’s dad that’ll make you want to walk the Camino.
Red Notice: A True Story of High Finance, Murder, and One Man’s Fight for Justice. Legitimately a “real-life political thriller”. It’s hard to believe it’s real.
More so though, the following books excelled in the category of “surprisingly insightful explanations of underappreciated topics”:
Lost Connections: Uncovering the Real Causes of Depression – and the Unexpected Solutions
Strong Towns: A Bottom-Up Revolution to Rebuild American Prosperity
I couldn’t recommend these three highly enough.
According to Strava, I ran 775 miles in 121 runs (average of 6.4 miles per run), way down from last year’s 167 runs. I’m still working out 5-6 days/week, so I think this is because I’ve added soccer and walking to my weekly routine.
According to TripIt, I traveled 29,170 miles in 43 days on 7 trips. Japan was my furthest destination. I also went to Maui, Alaska, Tuscon, Boston, Minneapolis, and Philadelphia. Independent of my long trip, travel was way down and it felt good! I like doing things around home these days.
Life is pretty good right now, so I don’t think I have any goals that would move the needle on my personal happiness.
One thing we’ve been doing as a family, which is working quite well, is creating a seasonal bucket list:

These aren’t things we have to do, but things we’d like to do. If we do them, great; if we don’t do them, no worries. Putting our bucket list on a whiteboard in a laundry room serves as a gentle reminder on the bigger picture items we’d like to accomplish.
For 2020, a few of my bucket list items might include:
Getting my boater education card.
Figuring out a system for the kids to earn and save money.
Finding a good volunteer opportunity for the entire family.
A fun weekend getaway for Leah and I.
I’m also pretty tempted to get back into flying…
]]>There are always people here on IH looking to partner up as co-founders. Perhaps some stories would be useful to others who are currently looking.
For those with co-founders, how did you find yours?
I’m working with a co-founder right now and I highly, highly recommend it.
I’ve done a few solo projects where I felt like I was in a mental funk more often than not. It was really difficult to figure out what to do next, decide whether I was on the right track, etc. With a co-founder, I feel like we can achieve 4-8x what I could do a solo founder, simply because I have someone to collaborate with.
With this being said, I have had past business partnerships fall apart for one reason or another. In my experience, it’s really important to make sure you’re on the same page as your partner as it relates to motivations, level of commitment, and willingness to work together. If any of these are out of sync, it’s much more difficult to make the partnership work.
Probably the most important attribute to develop needs to be your ability to overcome disagreements. A business partnership is a highly emotional relationship, just like a marriage or long-term romantic relationship. There’s probably not enough written about managing emotions in business because being a jerk as a boss seems to be the accepted norm. Crucial Conversations is a favorite of mine.
To answer the original question, my co-founder and I were introduced through a mutual acquaintance to do some consulting work at a previous company he worked at. Now, two years later, we’re both consulting + starting our product company.
Patience goes a long way in forming a co-founder relationship. You’ll probably need to meet at least a few times in person, and you’ll likely need some existing foundation to build upon (hobbies in common, live in the same town, overlapping peer group, etc.).
]]>Before we started, I identified my three personal goals for starting a company:
These goals have been super helpful as we move along. For any given decision, I can simply ask “what will help me achieve my goals?” and the answer becomes obvious.
#goals. They’re great.
]]>Simple Event Tracking is a new, easy-to-deploy Laravel application that lets you log events and then query how often they occur (in real-time).
Once you’ve deployed the application, simply POST to the /api/write endpoint:
$ http POST simple-event-tracking.test/api/write key=foo value=bar
{
"status": "ok"
}
Then, when you have some events, query for summaries with a GET to the /api/read endpoint:
$ http GET simple-event-tracking.test/api/read key=foo --json --auth-type=token --auth="Bearer:<token-value>"
{
"bar": 6
}
Easy mode!
Check out the project on GitHub if it strikes your fancy.
]]>It would be neat if there was an app where you could see summarized updates from all of the people you want to subscribe to. Building on the /now pages micro trend, each person could publish their life summary as a periodically updated /now page. The app would simply track these to let you know when someone updated their page.
“Social media for people who update infrequently.”
]]>
Awesome upgrade for my shedquarters. Far superior to the transom windows.
]]>Your script’s execution time can easily double if your migration script fetches images over HTTP or generates multiple thumbnail sizes. Because you’ll likely need to test your script multiple times, these inefficiencies can cause substantial delays in your project.
Fortunately, two simple tricks will save you a ton of time.
If you’ve already downloaded an image once, do you need to download it again and again? Probably not. You need a cache!
Drop the migrate-import-cache.php code snippet into your mu-plugins directory in order to:
You’ll need to set a WP_IMPORT_CACHE constant to a writable directory. Also, this code assumes you’re using media_sideload_url()(or some other function based on wp_remote_get()).
https://gist.github.com/danielbachhuber/5cf816d99fd973cd5832a5715576ade8
WordPress generates a few to several thumbnails for every image uploaded into the Media Library. These thumbnails usually aren’t necessary during development, so having WordPress create them wastes CPU and your time.
To disable thumbnail generation, simply override the registered image sizes prior to calling media_sideload_image():
https://gist.github.com/danielbachhuber/aad495d331f45d4a0ecd97f9f243b9e6
If you’d like to generate image thumbnails later on, simply use wp media regenerate (doc).
I’d like to add my testimony in support of HB 2001. While the bill’s specific details certainly would benefit from deliberate discussion, I think it’s critical that the state re-legalizes duplexes, triplexes, and fourplexes in single-family housing zones.
Why does the state need to mandate this? Because Oregon’s cities have proven themselves incapable of changing their zoning to allow for more homes to be built. In fact, it’s often the case that a city’s incentive is to restrict additional homes; the existing citizens don’t want to let anyone else in.
As an example, Tualatin (the city where I live and grew up) did literally the bare minimum to comply with Oregon Senate Bill 1051 (legalizing ADUs within single family housing zones). Because Tualatin still imposes a parking requirement for ADUs, only 44% of existing homes (based on research I did) are eligible to build an ADU. I personally would have to pave another driveway spot in my front lawn, which I don’t think my neighbors would appreciate.
When my wife and I bought our home in 2015, the sellers had six offers in twelve hours. We weren’t even the highest bidder — my sister played soccer with their daughter, so we played the family connection. And we closed the deal by putting 20% down on a $465k house. Is this attainable for most people?
In 2015, we had a tight, overpriced market. In 2019, we still have an overpriced market. Construction isn’t anywhere close to meeting the demand for the livable, walkable communities people want. And cities aren’t close to producing the necessary policies supporting this development. Legalizing missing middle housing is what’s necessary to provide more housing options, and it’s the responsibility of the state to step up when cities have fallen short.
]]>This distinction between active notes and completed notes is key for how my mind works. Something about reducing mental clutter, or insert your diagnosis here. I want to keep the notes around for future reference but I want them stored on my shelf.
I’d love to instead have a dedicated app serve as my note archive. It could be web or cross-platform as long as it kept privacy at the forefront. Importantly, it would be read-only; it wouldn’t take on the concern of also providing an editing interface.
]]>On Sunday, I survived my first day without coffee. Then yesterday, I survived a second day without coffee.
Pros of coffee abstinence include:
Cons of coffee abstinence include:
I am back on the coffee today.
]]>In scenarios where there isn’t already a cohesive group, organizing an event has two risks:
A Kickstarter for events could solve these two problems.
First, the event would have some minimum number of signups required for the event to happen. It doesn’t happen if it doesn’t achieve critical mass.
Next, the organizer would track which signups actually show up at the event. This data could then contribute to the attendee’s reputation score on the platform, and calculate the likelihood of attendence.
Problem worth solving? It seems mundane but I keep wanting this for situations I come across in the real world.
]]>Monica is also open source on GitHub with an active community. It’s clear how this has influenced what the product is. I’d love to see Régis Freyd (the creator) turn Monica into a viable business too. This would ensure its long-term sustainability, and also help solve for product gaps (e.g. hiring for design polish).
At its core, Monica is a contact database with various fields for each person:

For me, Monica’s main value proposition is that it:
It solves these use-cases in a few different ways.
Because I’d like to see Monica thrive sustainably, I thought I’d offer some unsolicited suggestions around making money. My only qualifications are that I’ve failed multiple times to monetize open source.
It’s important to understand that open source can either be a:
It can become really awkward when you try to use open source for both. The tension can be unbearable when what the business needs is at odds with what some random person in the community wants. You can still have a healthy open source community as long as you are forthright about the business direction (and the community remains in alignment with this direction).
Users paying you money is a good thing. And more money is a better thing. My favorite video to point people to is Jason Cohen’s “Building the Perfect Bootstrapped Business on WordPress”:
https://www.youtube.com/watch?v=b_CmkUT25BE
In this video, Jason describes a viable SaaS business as $10k MRR. Here are a couple ways you can get to $10k MRR:
Acquiring new customers is hard. It’s much easier to grow revenue by charging more (obviously easier said than done). Right now, Monica charges me $45/year. As a professional user, Monica is easily worth twice that to me — much closer to what I pay for other recurring SaaS services (e.g. Harvest, DeployHQ, etc.). And if I were a business user (multiple users sharing the same contact database), then Monica should charge me per seat.
Business users already have dozens of CRMs to choose from though. For professional users, Monica could be the antidote to LinkedIn.
Monetizing open source is very, very hard. It’s important to decide whether you’re:
I think the latter could lend itself to a more sustainable business because you aren’t competing with free.
With a polished iOS app (again, easier said than done), Monica could open up a greenfield customer acquisition channel. Alternatively, there may be some SMB use cases that Monica could market against (e.g. any business needing to automate ongoing relationship management).
Importantly, growing the business is more than simply building new features, and requires commitment accordingly.
]]>Overall, Thinking in Bets is a pretty middle of the road business book. It’s good for lots of tactical details around “thinking in bets” and avoiding inherent biases. It doesn’t have an overly compelling narrative.
Some of its more salient points include:
Overall, Thinking in Bets provides useful reference material for “thinking in bets.” Which is the title of the book. Which you don’t really understand the meaning of unless you’re a poker player or read the book.
]]>I definitely feel older this year. Not yet in the “my body is aging” sense, but in the “I am definitely not a kid anymore” sense. I am acutely aware of all the responsibilities I hold as a father and husband (and homeowner, for that matter). This post is a couple days late accordingly.
We are fully assimilated into the routine:
Leah works Mondays and Wednesdays, so I watch the kids until 8 am and then take them to daycare up the street.
On the good days, I’ll land in my shedquarters and start working. On the really bad days, I don’t make it off the couch for a while.
When Leah is at work, I’ll pick up the kids around 4:45 pm and then start making dinner. We eat, we putz around the house, we put the kids to bed, we read for a bit, and then we go to sleep.
One of our life hacks is to meal plan at least a week out, and sometimes two. Not only does this reduce my trips to Costco and Fred Meyer, but it empowers us to live vicariously through food. A couple of recipes on regular weeknight rotation include Spinach, Chickpea, and Tomato Curry from Fresh India and 20-Minute Turkey Chili.
We also loved our CSA share from Our Table, a neat cooperative farm roughly 10 minutes from our house. Every week yielded a diversity of vegetables that inspired us to try new flavors and recipes.
To break the grind in 2018, we focused on enjoying the Pacific Northwest:
Victoria, BC twice. First to visit Leah’s Grandpa, Charlie, because we knew he didn’t have long, and then second to attend his memorial.
Down to the beautiful McKenzie River a couple times to visit Leah’s mom. Ava caught her first steelhead in August.
Hood River and Astoria for Jane’s and Johanna’s weddings, respectively.
Sunriver and the beach a few times a piece. The most fun beach trip was a weekend getaway for my birthday.
As of this writing, Ava is 4 1/2 (eagerly awaiting her 5th birthday) and Charlie just turned three. Ava loves craft projects right now. She’s regularly drawing, making necklaces, or just cutting stuff out and gluing it together. Charlie is increasingly articulate — both a conversationalist and a joker. Watching both of their personalities develop is a total joy.
On the consulting front, 2018 was my best financial year yet.
Hitting this milestone was the result of 60 hours/week for 9 straight weeks. Imagine waking up at 4 am, leading three separate projects with Indian engineering teams, then load balancing against a variety of other projects throughout the day, and finally wrapping up around 8 pm. Needless to say, I was pretty burned out at the end of it.
Next Tuesday, January 8th, I’m starting a full-time job! I’m really looking forward to working with my new team, and the new learning opportunities presented in the role. It’s also been wonderful to have a couple weeks of downtime to reset.
Over the course of 2018, I volunteered a total of 116 hours towards open source. During the first half of the year, I helped out with WordCamp for Publishers as a speaker/workshop organizer. Many thanks to Steph and Adam for their roles in wrangling a great event. In the second half of the year, I took on the role of REST API Release Lead for WordPress 5.0. I’m really proud of those who supported the efforts, and am happy that I was able to make a substantive contribution to the project.
According to Goodreads, I read 39 books over the year (with an original goal of 25). Of this set, my favorites were:
Buy Then Build. All about “acquisition entrepreneurship” and associated tactics. Creating a new business from scratch is for suckers. I’m sold.
Lost and Founder. Rand Fishkin’s highly engaging telling of his relationship with Moz (his company) and the associated ups and downs. One of the most honest startup narratives I’ve read.
Sourdough. I am Lois and I love sourdough.
Principles. Superb strategies delivered with great clarity. Ignore the parts that may seem annoying, because the book will transition back to immensely practical detail.
Pachinko. If you don’t know much about the history between the Koreas and Japan, Pachinko is a great entry point.
Special shout out to John Scalzi. I read from a few of his series this year: The Interdependency, Old Man’s War, and Lock In. All of his writing is delightful. If you like science fiction at all, I’d highly recommend John Scalzi’s books.
According to Strava, I ran 1,056.6 miles in 167 runs (average of 6.33 miles). I only biked 208.7 miles in 25 rides though. My favorite run was probably the Spray Rodeo half marathon, where I managed a 8:16/mile pace and 7:23 for the last mile.
According to TripIt, I traveled 43,325 miles in 58 days on 12 trips. India was my furthest destination. I also went to Salt Lake City, New York, Austin, Las Vegas, Chicago, and Nashville for a variety of work-related events. Notably, the Chicago Architecture Foundation’s Twilight River Cruise is pretty darn amazing on a clear night. I’m not one for tourist activities but I was highly impressed.
Goals are what I like to think about doing until something more interesting comes along. A few ideas on my mind include:
Buying an online business doing $2-5k MRR (something I can run on the side).
Trying out the Unitarian Church with Leah and the kids.
Figuring out how I can get on the Tualatin River more often (canoe, kayak, or rowing skiff) because it’s so close to our house.
Historically, Dropbox is always the first thing I install. Up until October, Dropbox contained pretty much my entire filesystem (except applications and working projects), so this first step feels like my laptop is healing itself.
But, and can you believe, I’ve switched away from Dropbox. I had a hunch that Dropbox’s filesystem monitoring daemon was consuming all of my battery — and it was! Now, as long as I keep Slack closed too, my battery lasts for hours.
My new Dropbox-equivalent setup is:
Getting 1Password is up and running is always the hard requirement for configuring everything else. 1Password literally unlocks the rest of my life.
For personal task management, I use Things 3. It is my sword; without Things, I’d be defenseless. I could write a whole soliloquy about task management if I knew what a soliloquy was. In October, I bit the bullet and upgraded from Things 2 to Things 3. Dealing with the UI changes was rough few weeks, but we’re all good now.
Leah and I share 303 recipes across our computers and phones using Paprika. Paprika is a pretty solid, full-featured application. One nice feature, which is to be expected I suppose, is that it can import recipes from websites via their Schema.org markup. This makes it much easier to keep track of your new favorites.
I thought Zoom was over-hyped but it’s truly not. Zoom is really great video conferencing software: reliable, has all the features I need, and hasn’t succumbed to the bloat cycle yet. I am a proud paying customer. Let’s hope this lasts for several more years
Alfred is still the best quick launcher, but Spotlight was pretty good when I used it for a brief second. Dash has an amazing Alfred integration for WordPress, WP-CLI, JavaScript and PHP developer documentation.
For email, I still use Mailplane. Mailplane is the Gmail web app embedded in a desktop app, and the right balance between them both. Yes, I could use Fluid or something else, but Mailplane has enough enhancements that makes it totally worth it.
In October, I switched from Simplenote to Apple Notes. As silly as it sounds, I really wanted to be able to properly format unordered lists. Apple Notes supports formatting (even on mobile) while Simplenote is limited to whatever Markdown format you invent for yourself. To keep my Apple Notes tidy, I “Save as PDF” into an archive folder.
I also started using Ulysses for drafting blog posts but I don’t yet know if that will stick. This post was written in Gutenberg.
Lastly, some smaller utilities I use include:
Now for the good stuff.
I spend the majority of my day in Sublime Text 3 with the Cobalt2 theme and Adobe’s Source Code Pro font. I tried switching to Atom at one point but couldn’t do the HTML/CSS/JavaScript thing. Heck, I even tried vim for a few weeks back in the day. Cool idea, but productivity is king.
Sequel Pro is still the tried and true MySQL desktop app. It does everything I need it to.
To access my computer’s inner brain, I use iTerm2 with zsh and Oh My Zsh. My dotfiles are on GitHub. These Git aliases are the bee’s knees (notably gpo, gp, gco, and gc). My keystrokes into the terminal usually run:
brew upgrade.composer global require as it mitigates the dependency hell of the latter.cd, you’re doing it wrong.gpr.That’s about it! If I’m missing out on any software you love, let me know in the comments.
]]>
Pictured on the left: yet another brand new, fully-loaded 13" MacBook Pro. This time it’s a 2.5 GHz Intel Core i7 with 16 GB and a 500 GB SSD. On the right is my mid-2014 13" MBP, quite possibly the best computer I’ve ever owned. RIP all of my awesome stickers.
And, with that being said, the new MBP on the left is surprisingly not awful. I put the upgrade off for quite a while because of the reported keyboard issues. My experience thus far is pleasantly the opposite; I find the keyboard quite good and enjoyable to use. I’ll need to track down a wired secondary keyboard that offers an equivalent experience.
]]>WordPress is known for its commitment to backwards compatibility. It prides itself on functional consistency between major releases, and makes sure actions and filters continue to work as expected.
Gutenberg is big and huge and a significant change for the better. Contributors are working to make Gutenberg as backwards-compatible as possible. However, the reality is that we’ll likely taste three flavors:
It continues to work as expected. For example, an enter_title_here filter continues to modify the title placeholder text in Gutenberg. Similarly, Post Type Supports is still the API for defining which features a Post Type supports.
It doesn’t work but there’s an equivalent alternative. Some of WordPress’ existing architecture doesn’t translate directly into Gutenberg. For instance, media_buttons is the old paradigm for registering a button to insert something into the post content. In Gutenberg, Blocks are the new paradigm. Blocks are added to the post content via the Inserter.
It doesn’t work at all. We want to avoid this as much as possible, but there will be some elements you can customize in the Classic Editor that you simply can’t change in Gutenberg.
The Gutenberg Migration Guide documents many of these specifics. New contributions are always welcome. Generally, compatibility solutions are organically prioritized against identified need, expected impact, and level of effort/possibility.
Ultimately, WordPress remains committed to the ethos of backwards compatibility, even when undertaking such a transformational change as Gutenberg. An amazing amount of effort is going into ensuring WordPress sites continue to work as expected. It’s important to acknowledge, though, that backwards compatibility is fundamentally more difficult than the past. The reality has a certain degree of nuance.
]]>To the many commits to come!
]]>She thought open source, both software and methodology, might be a solution to make small and medium-size businesses more competitive. However, I argued the exact opposite: open source is a business strategy for an extreme form of taking the entire market.
I think one root cause of large companies growing larger is that technology lends itself to extreme operational efficiencies. With a technology company, the marginal cost of an additional customer is effectively zero. If Amazon can operate at 10x global scale with the same operational costs, it can take a smaller margin and still be very competitive. Traditional businesses can’t compete if they have a larger percentage of margin dedicated to operational costs.
So, if it’s true that more of the market is going to larger companies, is this worth solving for? And what are potential solutions? One result of current market dynamics is difficult to unwind: Amazon yields amazing customer value and worsening employment options (either by destroying jobs entirely or offering poorer wages).
]]>Great start to the fall! Cooking is the best form of humblebrag.
]]>Our first stop was Joseph, where we stayed for four nights (VRBO). If you’ve ever been to Jackson Hole, Joseph is a much earlier version of it: gorgeous mountains, one touristy main street, and a bunch of farmland otherwise.

One fun adventure was the Joseph Railriders. Invented by a bike shop in La Grande, they designed two- and four-seat pedal carts that sit on top of train tracks. It’s a great re-use of abandoned railroad. Ava and Charlie got a total kick out of our two hour trip to Enterprise and back.

We also got the kids out on kayaks for the first time at Wallowa Lake. It was so peaceful Charlie passed out in my lap. If it looks like the back of the kayak is sinking, that’s because it is.
A few other highlights from Joseph include: Mexican food at La Laguna, where Jose’s hospitality was world-class; meeting Brian Kausler and his family at Joseph City Park; and dinner at Terminal Gravity in Enterprise where, without a doubt, Charlie fell into the creek.

After Joseph, we drove to Boise and stayed three nights pretty close-in to downtown (AirBnb). If we were to move anywhere else, Boise would be it:
We loved every moment of it. And yet, we’ll be staying in Tualatin. Boise already has a huge influx of new residents, so I think it’s bound to go through some growing pains over the next 5-10 years.
The last stop, and the original inspiration for the trip, was Stanley, Idaho. Our family friends have a beautiful cabin they graciously let my entire family use as our base camp for adventure. We did a good amount of hiking, enjoyed the wonderful scenery, and filled our bellies with delicious food.

8.4 mile hike up to Alpine Lake at 7,900 ft. Living our best life ????
How to Bootstrap Your Way to $250,000,000/year with JT Marino of Tuft & Needle (Indie Hackers) — Epic story of a superbly-executed startup. Underscores the value of studying existing tactical best practices to avoid learning lessons the hard way.
Is Strong Towns the same as Sprawl Repair? (Chuck Marohn) — Canonical explanation of why suburban retrofit is an optimistic yet unobtainable goal. Best case scenario is that some subdivisions can incrementally transform towards more traditional, mixed-use neighborhoods.
pup: Command Line HTML Parsing — Like jq, but for HTML. Query the DOM with CSS selectors. (via Joseph Scott)
A glimpse into the dark underbelly of cryptocurrency markets (Nic Carter) — Guilty until proven innocent: cryptocurrencies are pump and dump schemes. If you don’t know what a pump and dump scheme is, you especially shouldn’t be buying cryptocurrencies.
Most recently, I enjoyed “The Hysterical Campus” in Quillette and Sam Harris’ interview with Yuval Noah Harari. And, if you want more of the backstory on Quillette, listen to Tyler Cohen’s interview with Quillette founder Claire Lehmann.
]]>With an email newsletter, the writer has reasonable confidence their work is delivered to a known audience. With a blog, the best the writer has are comments and Twitter, both which are totally broken.
There should be better tools for the writer to publish to a specific audience (say, <50 people), for the audience to receive the work through their preferred means (e.g. email at the end of the day vs. RSS), and for both to engage in a productive dialogue that evolves over time.
Oh, and one more important piece: a “Start Here” point of entry for those new to the conversation, so they can painlessly get up to speed.
]]>
Also featured in today’s Bridgeliner.
Leah and I had a great weekend getaway for my birthday: hiking Neahkahnie, checking out Oregon Coast Rail Riders up the Nehalem river, hiking Bayocean Spit, and grilling steak while drinking an entire bottle of rosé.
Can’t wait for the next one!
]]>Tualatin’s housing shortage is only one piece of a broader regional problem. Like many complex social challenges, there aren’t any “silver bullets” — answers that will fix everything at once. Fortunately, there are many policy makers, researchers, and community members working together to identify strategies that can begin to provide more housing options.
This past Monday, Tualatin’s Business Advocacy Council invited Michael Andersen (@andersem), Senior Fellow at the Sightline Institute, to present on the topic of housing in Tualatin. Although Michael isn’t an expert on Tualatin specifically, he contextualized our local housing shortages with the economic trends of Washington County, and then identified the solutions other cities are already applying.
Watch Michael’s presentation embedded above or on Vimeo. There was a good Q&A session too but the video for that was incomplete. You can also read the (machine-generated) full transcript below. Thanks to Joseph Konty for video recording and Tim Garrett at Matchlight Video for post-production work.
If you’d like to learn more about missing-middle housing / residential infill, including its associated practical and social challenges, listen to this Think Out Loud interview with Michael Andersen and Portland city planner Joe Zehnder.

Thanks for inviting me here everybody. Thanks Daniel. That was wonderful. So, like they said, Daniel and Linda invited me here to talk a little bit about my favorite subject, housing; how we can pay less for it, how your employees, colleagues, co-workers, neighbors can pay less for it and hopefully having more of it the right places can lead to a stronger economy and better quality of life here in Tualatin.

Like Daniel made clear, I think, I’m not an expert on Tualatin. I’ve been here but I don’t know the community nearly as well as any of you do. I know about the region and the regional situation; I’ll be trying to bring some wisdom from around the region that you can figure out how it fits into your community, obviously. And I’ll talk just briefly about where I’m coming from in this: I’m a policy writer and researcher, and I focus mostly on housing affordability.
The Sightline Institute is a regional sustainability think tank is notable for understanding that economics are a thing. We are focused on this area of the Pacific Northwest as our bio-region is the, arguably, most physically abundant part of the richest society in the history of the world. If we can’t figure out a way to make our current prosperity sustainable, indefinitely, in this area, then we can’t figure out anywhere. So we think about what is in the way of that happening.

We have as a three part way of thinking about that all. Going through the first, our economy depends on working ecosystem here in Oregon, as everywhere, and our ecosystem depends on efficient cities and towns.

That’s: space-efficient, energy-efficient, economically efficient. On that last note, our economically-efficient cities are depending on a fair and productive economy. We need to be able to do as much as we can in these cities to help everybody’s lives improve.

This is a three part stool. We need every part of that circle to work and they all feed into one another. So I’ll be trying to talk about ways that they can all mutually reinforce.

On that note, I want to talk about a problem that Tualatin has. This is not going be news to any of you but I’m going to run through a few of the statistics that hopefully capture where things are at. The median monthly rent is up $76 in the most recent year data. That was 2016, a little bit ago, but that’s the equivalent of a $912/year tax hike, if you’re a homeowner for example. It looks like a property tax hike that you never get any additional services for. We were talking about one every dollar you pay you want to get out of; from a tenant’s perspective, they got nothing out of that. And, if the tenants and renters in your life have been pissed off, that’s why.
Meanwhile home seekers, as we heard from Daniel, have also been struggling. Median home prices are up 13% last year to $464,000. That translates to $115,000 up since 2008. 33% percent increase and comes out to, if we some simple math, 10% down payment with much higher interest rate than anyone would want to pay. They need to get $46,000 down which most people aren’t going to have, especially when they’re a first time home buyer.

Meanwhile, this is part of a larger situation in Washington County. I think there are a lot of ways to think about what the cause of this problem is. But the simplest way to think about it, probably, is that in Washington County we’ve added 82,000 new jobs since 2000, which is fantastic, and we’ve added 48,000 new homes since 2000.
Over the course of two business cycles, job growth has been 37 percent faster than housing growth. So that is a problem, in as much as the people who need to work in these jobs, who are creating these jobs, who are making these jobs exist by their presence, are coming in not from homes they’re being in Washington County, but from elsewhere.

And of course this is what that looks like. So people are spending more and more time, as we heard, to get to these jobs.

We can even put numbers on it.
The red lines in this picture are higher income $40,000+ per household. The pink lines are commutes to the census tract we’re standing in right now for people making less than $40,000 per household.
You see people are coming from a long way away, some of them without very much financial reward for doing but they’re making it work because they are a bunch of good jobs here in Tualatin. The cost of those commuting, of course, is borne by everybody who is trying to use the roads including the freight and the rest of the economy in general.

So what that translates into is that in addition to its specific housing problem, it is becoming a larger economic problem in Tualatin. That manifests in the form of a 2.7% unemployment rate and a series of job recruits that, as we heard from Linda, are hesitant to commute for more the 45 minutes in one direction. And the result of that is that good jobs are going unfilled.
You could solve the problem as employers have tried do by paying more money than ever. And then you’d, of course, have to charge more for whatever you’re selling. But everybody would be happier if you could pay people the same money you want to pay them right now and they would be happy to accept that wage because they wouldn’t have to drive 90 minutes in a car every day.
How do you get to that situation? Well, I’ll be talking about this for the rest of the presentation.
I also want to keep in mind, as one of the folks mentioned, that we have 400 local high schoolers graduating every year from the high school here. Some of them are going out to get great skills and great schools. Some of them want to stay in the community and work here. Whatever the case, if any of them ever want to live in Tualatin and be a home buyer in the area, they’re not going to have $46,000 to do it in the beginning of their career. Unless they have some financial connection or whatever, in which case there’s a whole other problem to work out.

The solution to all this trouble we’ve thought about a lot at the Sightline Institute, and our basic conclusion is that there are a lot of things you can do but the single most important thing you need to do is you need to have more homes. It is ultimately about having enough homes to go around. That is was going to prevent the number of people chasing homes from driving the price way way up. Especially in job-rich areas like Tualatin is lucky to be.

So how do we get more housing? We thought about that too. We have done some math about what that looks like. It’s a complicated process of course, but the calculation is ultimately not that difficult to wrap your head around.
If this is the number of homes that can make money, you can make money by building this many homes. And if you can reduce the cost of building that many homes, then you will be able to more homes for the same amount of money. So ultimately it comes down to cost control. You can get more homes for the same amount of private investment being available if you can reduce the cost of developing homes.

So then the question becomes: how do we get more homes and make them less expensive to build? How do we get them less expensive to build? There are a few ways to do that.
We can have lower fees and faster regulatory review. Some of you may be familiar with this website launched recently, Affordable Oregon. It’s a fellow in Washington County who has tried to compile some new and useful information comparing all jurisdictions in the area to one another, and how much they’re putting these in regulatory review together. His belief is that drives up the price of housing. He is completely right. Fees and regulatory review definitely drive up the price of housing and, without wanting to endorse his specific conclusions, that is a place you can go for information about what’s going here.
There are also a couple other factors we can talk about given the price of housing. Lowering the construction cost per home, and lowering the land cost per home. There are various ways to do this but I’m going to focus on these last two, for the simple reason that other people are talking a lot about this, I think, and also there is a very clear political and social tradeoff involved in these fee and regulatory review.
Absolutely, we should be minimizing fees but that revenue is basically being used to replace tax revenue that is not collected from the property tax cap which was passed in the 1990s and ultimately a $1 less is public revenue is going to result in less services at some point. So despite the need for efficiency, there’s a pretty powerful trade-off.
Similarly, with regulations, every regulation that exists is there somebody asked for it to be there. So that’s a difficult needle to thread.
Meanwhile, if we can come up with ways that are politically acceptable and safe to reduce these things, that’s sort of a pure win. We can get more economic activity, more prosperity, more housing for every dollar, if we can reduce those things.

Let’s look at the cost of those things. This is the rent for a recently built home in the Portland metro area in various housing types. Here’s a freestanding suburban house, two store garden apartments, five story urban apartment building, and a high rise apartment building like what you might see in downtown Portland. This is per three bedroom home for recently built rentals.
As you can see, there is sort of a U shape in these costs. What’s contributing to the cost here are these two types have lower construction costs per square foot mostly because they’re built with wood (the freestanding suburban homes and the two story apartment buildings).

The next three types have lower land costs per home because more households are sharing the same amount of land in higher buildings. High rise apartments are built with steel so they’re much more expensive per square foot to build.
None of this is to say that we should only be building like the cheapest kind. There’s a completely legitimate reason for someone to prefer each of these different items. Different people will want to live in each of these different settings.
The problem is not that we are telling people they have to live… We don’t want to tell people they have to live in cheap housing, we want to give them the option to live in that cheap housing if they want to. If somebody wants to live in a two story garden apartment, and they’re not able to because we aren’t building or offering enough of those options, then we are leaving housing on the table. That is housing that could exist but is not. Something that someone would be willing to pay less money to live in if they had the option to.

So this two-story garden apartment scenario I’m going to talk about for a few minutes… it’s part of an idea from the last few years called “missing middle”. If we think of housing on a spectrum, from detached single family housing you see in cities everywhere to mid-rise housing, like four to six stories you might see in the central area. You’ve also got duplexes triplexes, fourplexes, courtyard apartments, townhomes, a whole array of things that have been common historically in cities everywhere, but aren’t really provided for in very many locations in modern zoning.

This is my friend Max’s place. His place demonstrates that this is not a new idea, this is a forgotten idea.
The reason he can live in this nice neighborhood in central Portland on a corner lot like this is that he shares a lot that could house one household with three households. This is a four-plex. He works at a retail store and that’s what makes it possible for him to be my neighbor.

Looking specifically at Tualatin, if we see the yellow areas, here are housing, the blue is manufacturing, the pink is commercial city center.

Think about how much of the land a place like Max’s would be able to be built on or would be illegal to build a place like that today. It’s just the red areas here, the sort of medium density housing areas. It’s not a lot of land as a share of everything that we’ve put together in a city where you’re allowed to build those.
If we assume we want to build more of these things, or at least we want to allow them to be built if people want to live in them in more areas, we have a few options. We could expand the amount of city that has this middle size housing; we could ensure that new areas that are brought inside the Urban Growth Boundary have a higher-ratio of that middle-sized, middle-density housing. We want to consider whether it is possible to get these missing-middle housing into the lower density zones in a way that doesn’t fundamentally change those zones, and people won’t object to the transformation of the neighborhood in a way that is moving too fast.
Is there a way to find missing-middle housing options for these lower-density zones? I think this is one of the important ways to think about this thing.

There are a lot of cities around the region considering new ways to do that. For the last part presentation I’m going to share a few ways that they’re accomplishing that goal. 
We’ve got the accessory dwelling unit; the backyard cottage, the mother-in-law unit you might call it. It’s a great place for your mom-in-law to live or your father-in-law or your cousins or a young couple that you know or just somebody who is gonna help you pay the rent and a mortgage on your larger building.
These are usually no more than 800 square feet and they were recently legalised in Tualatin. We’ll talk more about reasons why more action might be needed in a few minutes

This is another example of ADU. This is from Kol Peterson is a sort of expert on ADUs as they’ve been taking off in popularity the last few years. He’s based in Portland and has a book about it. He has an example of a two-car garage he worked a few months ago and converted it to a 815 square foot home for about $100,000 including $25,000 of his own labor and time. It is possible to get pretty extraordinary things done for not very much money when you can reuse existing spaces for housing units.

This is more for the context of new areas that are brought into an urban area: cottage clusters.
For example, you would say that, instead of only allowing a house to be 3,600 square foot house on a lot, you could also say you get the option of building three 1,200 square foot houses, or three 1,000 square foot houses with a shared rec room for the kids to play in. It’s not going to be for everybody, but making that an option is a way to get more use out of less land for a lower cost. And also creating the type of housing a lot of people were looking for and unable to find because of the economics of development land use in the area.



This is a modern duplex. A familiar idea, I just took picture of one I like.

This is a four-plex. This is an old Victorian home built in 1949, I think, in Portland. This is Garland and his wife. He’s the developer of this new place; this is their first project. They took one home, sliced it into four floors so the first floor is fully disability-accessible, of course. The top floor has a terrific view
They can get a lot of use out of a single structure because they’re allowed to put more than one home in it.

The last thing I want to say, the last point I want to make and leave you with here, is that, in addition to legalizing any of these options, if we want them to happen, we need them to be economically viable. The useful thing about Bellingham, they legalize ADUs in 1995 and since 1995 they’ve only built, on average, four per year in the whole city for these backyard cottages. Why is that?
It’s because they put a bunch of rules on their use and construction. I’m going to focus on one of these (these are a few of them): the last one, off-street parking requirement. This is probably the biggest reason why they haven’t had any more of them constructed in the last few years.

This is a quote from the regulatory document recommending how cities in Oregon should legalise ADUs if they want them to be built. As they say accurately, it’s one of the biggest obstacles to having anybody actually construct these homes.

That’s just one example, here’s some other specific things we can do. We could up-zone to three-story areas to four-story areas if people are not building new apartments on a given lot. The reason is that they cannot make money by doing so and the simplest thing to do is just let them build more homes, if that’s politically viable.

We could reclassify homes like Max’s from a commercial lot. Right now, if someone wants to build a new four unit building, that is subject to the same regulatory standards and processes and building requirements as a two hundred apartment building in downtown Portland. We could decide we want to regulate them more like a duplex and hold that same building standards. Or we could create a new intermediate standard of building and bring down the cost of developing those three or four-plex homes.

We can legalize internal divisions of homes over 10 years or 50 years, whatever we want. Just to say that this house has served its purpose, it has some architectural value, maybe, and we want to keep it viable by letting it do new things as it gets older.

These are just a few examples of possible actions and I’m hoping that we can spend what would ordinarily be a Q&A session to talk about your perspectives on what actions we can take and what is needed. That’s all I’ve got to say


And have we been fixing blockers! A non-exhaustive list includes:
Category, tag, and taxonomy controls don’t respect the correct capabilities
REST API: Attachments controller should respect “Max upload file size” and “Site upload space” in multisite (WordPress 4.9.8)
Convert to Blocks not properly converting successive shortcodes (Gutenberg v3.3)
New lines in shortcode content are ignored (Gutenberg v3.3)
The two remaining problems that cause me the most hesitation are:
wpautop() and shortcode_unautop() on the server instead of TinyMCE.If you’d like to save a point of reference, I have a working GitHub issue documenting these two and some other issues around block conversion, tables, and galleries. Help appreciated!
]]>
Friday night: solo parent at Justin (my cousin) and Justine’s wedding. Charlie was one of three ring bearers, and Ava one of nine flower girls. Ton of fun getting to spend so much time with my kids.

Saturday night: kid-free at Jane and George’s wedding. Leah gave a wonderful maid of honor speech. Much debauchery followed this picture.
Next up: Maggie’s wedding in August!
]]>Waking Up Podcast #130 - Universal Basic Income (Sam Harris with Andrew Yang) — Best possible explanation of the underlying economic forces justifying UBI.
Ways to think about machine learning (Benedict Evans) — Imagine what you could do with a million ten year-olds.
Univision Is A Fucking Mess (Special Projects Desk) — Colorful post-mortem of what went down with Fusion. Previously.
A primer on fentanyl(s) (Mark Kleiman) — Comprehensive yet approachable overview to the history and current policy implications.

Family pic atop Lava Butte, post-resuscitation.
Our vacation in Sunriver last weekend was far too short. I climbed the cinder cone twice, once with a Burley and once without. Ava took her first bike ride to the marina. And we regained all of our calories from ice cream at Goody’s.
]]>Looking for something to do at Contributor Day? We could use your help!
The Gutenberg Migration Guide is a crowdsourcing project to document WordPress Classic Editor customization points and their Gutenberg equivalents (if such exist). media_buttons is the quintessential example; whereas you might’ve used this action previously in the Classic Editor to register a button, it no longer exists in Gutenberg and the block inserter is its direct equivalent.
We want the migration guide to be as comprehensive as it can be. This is defined as:
Identifying as many integration points as we can find. For instance, there are already 14 actions / filters listed. Some are commonly used, while others are not. As long as we have a good example for how the integration point is used, it makes sense to include in the guide.
Whenever possible, documenting how feature parity can be achieved with Gutenberg. Some integration points do already have Gutenberg equivalents. Others don’t yet, and that’s alright.
You can help make the migration guide more comprehensive. If you don’t have any examples of your own to include, here are a couple of places you can start looking:
Our plugin compatibility database has a good number of plugins marked incompatible. Some even have descriptions of the problems!
The [Type] Plugin / Theme Interoperability and Backwards Compatibility labels in the Gutenberg GitHub repository have some number of reasonably documented conflicts.
Everyone can contribute to the migration guide, regardless of skill set. All you need to do is open a new GitHub issue and report the incompatibility you’ve found. Screenshots and GIFs are tremendously helpful. If you know the underlying problem, then please include that too. If all you know is that a given plugin’s feature doesn’t work in Gutenberg, no worries; simply open an issue and we can help track down the cause. Identifying examples of breakage are what we need help with most.
Feel free to join #hosting-community in the WordPress.org Slack if you have any questions, etc. Thanks for your help!
Persist custom CSS classes during block conversion when block supports additional classes
When a WordPress user converts existing HTML to a block, or manually edits the block HTML to include a class, we should persist their custom CSS class into the additional classes field.
Autosaving somehow triggers a full save when metaboxes exist, causing too many revisions
Gutenberg 3.0 included a bunch of new autosave functionality that still needs some work. Track down this bug before Adam Silverstein does!
Drag and drop uploading should respect WordPress multisite max upload size
We need to make sure file size is validated both client-side and server-side. Felix Arntz started a patch for core that we’ll want to land in Gutenberg first.
Read through the contributing guide for details on how to get started. Feel free to ask questions on the specific issue, or join us in the #core-editor channel with any questions you might have.
]]>Board the plane last, to maximize your use of airport wifi and minimize sitting in the plane seat.
Walk everywhere you can, because you’re probably sitting otherwise. If the opportunity comes up to walk two miles to your next destination, take it without hesitation.
Drink water at every opportunity. You are more likely to get dehydrated while traveling, and dehydration can ruin your trip.
Minimize alcohol and sugar consumption. The golden amount is zero / zero. If you need to consume one, you’ll probably want alcohol for the social occasions over sugar.
TSA Pre is the easiest way to not hate the airport. I’m typically through a security checkpoint in under two minutes.
Bring lunch from home for your first day of travel. If possible, also bring non-perishable snacks from home for throughout the trip.

Ava, current and future Spray Rodeo princess
On Saturday, I ran the Spray Half to the tune of 1:48:22.
It was a great event and I was really happy with my performance. Notably, I hit faster and faster splits in the last five miles: 8:19 (mile 9), 8:02 (mile 10), 7:44 (mile 11), 7:51 (mile 12), and 7:23 (mile 13).
We left Spray on Sunday but we weren’t done yet.

Leah and Charlie walking the shores of Timothy Lake.
On Monday, Leah and I subjected Ava and Charlie to a grueling ~14 mile hike around Timothy Lake.
For better or for worse, this is the epitome of our marriage — “should we turn around now?” is left unanswered and we keep going. Fortunately, our kids are more hardcore than we are.
An A+ Memorial Day weekend for the year in review book.
]]>Dear Commissioners,
Thank you for the work you do.
My name is Daniel Bachhuber. I’m a long time resident of Tualatin, born and raised in Fox Hills and now raising my own family near Jurgens Park. I’m here tonight, instead of at home with my wife and kids, because I’m concerned about our city’s lack of attention to the housing crisis. If it’s not something we address proactively, it will become a significant problem that will ultimately impact my family’s long-term wellbeing, and my property’s long-term value.
As it relates to tonight’s meeting, I have two points I’d like to include in the public record.
First, the Oregon Department of Land Conservation and Development issued technical guidance for Oregon Senate Bill 1051, which is absent from the Staff Report. I’ve brought three copies for your reference. Notably, the technical guidance states:
Second, the Staff Report Executive Summary states: the local regulations for ADU’s must be clear and objective to make it easier to build ADU’s.
However the Staff Report does not include any data on the total number of single family dwellings with three or more off-street parking slots (the minimum required for an ADU under proposed regulations), nor does it include data on the number of lots that have sufficient space for a detached ADU with current setbacks. Based on the information provided, it appears the proposed development code does not fulfill the spirit of Senate Bill 1051 and even contradicts the statement in the Executive Summary.
ADUs are an accessible, under-appreciated housing option. They can increase housing availability while also fitting within and preserving the aesthetic of the neighborhood. For a downsizing senior, building and living an interior ADU may be a way to stay in their home while earning cash from the larger part of their house. For a younger couple, building and renting out an interior ADU may permit them to afford housing closer to work.
I strongly encourage you to use the development code changes to promote, not hamper, ADUs as one part of the solution to the housing crisis.
]]>“Accessory Dwelling Unit”, or ADU for short, is a broad label used for a variety of secondary living spaces on or in an existing primary residential property. They can be interior (e.g. converting an unnecessary bonus room) or detached (e.g. a small structure at the back of your house). If you built an ADU in this market, you could easily rent it out and make up to $1,000/month.
However, there is a caveat. Building an ADU in Tualatin is hampered by a single clause of the Tualatin Development Code: adding an ADU requires one off-street driveway spot, in addition to the two driveway spots required for the primary residence. Even though your neighbor can park five cars in their driveway and on the street, you can’t build an ADU at your house if it only has a two car driveway. According to Kol Peterson, author of Backdoor Revolution: The Definitive Guide to ADU Development, the off-street parking requirement is one of three “poison pill” regulations that significantly hamper ADU development.
Tualatin, like much of the Portland Metro area, has significant problems with housing affordability and availability. Buying a new house at $500,000 requires a family to save over $100,000 for the down payment, and then pay $2,400/month for mortgage and property tax. Rents have skyrocketed too: two bedroom apartments now start at $1,400/month. And this isn’t just a low-income problem. More and more in the community are feeling the financial stress of these costs.
ADUs are an under-appreciated housing option. They can increase housing availability while also fitting within and preserving the aesthetic of the neighborhood. They’re typically between 300 and 800 square feet, good for one or two people to live in. An interior ADU doesn’t typically require structural modifications, and its door is on the side or back of the house. Detached ADUs are usually located in the back of the house, with access along the side.
Picture your standard, single-family suburban house in Tualatin. Many houses are 2,000-3,000 square feet and have a bonus room over the garage. Other houses might have a basement, or a large-enough lot for a small structure in the backyard. Any of these spaces could be converted to an ADU. An ADU is simply a secondary, yet complete, living space (kitchen, bath, and bedroom) on the lot of a primary dwelling.
ADUs are also an accessible investment opportunity. For a downsizing senior, building and living an interior ADU may be a way to stay in their home earning cash from the larger part of their house. For a younger couple, building and renting out an interior ADU may permit them to afford closer housing to work than they otherwise could. And, for empty nesters, building an ADU could help their kids afford to start a family much closer to home.
Last August, Oregon passed Senate Bill 1051 which requires all cities to allow ADUs. While the specific definition of “allow” isn’t included in the bill, technical guidance from the Oregon Department of Land Conservation and Development strongly recommends dropping the off-street parking requirement. Cities that have already removed this requirement have seen a strong uptick in permitted ADUs.
Yet, even with this official recommendation, Tualatin has no plans to drop the off-street parking requirement from its Development Code. In fact, nearly all efforts to introduce more housing options are blocked by an upcoming, multi-year rewrite of the Tualatin Development Code.
There’s no silver bullet to the housing crisis. The dip in home building caused by the Great Recession is out of our control, as is the trend of people moving to Oregon. But, doing nothing and hoping the problem goes away will only cause more problems in the long-term. Instead, Tualatin would greatly benefit from taking the lead in exploring all potential housing options. While ADUs may be a drop in the bucket, they represent a ton of symbolic value in managing growth on our own terms.
Two upcoming opportunities to make your voice heard: the Planning Commission meeting tomorrow (Thursday) at 6:30 pm and the City Council meeting on Tuesday, May 29th at 7 pm. Both are at the Juanita Pohl Center.
]]>ADU Legislative Initiatives Abound (Kol Peterson) — While Senate Bill 1051 is requires all cities to “allow ADUs”, the Oregon Department of Land Conservation and Development guidance recommends dropping owner occupancy requirements, dropping off street parking requirements, allowing detached ADUs up to 800 sq ft by right, and even allowing two ADUs.
‘My Generation Is Never Going to Have That’ (POLITICO)— Pro-housing density efforts in Seattle from the affected tech population. See also Jeff Kaufman (Boston) and Kevin Burke (California).
Mickey Drexler and the death of a supply-driven world (Loose Threads) — Software eats retail: how J.Crew, Gap, Ralph Lauren, Abercrombie & Fitch, American Apparel, and others were blindsided by technology.
Pedaling from Portland to Hood River (Bike Portland) — Neat 100 mile bike route off the beaten path.
On Tuesday, June 5th at 10 am PT, I’m heading up a webinar with Pantheon to cover how you can get your site ready. More specifically, we’ll cover:
How to formulate a testing plan.
What to keep an eye out for in the near future.
But wait, there’s more! The webinar is just one in a series of five, including Mel Choyce and Josh Pollock. You should sign up so Tessa and I aren’t terribly lonely on June 5th.
]]>Since I last wrote two weeks ago, we’re making progress! Key achievements for Gutenberg and the REST API include:
who=authors was added to GET wp/v2/users, making it possible to accurately query for authors. WordPress, for better or for worse, defines an author as user_level!=0. See WordPress/gutenberg#6361 for the context on why we can’t add this logic client-side (#42202 for WordPress 4.9.6)._fields= query parameter (e.g. GET wp/v2/pages?_fields=id,title) by ensuring WordPress core will only process the fields requested for the response. Notably, this helps us avoid running the_content when we don’t need to be (#43874 for WordPress 4.9.7).The “Merge Proposal: REST API” GitHub milestone represents the distance we still need to close. Slowly, steadily, we’re bridging the gap, but we could use your help. Here are some of the issues we’re still working through:
per_page=-1 REST API requests for authorized users. This landed for GET wp/v2/users (WordPress/gutenberg#6627), is in-progress for GET wp/v2/(pages|blocks) (WordPress/gutenberg#6657), and needs to be addressed for categories, tags, and custom taxonomies. We also need to patch core with this enhancement (#43998 for WordPress 4.9.7?)targetSchema concept to communicate which actions a user can perform. See it in action with wp:action-sticky (WordPress/gutenberg#6529) and wp:action-assign-author (WordPress/gutenberg#6630). There are a few other actions we will need to work out, and then we’ll need to patch core (no ticket yet).WP_REST_Search_Controller endpoint (WordPress/gutenberg#6489) to power the link search UI.Join us tomorrow, Thursday, May 10 at 17:00 UTC in #core-restapi office hours if you’d like to chat through any questions you have.
Happy Thursday :)
I’ve started a new crowdsourcing project, the Gutenberg Migration Guide, to document WordPress Classic Editor customization points and their Gutenberg equivalents (if such exist).
For example, the media_buttons action is a common way to add a button atop the editor:

Its Gutenberg-equivalent is the Block Inserter. Converting a media button to the Block Inserter requires registering a block type. And now we have a corresponding page for developers to reference.
media_buttons is only one of the many ways the Classic Editor can be customized. Wouldn’t it be great if there was a database covering all of them?
This is where you come in! Take a look through the Gutenberg Migration Guide. For each action, filter, and so on, we’d like to document real-world examples of how they’ve been used. Then, for each of those real-world examples, identify how the feature might be replicated in Gutenberg.
Have a new hook to suggest or question to ask? Please open a new GitHub issue and we’ll get it sorted.
]]>Since announcing the database on March 1st, 70 people have been granted testing status. However, of 5000 total plugins, we’re still at 4139 untested plugins. No companies have stepped up to contribute a significant amount of person-hours.
Of the 861 tested plugins:
Notably, this data is largely biased by the “likely compatible” results. For the most part, these are plugins I pre-screened (e.g. caching plugins) prior to March.
In the original data set, 18 (28.125%) of the 64 incompatible and likely incompatible plugins were updated in the four weeks prior to March 1st. This means the majority are on slower development cycles.
Of the 64 incompatible and likely incompatible plugins, the reasons include:
Next steps are to be determined. “Try Gutenberg” represents an opportunity to generate more data (out of support forum requests). However, we need a workflow for capturing that data.
]]>
It was pretty cool! From the outside, you’ll notice both sliding glass and French doors where garage doors used to be. This is because it’s a basement _and_ garage conversion ADU.
In case you aren’t already aware, ADU is shorthand for adding a second living space (bed, bath, and kitchen) to a residential property. ADUs can be inside the existing structure or somewhere else on the property (space-permitting).
More generally, ADUs are neat because they open up a number of opportunities:
Here’s a pano of the immediate interior:

The developer, Kol Peterson, has been building and consulting on ADUs for almost a decade now through his company, Accessory Dwelling Strategies. He’s also written a book, Backdoor Revolution, that’s incredibly informative and information-dense. I’m already at page ~150.
As far as building an ADU in our house goes, I’ve already discovered what Kol identifies in the book as a classic regulation blocker:
(5) In addition to the parking spaces required in TDC 73.370 for the detached single-family dwelling, one paved on-site parking space shall be provided for the accessory dwelling unit and the space shall not be within five feet of a side or rear property line.
In short, we need a three car driveway in order to permit an ADU. But, we only have two slots and there’s no place to put a third. And, ironically, our neighbor can park six cars in their garage, driveway, and street just fine.
]]>In case it’s not obvious: this is a bad thing. Let the renewal begin.
]]>In the last six months, we’ve left the refrigerator door open overnight three times. Because the light stays on when the door is open, another horrible design decision, the refrigerator thermometer hits 107°F by the time I notice it in the morning.
At yesterday’s inaugural PDX Raspberry Pi and Arduino meetup, I prototyped my solution to the problem: an alarm for accidentally leaving the refrigerator door open.
Using a Parallax Ping Ultrasonic distance sensor, the Arduino board detects its distance to the nearest object in front of it. If there’s nothing within 2 inches for greater than 5 seconds, then the Arduino board uses a piezo buzzer to make some noise. The system resets when an object is placed within 2 inches again.
On a whole, I was surprised how quickly I got up to speed on Arduino. My “Hello World” project, blinking a LED diode, took about 10 minutes to complete. This distance alarm only took 20 minutes beyond that, with a little bit of guidance on what hardware to use and access to tutorials on how to use it.
Up next: figuring out how to miniaturize the entire setup so I can put it in a small housing and deploy to production (aka use it in my home).
]]>Lessons from “The Profit” (Marginal Revolution) — I hardly watch TV but I’m going to binge so hard on this series.
The big experiment at Plaza 122 (Bridgeliner) — To buy in, neighborhood residents first have to participate in a financial literacy class, which is available in Spanish, Vietnamese, Arabic, and Russian. After completing the course, they can make micro investments of $10 to $100 in the plaza each month. With enough of these investments, the community will eventually own Plaza 122 in full. So cool! You should subscribe to Bridgeliner.
One City: Many Futures / Better Block PDX (Design Week Portland) — Can we make this bike lane better, on a budget that’s slightly more than beer? “Street prototyping” as disruptive policy innovation.
Open source sabbatical = awesome (Julia Evans) — Sabbaticals as a model for open source sustainability.
Big WP Meetup NYC - April 12th.
International Symposium on Online Journalism - April 13th & 14th, Austin.
MicroConf Starter Edition - May 1st-3rd, Las Vegas.
WP VIP Workshop - May 14th-17th, Napa.
Do our paths overlap? Let’s hang out!
]]>Deliverables.
Timeline.
People
Successful projects are a harmonious balance of these three attributes. Every failure is the result of some leg of the stool not holding its weight.
But all is not lost! A project can recover at any point by revisiting its first principles, and closing the identified gaps. Simply ask yourself some guided questions.
Project management is the art and science of getting people to work together. And the more people involved in a project, the more challenging it is to get them headed in the right direction.
The project manager takes ownership of ensuring the project is deconstructed to its requisite components, and those tasks are delegated to their relevant parties. Any failure in this process is a failure of the project manager.
Identify the work to be completed, and make sure someone is responsible for it.
Communication is the most important skill for a project manager. It can make or break the entire project. It’s the single most important fulcrum in the whole process.
The tool itself doesn’t matter. Slack, email, Zoom, Google Spreadsheets, Basecamp, Asana, and Jira are all forms of communication.
Communication ensures everyone knows what they need to know.
You’re right. It’s up to you to translate these principles to the real world.
New person cc’ed into an email thread? Reply with a recap of the project to bring them up to speed.
Details and nuance getting lost in text? Offer a catch-up call to take advantage of higher-bandwidth communication.
Something not getting done? Make sure the task is actually defined, that there’s a person responsible for it, and that the person is capable of completing the work in the time allotted.
Leading a meeting? Share the agenda for review beforehand, set time limits for each discussion, and identify key takeaways and next steps that serve as the tangible results for the meeting.
General confusion about the project? Synthesize key details into a document everyone has access to, and keep it up to date.
Keep it up!
]]>A Selfish Argument for Making the World a Better Place (Kottke.org) — This has always been my raison d’être. See also: why resource utilization isn’t zero-sum.
A Performance Question (Rands in Repose) — Canonical manual for dealing with direct report performance.
The Greatest Sales Deck I’ve Ever Seen (The Mission) — Structure your deck into a narrative arc.
Andrew Sullivan on the Opioid Epidemic in America (NY Mag) — One of the hardest challenges for our generation.

Following Vivek through Koregaon Park to the rtCamp office.

Ain’t no shame getting my caffeine fix.

Not a very flattering photo of a biz team meeting.

New rtCamp office is expected to launch March 18th.

Morning arrival in Goa, after 14 hour overnight train journey.

Bunch of scoundrels.

As you might imagine, I ate a ton of Indian food.

Xavier’s Cafe all decked out for the party.

4:42 am, Dubai airport, amidst 40 hour journey home.
Ideally, the majority of WordPress users should be able to use Gutenberg on the day WordPress 5.0 is released. They’ll hit “Update WordPress”, navigate back to the editor, and continue publishing in Gutenberg with all of the functionality they expect in the Classic Editor.
But plugins! If any one of their active plugins are incompatible with Gutenberg, the WordPress user is likely to experience pain, misery, and bad fortune. Many WordPress installations have a dozen or more active plugins, so WordPress plugins are a significant risk vector for Gutenberg incompatibility.
Enter the Gutenberg Plugin Compatibility Database. The goal for this crowdsourcing tool is to identify whether or not WordPress.org plugins are compatible with Gutenberg. With this data set, we’ll be able to:
Know the most likely causes of incompatibility.
Focus developer outreach on the highest impact problems.
Proactively educate WordPress users on whether or not their WordPress installation is ready for Gutenberg.
The only gotcha: we need lots and lots of person-hours for testing. If each plugin takes roughly 1 minute to test, we’ll need ~75 person-hours to get through the remaining ~4500 plugins in the database.
Check out the project README.md for a more complete introduction to what’s involved. This includes a definition for “Gutenberg-compatible”, explanation for why only 5000 plugins are in the database, and other design decisions.
Do you or someone you know have access to lots of person-hours (e.g. WordCamp contributor day, hosting support team, etc.)? I’d love to chat! Feel free to leave a comment, ping me on WordPress.org Slack (I’m ‘danielbachhuber’), or get in touch however most convenient.
]]>Natural peanut butter stirring device. You know, to mix the peanut butter back into its oils. This device would need to be high torque with low speed, or it could even be mechanical with some design to increase mixing.
Fridge door alarm. Amazingly, our fridge doesn’t beep when the door is left open. Many fridges do. This device would emit some noise (or send you a text, etc.) when the sensor detects an opening for >10 seconds.
USB hub with mounting hardware. All I want is to mount the hub to the back of my desk so I don’t have to see it. Some hubs exist, but the price is quite high for what they are. There’s an opportunity for something with screw holes in the ~$20 range.
All-in-one individual video conferencing unit. The existing options seem focused on adding a variety of peripherals to your conference room and TV. This setup would be for one person, and include video camera, screen, light source, and audio. A veritable magic box!
Notably:
OverDrive is like free Audible! See if your local library is participating. I’ve been knocking through non-fiction since September.
Goodreads for keeping track of what books I should read and have read. Sometimes the network is useful.
Overcast may seem like an over-hyped podcast app but it’s actually really good. Listening at 1.5x is life-changing.
Look ma, no Mail.app! I made the decision to remove Mail from my phone a few months ago and haven’t looked back.
Spotify is my jam (after switching from Rdio), although I’m growing weary of algorithmic influence on music. Might be time to go back to albums.
Paprika keeps our family’s cookbook in sync between devices. Tonight is turkey meatballs, pasta, and brussel sprouts.
Previously: 2012, 2011. Inspired by Rands.
]]>Consider this search for “tablet arm”:

Which of these should I choose?
Such indecision! I could spend 20 minutes scouring through the reviews, but who knows which are real and which are fake these days. Or, I could buy them all and return the ones I don’t want. But packaging stuff back up and taking to UPS is a hassle.
For exactly this reason, I went to Best Buy yesterday (for the first time in decades), looked at video cameras, and bought a nice Canon for a cheaper price than it was listed on Amazon.
I like brands. Brands mean I can form trusting, long-term customer relationships with companies. The Amazon marketplace is overrun with knock-off products from generic drop shippers — bad and getting worse.
]]>https for the .dev domain because someone apparently thought it was a good idea to register as a public TLD. Laravel Valet only produces self-signed SSL certificates though, so I want to keep my local installations served as http. Guess it’s time to switch TLDs!
Oh, and don’t try to use .local on a Mac because it conflicts with Bonjour local networking. I discovered this with 30 minutes of wasted effort. .test is the way to go.
First, run:
valet domain test
Switch Valet to using the .test domain, which will also update dnsmasq accordingly. Don’t try to edit dnsmasq configuration on your own — there are too many ways to go wrong.
Second, run:
wp package install wp-cli/find-command
Install wp-cli/find-command to find all WordPress installs in your Laravel project directory. It’s convenient for running one WP-CLI command against all WordPress installs.
Third, run:
wp find ~/projects --field=wp_path | xargs -I % wp --path=% search-replace '.dev' '.test' --all-tables
Run wp search-replace against all WordPress installs to replace instances of ‘.dev’ with ‘.test’. ~/projects is my Valet project directory, and --all-tables ensures the procedure is run against all database tables.
Et voila! You’ve switched Laravel Valet from .dev to .test in three easy steps.
Bylines is a modern rewrite of Co-Authors Plus that I started last April. It hasn’t been anywhere near my primary focus for quite a while, so I finally called a spade a spade and started looking for a new owner. Fortunately, it’s a perfect fit for the developers behind PublishPress — I’m glad my customers ended up in good hands.
You can read more about the announcement on the Bylines website.
]]>The other day, I was reading Tualatin City Council’s work session materials for January 22nd (PDF warning). It’s actually pretty interesting. Tualatin is considering a “Local Congestion Relief and Neighborhood Safety” bond measure, and the packet provides much of the background. But it’s a PDF packet and I was only reading it because someone emailed it to me.
Which brings me to the three realizations I had:
Open source is Good™ because it increases collaboration. Increased collaboration means increased value creation. Ergo, civic engagement (and pretty much everything) would benefit from open source methodologies.
City data is really hard to come by. It needs to be manually collected and it’s often out of date as soon as it’s collected. Nowadays, any effort put into collection should result in a real-time, persistent data stream.
Cities should be learning from one another. Meaning, Tualatin must have a data profile similar to dozens of other cities in the US. If city A tries experiment B and it works, then we should use that knowledge as the basis of our evolution, infrastructure investments and otherwise.
Specific to the congestion problem at hand, I also thought it would be pretty cool if someone created an open source traffic modeling system. Lo — OpenTraffic already exists! And here’s some project that calculates traffic speed from cell phone video.
]]>Buttons in Quote block toolbar randomly shift position
The “randomness” is that the initial block toolbar is different than the one that appears when focused. We need to track down the source of the discrepancy.
Additional backtick added when writing code
It shouldn’t be there!
Content of Select Media window disappeared after uploading image
This appears to be some conflict between the Media Library upload drop zone and the Gutenberg upload drop zone.
Localize weekdays in DateTimePicker
It looks like this UI is generated by the ReactDatePicker component, so we’ll need to figure out how to pass localization through.
More tag from classic editor displays warning in Gutenberg
But it shouldn’t!
Post accidentally publishes when Gutenberg autosaves and the scheduled date is set to the past
In the Gutenberg JavaScript client, we should have some logic that verifies the post_date values we’re sending back to the REST API won’t cause the REST API to publish the post.
Read through the contributing guide for details on how to get started. Feel free to ask questions on the specific issue, or join us in the #core-editor channel with any questions you might have.
]]>Update: I forgot I said this: “[The GPL] is used often as a blunt instrument for enforcing certain economic dynamics around everyone’s businesses.” Pretty good!
]]>
She did great! She started out skiing between my legs, then we took the lift (her first time), and she finished the day doing some “turns” on her own.
]]>
Behold: the shedquarters.

A quiet space for global domination.

In this bizzaro-world rendering of my house, my shedquarters is located at the arrow.
“What is a shedquarters?” you might ask. Well, it’s a “shed” and a “headquarters” — two in one.
Ironically, I’ve had an office for the majority of my remote-work career. First a desk at PIE PDX, then an office sublet at Vadio, then a desk at MobileRQ, and thenan executive office in Tualatin. I’ve found physical separation of work and life to be critically important for mental stability.
But then Leah introduced me to the shedquarters concept and I was instantly hooked. It only took me two and a half years to actually do.

You can build a shedquarters too!
There are a million and one different things I learned the hard way that you can learn the hard way too. And, like every project, it’ll go over budget and take longer than expected:
Total hours: lots.
Before you break ground, you’ll need to plan everything out. There are a few different ways to go when building a structure:
When planning your shedquarters, you’ll also need to clear any local building codes. Pro tip: Call your city’s engineering department and explain what you’re up to. They were quite helpful my case. For Tualatin, I needed to make sure the shedquarters was 5’ or more from the property line, and that the total footprint of all structures didn’t exceed 45% of the lot.
Also important to note: my shedquarters is free-standing (i.e. not connected to my house). Connecting something to a house is considered an addition to the house and subject to all sorts of building codes.
Before you complete any of the prep work, you need to pick your building site. I cheated by getting rid of our hot tub, thus freeing up its concrete pad and electrical connection. Unless you cheat too, you’ll need to work out these details.
For better or for worse, I bought a prefab structure from Tuff Shed using their web-based Build-A-Quote tool.
I say “for better” because I’m really happy with how it turned out; having the shedquarters fit aesthetically was very important. I say “for worse” because the installation experience was laughably bad; Tuff Shed probably lost a ton of money on me.
Fire up the ol’ web browser and use Tuff Shed’s Build-A-Quote tool to design your shed.

Tuff Shed’s Build-A-Quote made it easy to visually place the structure.
Once I placed my order, it took Tuff Shed ~8 weeks to come and install it. The first installation attempt failed because the sales guy failed to adequately inform me what I needed to do to prepare the building site. The second installation day went fine, except for the defects I discovered after the fact.

Step 1: Place the base.

Step 2: Build some walls.

Step 3: Done!
Once the Tuff Shed installation was complete, I had a paint-matched building shell that fit aesthetically within the context of our backyard. However, it wasn’t truly complete because there were four remaining issues:
It somehow took Tuff Shed six additional weeks to fix these issues.
Don’t get me wrong — I’ve heard good things about Tuff Shed and am very pleased with the value and the end result. The entire process was comical though.
A shed does not make a shedquarters. You’ll need to finish the interior too. Namely, this means:
Thanks to the help of patient friends and family, I learned how to do all of this myself. Notably, texturing walls was an absolute beast. Don’t use spray cans like I did; buy a proper sprayer and hopper.

R13 baby. If you look closely, you’ll notice I stapled the insulation incorrectly.

Jordan helped me hang drywall and apply mud.

Late night painting session. Drywall is a thirsty wall.

Fake Pine vinyl flooring was A+ easy to install and looks really good.

Paul helped me box and trim the windows, and install moulding.
Like every project, the shedquarters is never complete.
For instance, I originally installed a ClimateRight 5000 BTU A/C and heater. It works well-enough, but I don’t want to leave it running all the time in the winter. But, if I don’t leave it running, the shedquarters can drop below freezing. After toying with the idea of reverse-engineering ClimateRight’s proprietary thermostat port so I could connect a Nest… I took the lo-tech approach of installing a secondary Cadet heater. Boom — now I have two heaters!
Similarly, our previous two-unit TP-Link wifi network sucked in the shed. I would have to switch to the 2.4G Hz network every time I went out to the shedquarters to avoid packet loss, etc. After anguishing over the hassle of running a wired connection, I decided to try Google WiFi (mesh network). IT WORKS LIKE MAGIC! MAGIC DUST SPRINKLED IN THE AIR! So that problem is solved too.
Upcoming enhancements to the shedquarters include:
There’s no end to the amount of money I can dump into it! For now though, I’m pretty happy with my end result and what I learned along the way.
Have a question? Feel free to leave a comment or reach out directly. I didn’t find a ton of DIY info online, so happy to help out the next person.
]]>In total, six failures have been observed:
WP_REST_Server->dispatch()
3 of 3 hosts reported failures.
Travis CI also reported a failure. Root cause was developer error.
refresh_blog_details() with clean_blog_cache()
1 of 1 hosts reported failures.
Travis CI also reported a failure. Root cause was developer error.
2 of 2 hosts reported failures.
Travis CI also reported a failure. Root case was developer error.
Interesting! But also not very interesting because there’s not much to see.
]]>Saving the Free Press From Private Equity (Robert Kuttner & Hildy Zenger) — Scathing critique; never did I realize how significant of a role financiers played. Makes me bullish on the opportunity for local media businesses.
When is a Dollar not a Dollar? (Leo Polovets) — Excellent set of evaluation criteria for determining where your service/product fits within your customer’s wallet (or whether it does at all).
Romanticizing the Hunter-Gatherer (William Buckner) — Not actually the original affluent society, as we’re led to think.
These 6 Cities Are Smarter Than Portland About Housing (Willamette Week) — Useful set of reference points.
CSforALL Consortium — Computer literacy/CS education initiative. “8% of STEM graduates are in CS, yet 71% of all new STEM jobs are in computing.”
How to tell if a CEO is worth working for (Claire Lew) — Great questions to ask (e.g. “What would an employee who’s left the company say it’s like to work for you?”).
Mr. Money Mustache, UBER Driver (Mr. Money Mustache) — No surprise: a highly competitive market means race to the bottom for compensation.
How Shopify Grew From a Snowboard Shop to a $10B Commerce Ecosystem (Hiten Shah) — Answer: clear alignment between business model and customer success.
The World’s Foremost Expert Explains How To Value Stock (Bloomberg Odd Lots) — Such a clear, understandable explanation.
Recession-Resistant Investing & the Benefits of Buying Shopping Centers with David Puchi (BiggerPockets) — Growth trend: buying out individual owners at the end of their careers, and then doing the rehab work they didn’t want to do.
To prepare, I populated a plugins table with data from the WordPress.org REST API via this plugin-stats.php script. Download the SQL file to avoid needing to re-fetch the API data.
Based on the initial API request, there are 49,749 total WordPress.org plugins.
Of the entire data set, only 18,002 plugins have 200 or greater active installs. The remaining 31,747 plugins represent an inconsequential number of active installs compared to the total.
The 18,002 plugins represent 182,296,500 total active installs. A WordPress install can have multiple active plugins, so this total isn’t unique WordPress installs. Also, we can ignore the remaining ~32k plugins because they would only represent 3,174,700 additional active installs if each plugin had 100 active installs.
Of the total active installs, 168,623,000 (92.5%) are represented by 3,440 plugins with >=5000 active installs. For that matter, 159,720,000 (87.6%) are represented by 2101 plugins with >=10000 active installs.
It’d be interesting to know what percentage of WordPress installs have a plugin not tracked in the WordPress.org plugin directory (e.g. premium or custom).
]]>Our first Afternoon Chat/Hack is scheduled for Wednesday, January 17th at the Well & Good Coffee House. If you (or someone you know) can make it to Tigard on a Wednesday afternoon, come join us!
]]>Fortunately, Feedbin is two steps ahead of me! You too can use Feedbin’s “Subscribe to Email Newsletters” feature to move your email newsletter subscriptions into RSS. Simply:
Copy your secret newsletter email address from feedbin.com/settings.
Add your secret newsletter email address as a forwarding email in Gmail.
Configure a Gmail filter for each newsletter to auto-forward to Feedbin (and mark as read / archive).
Pretty awesome.
]]>Humans come first. Software exists to serve humans, not the other way around. Design software for your end user, because they are holy and nothing else is sacred.
Pragmatism over purism. Consider for whom you’re optimizing, not for what ideal. Software ideals are false gods when they don’t serve the humans they’re meant to reflect. Choose the most pragmatic implementation over the most correct one.
Simplicity over complexity. The elegance of complex systems is a dangerous mirage. Complex systems are more difficult to maintain over time, more difficult for new people to understand, and more likely to succumb to entropy. Only choose complexity when it yields significant, durable advantages.
]]>Innovate Oregon - Spearheaded by TAO with programs in Amity, Dayton, Newberg, Willamina, and Yamhill-Carlton.
TiE Young Entrepreneurs - School year program with state competition in May.
Tualatin Mobile Makerspace - Product of the ABC competition that’s now transforming to a Tualatin STEAM non-profit.
Oregon Robotics Program - Amazingly broken website. Implements FIRST programs in Oregon.
Oregon MESA - Year-long program run out of PSU focusing on underrepresented middle and high-school students.
Open source is software businesses use to shorten time to market and accelerate their product. Some businesses build and collaborate in public because it’s a leverage strategy to get more from less. Most businesses maximize their use of open source software because they get it for “free”.
Debt is the financial term, stolen for the sake of illustrating a concept.
Open source is debt because:
Open source software is not a sellable asset. It’s both priceless and devoid of monetary value. What counts is the business value it enables.
The liability, and effort required to service this liability, grows as: 1) the software gains users, and 2) those users become more dependent the software. Support is a variable accelerant to the liability (e.g. it can grow the liability at an exponential rate).
Maintainers hold the debt liability. Their ongoing labor is required to service the debt. Typically, maintainers can only escape the obligation by declaring bankruptcy: “it’s done” or “I’m done.”
This idea could be helpful framing for:
Another, possibly more correct, way of thinking about this is: “every line of source code, open or closed, is a liability.” Businesses own 100% of their closed source liability. They like open source because they would rather own 0% of the liability.
]]>Remote work has significant cultural stigma. It isn’t yet a mainstream activity in India, so it’s looked upon with negativity. For instance, the maid will come over and ask “why aren’t you at the office? are you sick?”
Infrastructure isn’t yet eventually distributed. Moderately reliable internet at the office costs 100x what most pay for internet at home. Even the most expensive home internet (5x baseline) can still be inconsistent.
Working from home has a space constraint. An entire family of five to six people could be living in 400 square feet.
Labor laws favor full-time employment over contracting. For instance, Indian law requires six months paid leave for mothers. Contractors aren’t afforded similar benefits.
Remote work in India works best among the “intellectual elite”, but this is still a small percentage of the total engineering talent.
]]>Ultimately, the goal is: the vast majority of WordPress users are excited and should be able to use Gutenberg on day one. Fundamentally, this breaks down into two objectives:
Make the end-user experience is so good that WordPress users actively want to switch to it. We need to continue user testing as we have been, and iterate based on real user feedback. We also need to market Gutenberg — communicate what users should expect and get them appropriately excited.
Mitigate WordPress plugin and theme incompatibilities, to minimize conflicts that would cause WordPress to fall back to the classic editor. Success is defined by the majority of WordPress users being able to use Gutenberg on day one. If too many can’t use Gutenberg because of conflicts, then we’ve failed at launch.
I’ve been brainstorming some strategies for the latter, which really is two parts: identification and mitigation.
First, we need to identify the true extent of the problem: what plugins and themes are incompatible with Gutenberg, and in what ways are each incompatible? Some automated ways we can produce this data includes:
Manual/automated analysis of action and filters usage, etc.
Activate each in an isolated environment and take before/after screenshots of the editor screen.
But, I’m thinking good ol’ fashioned crowd-sourcing might be most effective. What if WordPress users had an easy way to report whether a given plugin or theme was compatible with Gutenberg? We could collect this data in aggregate to get a good sense of what types of incompatibilities we should expect, and where we should focus our efforts.
Once we’ve identified the plugin and theme conflicts, we’ll need to mitigate them. Doing so will require excellent documentation, so authors more easily understand the changes they’ll need to make, and deputizing other developers to help with the outreach process.
]]>When Your Side Project Blows Up with Dawson Whitfield of Logojoy. Logojoy is an online logo creator that uses machine learning to create the perfect logo for you. “Meh, this isn’t AI,” you might say. Doesn’t matter — it has the same disruptive impact. Can you imagine when machine learning can create your website for you?
a16z Podcast: AI, from ‘Toy’ Problems to Practical Application. The VC-backed tech startup world is focusing on operationalizing technology that already exists.
Managing Procrastination, Predicting the Future, and Finding Happiness – Tim Urban. Normally, Tim Ferriss bugs the heck out of me. Tim Urban on the other hand (founder of Wait But Why) is like an intellectual Elon Musk. Part of their conversation discussed the long view Urban takes on the topics he writes about — “all the way back to the Big Bang.” Given the long view, and how _much_ society changed in the last 50 years, it’s easy to see how bad humans are at predicting change.
“But Daniel, none of these links are conclusive proof that AI is coming.”
No, the AI apocalypse hasn’t happened yet. But, the pace of change is stunning and we can’t reliably forecast more than six months out (if that).
]]>Affordable housing. Did you know that affordable housing is defined as paying 30% of income or less on housing? And did you know that Washington County, where Tualatin is located, has a gap of ~14,500 houses and growing? I didn’t either until about five months ago. Even if you can still afford your housing, this is a problem the entire socio-economic spectrum should be working on.
Government technology. The USDS is really cool and having an amazing impact. You should listen to Jennifer Pahlka’s SALT talk, “Fixing Government: Bottom Up and Outside In”. I wish there was a similar initiative in Oregon. Is there one?
Landing Gutenberg in WordPress 5.0. Gutenberg is a revolutionary editing interface. So revolutionary, in fact, that it’s one of the worst-rated plugins in the WordPress.org directory. Getting from where we are now to happily shipped in core is going to be a challenging, multi-faceted initiative.
Let me know if you have any input on these problems, or whether there are others I should be considering!
]]>
Leif Erikson from Thurman Gate to Alder trail to Wildwood and back down. Perfect way to spend a Sunday morning.
]]>Update News Preview to latest version.
Reboot computer after News Preview crashes on launch.
Open News Preview again, which crashes on launch again.
Accidentally discover new XCode components that need to be installed. Reboot computer again.
Open News Preview again, which crashes on launch again.
Commit Apple News JSON changes and test on production.
Having a great test suite ensures exceptional build quality because:
WordPress should have amazing integration tests too.
Historically, PhantomJS has been the de-facto standard for headless browser testing. PhantomJS is also Yet Another Abandoned Open Source project, and generally a pain to deal with. But we’re in luck! Headless Chrome shipped in Chrome 59. It’s pretty amazing. For your next side project, try out the Puppeteer library.
Now that we’re over the headless browser hurdle, implementing automated browser testing is simply a matter of:
In fact, I’d argue that integration tests will be key for managing breakage when Gutenberg lands in WordPress core.
What would be really neat is if the test suite supported importing some base “state”, such that it’d be possible to easily run the same test against dozens of scenarios. This would let us perform an experiment where run the test suite against every plugin in the WordPress.org plugin directory.
]]>Person A [6:37 AM] Please ping me when you are online.
Person B [7:42 AM] What’s up?
Person A [8:56 AM] What do you think about topic X?
In case it’s not immediately obvious, this conversation is horribly ineffective. It’s imprecise, has a high degree of latency, and is hugely wasteful.
Email gained a bad reputation because people started abusing it. Slack is the new email because it’s become an “all-day meeting with random participants and no agenda.”
I deleted the Slack desktop app a while back. Being signed in to a dozen plus Slack organizations led to notification paralysis — the unread indicator made it impossible to get anything done. Since then, I open the corresponding Slack organization when I’m actively working on a given project, and leave it closed otherwise.
But, this approach still has the problem of mentions / direct messages, email notifications, and high latency. Going forward, I’m instituting a new policy of encouraging email (or some other async medium) when I’m not actively signed in to Slack. If you see me online, feel free to ping me. Otherwise, please use a more appropriate medium.
]]>Thank you for introducing me to dehydrated foods, yet another under appreciated quality of life.
Thank you for your strong sense of sensibility. Even though it can be difficult to resist desire, delayed gratification is always more rewarding.
Thank you for encouraging higher education. Even though I didn’t manage to graduate college, your expectations set a high bar to reach.
Thank you for my father. I obviously wouldn’t be here today without him. But even more so, I am a strong reflection of him, and he a strong reflection of you. Everything I appreciate and value is a manifestation of your strength of character.
Thank you for my aunts, uncles, and cousins. As I’ve grown older, I’ve realized how lucky I am to be surrounded by a loving, fun, thoughtful and caring extended family.
Grandpa, you’re neither gone nor forgotten.
You’re still here with every one of us — in fact, we’re inseparable. I know that I can always spend time with you by going mushrooming in the woods, cooking good food for my entire family, and holding myself to higher standards.
I’m only 30 and still my time on earth is limited. I’ll consider myself successful if I manage to have half the impact you’ve had.
Love you, Grandpa.
]]>
Ran with my momma and sang happy birthday to her over the PA at the start.
]]>Here’s how it might work:
The target market is every customer subject to “Contact us for a quote” pricing (typically $2k/month and up). The service would enable a non-technical company to run their website in the price-performant public cloud without needing to internalize the DevOps cost.
Some existing options include ServerPilot and Laravel Forge, but neither focus deeply on WordPress.
Crazy?
]]>wp_commentmeta table to balloon in size.
Use wp db size --tables to see the size of all tables:
$ wp db size --tables
+-----------------------+--------+
| Name | Size |
+-----------------------+--------+
| wp_users | 9 KB |
| wp_usermeta | 66 KB |
| wp_posts | 274 MB |
| wp_comments | 48 MB |
| wp_links | 3 KB |
| wp_options | 41 MB |
| wp_postmeta | 25 MB |
| wp_terms | 796 KB |
| wp_term_taxonomy | 621 KB |
| wp_term_relationships | 905 KB |
| wp_termmeta | 48 KB |
| wp_commentmeta | 687 MB |
+-----------------------+--------+
Whoa! wp_commentmeta is way larger than I’d expect it to be. What’s going on there?
Let’s take a look at what keys are used:
$ wp db query "SELECT DISTINCT meta_key FROM wp_commentmeta"
+-----------------------+
| meta_key |
+-----------------------+
| akismet_result |
| akismet_history |
| ERRating |
| akismet_user_result |
| akismet_user |
| akismet_rechecking |
| akismet_as_submitted |
| akismet_pro_tip |
| _wp_trash_meta_status |
| is_customer_note |
| rating |
+-----------------------+
Hm. Can’t quite tell what might be a large one from that set. Let’s look at a random comment:
$ wp comment meta list 659968
+------------+----------------------+-----------------------------------------------------------------------------------------+
| comment_id | meta_key | meta_value |
+------------+----------------------+-----------------------------------------------------------------------------------------+
| 659968 | akismet_result | true |
| 659968 | akismet_history | {"time":1503414726.1497,"event":"check-spam"} |
| 659968 | akismet_as_submitted | {"comment_author":"coach handbag tassels embroidery","comment_author_email":"uazetk@gma |
| | | il.com","comment_author_url":"http:\/\/www.bestcoachbag.store\/accordion-zip-wallet-in- |
| | | signature-embossed-leather-p-37.html","comment_content":"Hi, i think that i saw you vis |
| | | ited my site thus i came to return the favor?I'm attempting to find things to enhance m |
| | | y website!I suppose its ok to use some of your ideas!!","comment_type":"","user_ip":"58 |
| | | .19.83.5","user_agent":"Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozill |
| | | a\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.0.3705)","blog":"http:\ |
| | | /\/example.com","blog_lang":"en_US","blog_charset":"UTF-8","permalink":"http:\/\/exa |
| | | ple.com\/one-two-three"} |
+------------+----------------------+-----------------------------------------------------------------------------------------+
What on Lord’s earth? Why is Akismet storing a copy of every comment in comment meta? I wonder how large that is in total:
$ wp db query "SELECT sum(char_length(meta_value)) FROM wp_commentmeta WHERE meta_key='akismet_as_submitted'"
+------------------------------+
| sum(char_length(meta_value)) |
+------------------------------+
| 567045828 |
+------------------------------+
Ah, I see. Akismet’s akismet_as_submitted entry is 567 MB of the 1 GB total database size. That makes sense.
PS I tried to list the total comments but then I ran into a WP-CLI bug. Que será, será.
]]>
A limited set (199 in total) will be headed to WordCamp Europe next week for WP-CLI’s biggest fans.
]]>wp-cli update --nightlyLive life on the bleeding edge by running latest and greatest version of WP-CLI.
The master branch is typically stable enough to use in local and staging environments. Or production too, yolo.

wp scaffold theme-testsYou probably knew you could scaffold plugin tests, but you probably didn’t know that you could also scaffold theme tests.
wp scaffold theme-tests gives you everything you need to write PHPUnit tests that leverage the WordPress test suite. Specifically:
bin/install-wp-tests.sh is a setup script to download the WordPress test suite and create the test database..travis.yml is a configuration file to automatically run your tests every time you push to GitHub (Travis account required).tests/ contains the PHPUnit-specific files. You can modify test-sample.php to your liking.Functionally, theme tests are pretty much the same as plugin tests. Check out the generated tests/bootstrap.php file for the secret of how your theme gets loaded into the test suite.

wp role resetIf you’ve been monkeying about with core’s default roles, wp role reset will set them back to the basics.
Reset a single role, or reset them all with --all.

wp rewrite list --match=<uri>Rewrite rules are WordPress’ API for routing URI patterns to WP_Query instances.
For historical reasons, rewrite rules are stored in an option, which means you need to “flush” (regenerate) rewrite rules any time you register a new one.
The --match=<uri> argument makes it possible to see which rewrite rules match the URI you’ve provided, making it simple to debug why your rewrite rule doesn’t seem to be working. Because rewrite rules never work the first time.

wp shellEver wish you could literally write and run PHP code against WordPress?
Well, now you can. Actually, you’ve been able to for years.

wp site emptyIf you want to delete all content in your WordPress install, but keep users, options, etc., wp site empty is your new best friend.

wp cron event runAfter the Rewrite API, WP Cron is the WordPress developer’s second most bane of their existence. It’s opaque, buggy, and unreliable.
But, we have to use it, so we may as well make it easier to work with.

--promptThere are some commands I still can never remember the arguments for.
--prompt works with any WP-CLI command, even those you write yourself, and interactively walks you through all of the arguments you need to complete.

wp-cli.ymlWP-CLI supports global- and project-based configuration files to accelerate your workflow.
For instance, if you use the same command with the same arguments over and over again, you can define those arguments as the default arguments for the command.
“Ugh, I always have to enter the same username and password when installing WordPress”… no you don’t!

You must be a WP-CLI master.
Here are four challenges for you to complete (with WP-CLI) in two minutes or less. For the solution, click on the link to see the GIF:
]]>MVP is a reincarnation of Co-Authors Plus. From there, I plan to iterate on a feature set relevant to the multi-author publishing workflow.
If this sounds useful to you, sign up to be notified when Bylines is ready for early-access users.
]]>Call me a glutton for punishment, but I receive email notifications for all the GitHub activity of projects I manage. I use email because:
Ultimately, this means I see a pull request as soon as it comes in (or, at least, when I check my email).
When I see the pull request come in, I take some form of action on it. This action is either:
In both cases, I respond to the contributor accordingly. In the latter case, I add the code review to my task management tool, and come back to it when I have the bandwidth.
All of this hopefully underscores I think it’s important to communicate well, and handle contributions in a timely, effective manner.
WP-CLI has a two-week abandonment policy. If we don’t hear from you in two weeks, then we consider the pull request is abandoned.
Usually around day 10, I’ll reach out on the thread and as the contributor if they’ll be coming back to finish up. They respond most of the time, with either “yes, just need another day or two” or “no, I’m too busy now.”
When a pull request is abandoned and I want to land the code anyway, I’ll fork their branch so they still get credit for the work they’ve done and finish it up.
My dba, Hand Built, actually just a business of me, myself, and I. In 2015 (the last year I calculated it), I spent 12.26% of my time contributing to open source.
This year, things are bit different. Not only do I get paid (on a part-time basis) to maintain WP-CLI, but I have the budget to eventually hire a couple more part-time maintainers. The first is ramping up right now.
The expectation is that each of us commits an average of five to ten hours per week towards project. The theory is this is enough time to make regular, substantial contributions to the project, while also having enough of a foot in the real world to focus our effort on what’s most important. Each person is expected to manage her/his own time, balancing WP-CLI with the rest of their life as they see fit.
For those who aren’t in the loop, “5 For The Future” was/is a call by Matt Mullenweg for companies to dedicate 5% of their people towards the WordPress project:
I think a good rule of thumb that will scale with the community as it continues to grow is that organizations that want to grow the WordPress pie (and not just their piece of it) should dedicate 5% of their people to working on something to do with core — be it development, documentation, security, support forums, theme reviews, training, testing, translation or whatever it might be that helps move WordPress mission forward.
Personally, I’m not sure how much of an impact 5FF specifically had on increasing the labor pool for the WordPress project. It seemed to be more of a one-time rallying cry than anything else.
I don’t mean to discount the intent, though. While the WordPress project could certainly benefit from more labor capacity, it certainly has a lot already from a healthy variety of companies. Furthermore, introducing more labor to the project also requires scaling up capacity to direct the labor.
On the other side, five percent of people seems to be a very challenging goal for many companies. If I were to put a number to it, it seems like most companies engaged with open source would be in the one to two percent range.
Which isn’t to say it’s not important for companies to more effectively support the open source projects they depend on. Contributing to open source is still hard: it’s a lot of overhead to stay regularly engaged with a project, and difficult to account for the benefit of the contributions.
]]>


*.dev domains by default. But what if you need to host hack the production domain to your project? As it turns out, it’s easier than you’d expect it to be.
First, add the record for the domain to your /etc/hosts file:
sudo echo '127.0.0.1 my-project.com' >> /etc/hosts
Then, in your parked directory, create a symlink with the domain you want to serve:
$ cd ~/projects/
$ valet park
This directory has been added to Valet's paths.
$ mkdir my-project
# my-project.dev is now served by Valet
$ ln -s my-project my-project.com
# my-project.com is now served by Valet
Valet’s Nginx configuration handles all requests by default, so don’t bother creating a custom Nginx config file. Having it serve your specific domain is only a matter of making sure Valet knows where to find your project directory, given its auto-discovery behavior.
]]>Inspired by Pantheon’s WP Launch Check (credit where credit is due), wp doctor saves your team hours of time by codifying diagnosis procedures into a series of checks run by WP-CLI. For example, cron-count is a check to ensure WP Cron hasn’t exploded with jobs:

Not only does it come with dozens of default checks, wp doctor is designed for extensibility. Easily create a custom doctor.yml file to define additional checks you deem necessary for your system:

If you manage more than a few WordPress installations, wp doctor is your new favorite WP-CLI command.
I voted Hillary Clinton predominately because I think Donald Trump is a whack job, unfit for President, and that Hillary better represents my social values. Going into Election Day, even though media coverage leaned strongly towards Hillary, my thinking was that I wouldn’t be surprised if Trump won. And then he did, and I was surprised, but not really.
Some people close to me are in the minority groups subject to Trump’s hate speech (LGBTQ, non-white). Other people close to me probably voted Trump, although I haven’t yet talked to them about it directly.
I’m a registered Independent, and would consider myself socially progressive, fiscally conservative, and politically libertarian. In less contentious political arenas, I voted Kate Brown for Governor of Oregon, no to Measure 97 (increased corporate income tax), and yes to Tualatin City Council term limits.
I don’t think Trump won because he’s a racist, misogynist, and bigot. I think he won for the same reasons the congressional approval rating is at 13%, voter turnout was 55% (a 20 year low), and I myself have been largely politically apathetic for the majority of my voting career. Most Americans have lost faith in the US government — they don’t think their elected politicians are effective representatives of their interests.
I don’t think most Trump voters are ignorant, hateful, etc. Given the divisive state of affairs in this country, the only path forward is respect, mutual understanding, and compassion. I’ve been sharing op-eds from Trump supporters because I think it’s important to listen to their stories. I’ve also found these articles illuminating:
This morning, my wife and I attended service at West Hills Unitarian Universalist Fellowship, my first time at church in years. Reverend Tracy gave an amazing sermon titled “Compassion and Action”. The audio will eventually be posted to that link, I think.
]]>This release focuses predominantly on splitting WordPress’ alloptions cache into separate cache keys to mitigate cache pollution caused by race conditions. [Read #31245](https://core.trac.wordpress.org/ticket/31245) for all of the gory details. Thanks to [Ryan](https://twitter.com/rmccue) and [Joe](https://twitter.com/joe_hoyle) for paving the way.
If you haven’t thought about WP LCache since the [v0.1.0 announcement](https://handbuilt.co/2016/09/08/introducing-wp-lcache-v0-1-0/), you’re missing out. WP LCache is faster than other object cache implementations because:
* By using APCu, which is in-memory, WP LCache uses the fastest possible persistent object cache backend and avoids costly network connections on every request. When using a Memcached or Redis-based persistent object cache where Memcached or Redis is on a different machine, the millisecond cost of each cache hit can add up to seconds of network transactions on every request. * By incorporating a common L2 cache, WP LCache synchronizes cache data between multiple web nodes. Cache updates or deletes on one node are then applied to all other nodes. Without this synchronization behavior, APCu can’t be used in server configurations with multiple web nodes because the cache pool is local to the machine.
Still not convinced? WP LCache has a variety of features no one else has, including native handling of cache groups, meaning you can delete an entire group of keys with `wp_cache_delete_group( $group );`.
Props again to [David Strauss](https://twitter.com/davidstrauss) for his ongoing work on the LCache library, and to [Pantheon](https://pantheon.io/) for sponsoring open source infrastructure.
Install, activate and enable with `wp plugin install –activate wp-lcache && wp lcache enable`.
]]>“But why another object cache drop-in?” you might ask. Because it’s faster than the others, of course.
Under the hood, WP LCache uses LCache, a library that applies the tiered caching model of multi-core processors (with local L1 and central L2 caches) to web applications. In this particular configuration, APCu is the L1 cache and the database is the L2 cache.
APCu is the fastest persistent cache backend you can use, because it exists in PHP memory. However, APCu traditionally can’t be used on multiple web nodes because each node represents a different cache pool. Because WP LCache has a database-based L2 cache, a cache update or delete on one node is then automatically synchronized to all other nodes.
Props to David Strauss for his hard work on the LCache library. Thanks to Steve Persch and Josh Koenig for their help with the WordPress implementation.
Feeling adventurous? Install WP LCache from WordPress.org or Github, and send us feature requests (or bug reports).
]]>
Having never planned a high school reunion before, here’s a non-exhaustive list of things I wish I had known in advance:
We had a ton of fun last Saturday night. I’m super glad I volunteered to help out (I wasn’t on ASB or anything). And, now I know what’s involved for next time!
]]>If we can solve this organizational design challenge, then landing the WP REST API endpoints, and other large improvements to the project, becomes an “easy” task (or at least one requiring a known amount of people with a known amount of involvement). If we can’t solve this organizational design challenge, then it does us no good to commit the endpoints to WordPress core. My biggest fear is for the endpoints to become another media library.
Specific to the WP REST API endpoints, I think it’s time for WordPress to aggressively pursue the component maintainer model. We need effective, reliable component maintainership to take responsibility for producing quality endpoints for each component.
]]>SRCCON is pretty much my favorite conference of all time. The first year was in Philly, and the second year was in Minneapolis. This year, SRCCON ended up in Portland, on my birthday to boot, which meant I could do the unthinkable: attend SRCCON by bike.
As it turns out, there’s a great bike path for all but a quarter mile or so of the ride.
From Tualatin Community Park, ride through Cook Park and then along Hall Blvd. You’ll go past the Tigard Public Library, over 217, and then eventually end up on Oleson Rd. There’s a short jaunt on Garden Home, then you end up on Multnomah Blvd for quite a while. The one sketchy part of the route there is where Multnomah turns into Terwilliger, and you have to bike on the odd combo off/on-ramp. From Terwilliger, you turn right onto Barbur for a short while, then drop down to the waterfront near Willamette Sailing Club. It took me about an hour to get to this point. The waterfront then connects you to whatever part of downtown you want to go to.

Surprisingly, Google Maps doesn’t just reverse the route for the ride home. Coming from the Pearl, I ended up taking Broadway to Terwilliger, where I rode in the shade for quite a while. After Terwilliger, you take Capitol Hwy to Multnomah Blvd again, then reverse tracks home.

Awesome way to spend the day!
]]>Miracle Method to the rescue! Literally. Our tech, Owen, did an amazing job, and was very professional. He spent an hour more than he planned color matching to our old bathtub. I wish we had found this option sooner, and avoided a good six months of procrastinating.
]]>Our Bob stroller has been a great investment. But, with the birth of Charlie in December, I needed a way to take both kids running with me. After a few week deliberating on whether we should buy a double Bob and a bike trailer, or if we should spend $800+ on a dual purpose trailer stroller, I’m happy to report the much less expensive Burley Honey Bee Trailer is pretty much the best thing ever.
As a running stroller, the Honey Bee is light and easy to push. There’s ample storage space for blankets and kids snacks, and the rain cover means we can go for a family run regardless of the weather. The only downside is that the front tire can get a bit wobbly at times.
As a bike trailer, the Honey Bee is easy to pull and steer with. Because it has the front wheel attached to the bike arm, we can easily detach the trailer at our destination, and use it as a stroller. Magic! The trailer also easily disassembles to fit in the trunk of our Subaru Crosstrek.

Last November, I published a Kickstarter, and was completely blown away by the support. This month, the funding ran out, so I thought I’d post one last RESTful WP-CLI update.
Actually, the story doesn’t end here. I’m writing a massive retrospective post about using Kickstarter to fund open source, so keep an eye out for that. Also, WP-CLI v0.24.0 is due out a week from now, July 27th, and it’s looking to be the largest release ever. When you do a Kickstarter, it’s really just the beginning of something bigger.
Enough with the superlatives, let’s dive into some new features. Remember: RESTful WP-CLI features require under the hood changes to WP-CLI. You’ll want to wp cli update --nightly to play with this new functionality locally. Once you’ve done so, you can wp package install wp-cli/restful to install the latest.
WP-CLI aliases are shortcuts you register in your wp-cli.yml or config.yml to effortlessly run commands against any WordPress install.
For instance, if I’m working locally on the runcommand theme, have registered a new rewrite rule, and need to flush rewrites inside my Vagrant-based virtual machine, I can run:
$ wp @dev rewrite flush
Success: Rewrite rules flushed.
Then, once the code goes to production, I can run:
$ wp @prod rewrite flush
Success: Rewrite rules flushed.
Look ma! No more SSH’ing into machines, changing directories, and generally spending a full minute to get to a given WordPress install.
Additionally, alias groups let you register groups of aliases. If I want to run a command against both runcommand WordPress instances, I can use @both:
$ wp @both core check-update
Success: WordPress is at the latest version.
Success: WordPress is at the latest version.
Aliases can be registered in your project’s wp-cli.yml file, or your user’s global ~/.wp-cli/config.yml file:
@prod:
ssh: runcommand@runcommand.io~/webapps/production
@dev:
ssh: vagrant@192.168.50.10/srv/www/runcommand.dev
@both:
- @prod
- @dev
WP-CLI now natively supports a --ssh=<host> global parameter for running a command against a remote WordPress install. Many thanks to XWP and their community for paving the way with WP-CLI SSH.
Under the hood, WP-CLI proxies commands to the ssh executable, which then passes them to WP-CLI installed on the remote machine. Your syntax for -ssh=<host> can be any of the following:
wp --ssh=runcommand.io), which means the user will be inferred from your current system user, and the path will be the SSH user’s home directory.wp --ssh=runcommand@runcommand.io).wp --ssh=runcommand@runcommand.io~/webapps/production). The path comes immediately after the TLD of the host.Or, if you use a ~/.ssh/config, <host> can be any host alias stored in the SSH config (e.g. wp --ssh=rc for me).
Note you do need a copy of WP-CLI on the remote server, accessible as wp. Futhermore, --ssh=<host> won’t load your .bash_profile if you have a shell alias defined, or are extending the $PATH environment variable. If this affects you, here’s a more thorough explanation of how you can make wp accessible.
Today marks the release of RESTful WP-CLI v0.2.0. Among 43 closed issues and pull requests, I’d like to highlight two new features.
First, use wp rest (post|user|comment|*) generate to create an arbitrary number of any resource:
$ wp @wpdev rest post generate --count=50 --title="Test Post"
Generating items 100% [==============================================] 0:01 / 0:02
When working on a site locally, you often need dummy content to work with. There are a myriad of ways custom post types can store data in the database though, so generating dummy content can be a painstaking process. Because the WP REST API represents a layer of abstraction between the client (e.g. WP-CLI in this case) and the database, it’s much easier to produce a general purpose content generation command.
In the future, I’d love to see dummy data generated for each field based on the resource schema.
Second, use wp rest (post|user|comment|*) diff to compare resources between two enviroments:
# "command" isn't a typo in this example; "command" is a content type expressed through the WP REST API on runcommand.io
$ wp @dev rest command diff @prod find-unused-themes --fields=title
(-) http://runcommand.dev/api/ (+) https://runcommand.io/api/
command:
+ title: find-unused-themes
When working with multiple WordPress environments, you may want to know how these environments differ. Because the WP REST API represents a higher-level abstraction on top of WordPress, computing the difference between two environments becomes a matter of fetching the data and producing a comparison.
There are a number of ways the diff command could be improved, so consider this implementation to be the prototype.
What’s next?
More immediately, I’d like to start looking at how well RESTful WP-CLI works with plugins and themes. If you’ve written custom endpoints for the WP REST API, please weigh in on this Github issue so I can check it out.
Ultimately, the goal is for wp rest post to replace wp post, but there are many months between here and there. In this future where WP-CLI packages are first-class citizens amongst the commands in WP-CLI core, RESTful WP-CLI gets to serve as a testbed for figuring out how that actually works. We shall see, we shall see.
As always, thanks for your support!
]]>https://gist.github.com/danielbachhuber/206f2cea8dab1ce73d5a71a04810ac57
]]>Ugh.
Seems like people only want to use open source for free. When it comes to paying for support or fixing bugs, no one sees the value.
So many good projects on Github living semi-abandoned, decrepit lives because there’s no economic model for maintaining them.
Feeling quite discouraged right now :(
For the last several months, I’ve been slowly, steadily working to solve this problem with runcommand (albeit in a limited domain, WP-CLI commands). Eventually, I’d like for runcommand to become a healthy, for-profit company, with an entire team to work on these two problems:
“Sparks” is my first iteration on the collaborative roadmap concept.
For instance, every single managed WordPress hosting company would benefit from a diagnostic tool for WordPress sites, yet none of them have invested in an open source solution because the cost of maintenance is too high (one actually started a project but hasn’t improved it much over time). Similarly, every single WordPress agency would benefit from a Drupal migration command, yet none of them have open-sourced their internal abstraction because the cost-benefit ratio makes zero sense.
The key idea behind Sparks is to create a space where WordPress-based businesses can contribute to an open source roadmap, collaboratively prioritize, and then share the cost of development and maintenance. I see this as a huge opportunity for businesses predicated on access to reliable open source software.
As I mentioned in my WCEU presentation, Nadia Eghbal is doing wonderful research into the economics of open source. She’s even put together a Github-based guide to financial support for open source projects. I’d like to highlight a passage from her kickoff post:
Most developer tools have nothing to charge for, and are not big or centrally organized enough to get venture or corporate funding. Projects that we use, or indirectly benefit from, every day. (Every app on your phone right now is using one of these projects in its software. I guarantee it.)
In other words, everybody is building software, but ignoring the tools we need to build them.
To support that, a couple of thoughts:
- There is an enormous disconnect between project owners and their stakeholders. Every open source developer I spoke to thought there was a “funding problem”, even if there was disagreement about how to fix it. But hardly any founder, VC, or big tech employee was aware of the issue, even when they used or benefitted directly from these projects.
- This is a relatively new problem. Open source has been around for 30 years. It worked well in the early days, but from 2008–2013, GitHub and Stack Overflow made it go hockey stick. Today, more people use open source, but fewer people contribute back, than ever before. And everybody assumes that somebody else is doing it. (This is also known as the “free rider problem”. Left unchecked, it leads to a tragedy of the commons.)
What could go wrong? Well, this, or this, or this. People getting burned out and quitting. Bugs or security vulnerabilities that go undetected. But also, people just making less stuff. Society moving a little more slowly.
The better we make open source, the better we make technology as a whole. When we have really good tools, it’s easier for everybody to use them to do creative and interesting things.
The pricing aspect of runcommand’s hybrid support and custom development model has been a tougher sell than I expected. I don’t yet have a one-line answer to “what development effort do I get for my money?”. I’ve thought long and hard about the idea that each pricing tier gets you a certain amount of votes on Sparks. But, a voting mechanism implies a certain number of votes are required for each Spark, which implies level of effort estimations and harder to manage expectations. Plus, the price doesn’t just go towards development of new features, it goes towards everything else too.
Ultimately, I know this is a positioning issue — not one of the idea itself. When I explain the concept of Sparks to a prospective customer, they get it. It makes a ton of sense to share the burden of building and maintaining boring, business-critical infrastructure. High-touch support and custom development is expensive though, which makes it challenging to offer more affordable pricing options. But I also know that phrased differently (props to Tim Dobson), businesses would willingly pay hundreds or thousands of dollars for solutions to some of the problems on the roadmap. And the cost of building and maintaining any of these solutions in-house is easily tens of thousands of dollars.
Just so it’s stated, philosophically I believe commercial enterprise can be an enabler of healthy open source communities. The problem with patronage is that it’s very hard to get a “real” amount of money; I, for one, can’t pay my mortgage on $500/month. Patronage also sets the precedent that you should be a martyr. I think maintaining open source should be profitable.
If you think open source is building your business on semi-abandoned or poorly-maintained public code, you’re doing it wrong.
Every single managed WordPress hosting company is spending tens of thousands of dollars right now to build an automated testing solution for WordPress plugin updates. What if they didn’t have to internalize the cost, but had a means to work together on a common solution? Or, what if those plugin updates were trustworthy in the first place, because each plugin was reliably maintained and supported? The WordPress.org plugins directory has clearly become a tragedy of the commons; WP-CLI, and open source broadly, doesn’t need to be.
Think WP-CLI is cool now? You haven’t seen anything yet. Let’s work on these impossible problems, together.
]]>
I’d like to talk with you today about the emotional rollercoaster of maintaining an open source project. More specifically, the emotional highs and lows you’ll experience publishing your code online.
But first, let’s start by taking a look at the bigger picture.

Marc Andreessen, creator of the Netscape web browser, famously said “software is eating the world.” I’d like to posit that it’s actually open source software that’s eating the world, and I have a couple of data points to back me up.
First, a conclusion from the 2015 Future of Open Source survey: “Seventy-eight percent of respondents said their companies run part or all of its operations on OSS and 66 percent said their company creates software for customers built on open source. This statistic has nearly doubled since 2010.”
Second, Nadia Eghbal, who is doing really great research into the economics of open source, calculated that “open source was worth at least $143M of Instagram’s $1B acquisition.”
I think there are a few reasons for this Cambrian explosion of open source usage:
So open source is pretty huge. But what is it exactly? 
“Open source” now means two things.
Clearly, there’s the official definition, a permissive license which grants certain freedoms to the end user.
But when people use “open source” today, they’re probably referring to building and collaborating in public. In fact, they may not care about the license at all — over 80% of projects on Github don’t have an explicit license.
Why are so many people involved in open source? Well, for all of the business reasons covered before. I also think it’s joyful to get to work with people of a variety of cultures and backgrounds. Additionally, open source has given me a sense of permanence to my career, where the job I’ve taken from year to year has not.
There are a couple of different ways you can participate in open source.

Contributing is a form of short-term participation. You make a one-off or twice-off contribution, and then your involvement is over.
Maintaining is taking long-term ownership over a particular aspect of a project. In this equation I’ve produced, maintaining is greater than contributing both in level of reward, but also effort, commitment, and emotional involvement.
Let’s take a walk through the emotional journey of becoming a maintainer.

When thinking about becoming a maintainer, you might be too embarrassed by your code to publish it online. Here’s a little secret: everyone is embarrassed by their code. Being embarrassed by your code is not an excuse not to publish your project and become a maintainer.

In fact, publishing your project is a great excuse to learn. Posting your code online leads to conversations about it you wouldn’t have had otherwise. When people come to use your project, they’ll give you problems to solve that will help you grow as a developer.
Important to note: it’s a long, hard road to mastery — and the road never ends.

As the newly-minted maintainer of an open source project, you may feel discouraged you can’t ever finish your releases. I used to feel this way too. I used to plan a release by adding a bunch of issues to a milestone, and work against the issues until they were all done. However, a few to several to a dozen issues would always delay my October release date into December, January, and February.

With WP-CLI, I release new versions on a time-based schedule, and checklist the steps involved in the release process. Philosophically, I believe users shouldn’t care about which version they’re on, only that they’re on the latest and greatest. In fact, I avoid assigning issues to milestones until they’re done, or if they absolutely need to be fixed.
To streamline the release process, I’ve adopted a consistent release note format, so I never have to think about how they should be written. Similarly, I’ve created a checklist for the release process, and scripted as much of it as possible.
Important to note: wrapping up a release still takes several hours you’ll need to find in your schedule.

As the maintainer of an open source project, you may feel overwhelmed by your issue backlog. As your project becomes more popular, users will open up issues, and this will happen at a greater rate than your ability to close them. At some point, you’ll hit the 400 open issue mark and lose all hope.

In maintaining WP-CLI, I do my best to triage, prioritize, and make decisions. I review the backlog regularly, refining issues to ensure they have sufficient detail, assigning labels as necessary, etc. I prioritize by only assigning myself on a few issues at a time. Lastly, I make decisions — if an issue has been open for two years without any movement, then it’s probably not important to fix.
Important to note: you’ll never get to zero, so you’ll need to come to grips with what is a healthy number of open issues for your project.

As the maintainer of an open source project, you may get frustrated when issues turn into flamewars. Text has a very low emotional density. You and I having a conversation across from one another has high emotional density; we have body language, facial expressions, and vocal intonation to support the words we’re saying. Text-based conversation, with its low emotional density, can easily lead to misunderstandings.

In maintaining WP-CLI, I do my best to be empathetic, respectful, and firm.
First, I do my best to try and understand where the user is coming from. I try to put myself in their shoes, to figure out what they might be meaning that they aren’t necessarily saying.
Second, I’m respectful of the fact they’re using some of their precious time to try and improve my project. If they’re reporting a bug, it may be one that’s sunk a day or two of their time.
Lastly, being firm asserts myself as the authority on the subject, which sets the tone for the conversation and reduces ambiguity.
Important to note: you’ll still need to develop a thick skin.

As the maintainer of an open source project, you may feel overcommitted on your open source involvement. People ask you to do things, and you say yes. Too many yesses lead to stress.

In maintaining WP-CLI, I’ve discovered I need to make myself happy first, and set clear boundaries on my involvement. The best balance I’ve found is 2-5 hours per week, as a part of my normal work schedule. This keeps my involvement a passion, and from feeling too much like work. Because I prioritize the issues I’m working on, I can make regular progress on what I think is most important.
Important to note: commitments are a constant balancing act.

As the maintainer of an open source project, you may feel all alone. This is a current struggle of mine with WP-CLI as I try to find a long-term future for WP-CLI that isn’t wholly dependent on me. As fun as it is to be a benevolent dictator, I’m concerned about the project’s bus factor.

With WP-CLI, I’m shifting my focus to leadership, and identifying opportunities for others to be decision-makers with the project. More specifically, I am:
Important to note: You’ll never find all of the contributors you want, so you need to accept and make use of what you have, which can be difficult.
So, where is all of this heading?

WP-CLI is eating WordPress.
WP-CLI is becoming more and more embedded in the WordPress developer experience. It seems like there’s a WP-CLI session at every WordCamp these days.
With the command line, WP-CLI enables doing more with less effort. You can help WP-CLI eat WordPress by writing and maintaining custom commands.

Just like WordPress has plugins, the future of WP-CLI is packages of commands. For this future, I’m trying to proactively solve the problems WordPress has with plugins:
We’re all aware that open source is an increasingly valuable part of the global economy. In this talk, I hope I’ve conveyed that, emotional rollercoaster aside, maintaining an open source project can be a hugely rewarding part of your career.
When you decide to take the leap, I look forward to saying to you…

Just curious, what made you choose Behat for [WP-CLI] testing rather than PHPUnit like WordPress core, EDD and a lot of other big WordPress plugins?
Is it just for easier readability of tests, or is there more to it?
I have a few projects that need unit testing and am trying to decide what tool to use.
Thanks Bill! Happy to take a swing at answering your question.
But first, let’s take a little step back to understand what is a Behat and what is a PHPUnit.
Behat is “an open source Behavior Driven Development framework for PHP”. Behavior driven development (BDD) is different than test driven development (TDD) in that BDD tests the overall behavior of an application, as opposed to individual units of functionality. For instance, the Behat test for wp option get looks something like this:
When I run `wp option add str_opt 'bar'`
Then STDOUT should not be empty
When I run `wp option get str_opt`
Then STDOUT should be:
"""
bar
"""
These Behat assertions test the behavior of the application (WP-CLI) because they perform the tests in the same way a user might actually use WP-CLI. For each assertion, the entirety of WP-CLI is loaded and executed, in addition to the command being tested. BDD makes it much easier to say “Yes, WP-CLI is working as the user expects it to work.”
On the other hand, PHPUnit is “a programmer-oriented testing framework for PHP”. PHPUnit is better suited for unit tests, and some forms of integration tests. WordPress has a PHPUnit-based test suite you can use in your own plugin. Writing unit tests (and TDD generally) is different than BDD because you’re writing tests for a more limited scope of the codebase. For instance, the PHPUnit test for get_option() doesn’t reload the entire codebase each time, it only tests the function itself:
function test_the_basics() {
$key = rand_str();
$key2 = rand_str();
$value = rand_str();
$value2 = rand_str();
$this->assertFalse( get_option( 'doesnotexist' ) );
$this->assertTrue( add_option( $key, $value ) );
$this->assertEquals( $value, get_option( $key ) );
}
Unit tests are typically more precise. Because they execute less of the codebase, you can run hundreds or thousands of unit tests in the time it takes to run one integration test.
Back to the original question: why did I choose Behat over PHPUnit for WP-CLI? Easy answer: I didn’t, scribu did!
In hindsight, I’ve been very happy with the decision because I think Behat / BDD has helped ensure a high degree of quality for WP-CLI. But, if I were to be known for any postulate, it would be:
Tests only get written when they’re easy to write and run.
I’ve typically opted for PHPUnit (and Mocha) tests for plugins and themes because running automated tests against code rendering in a browser requires using a headless browser in your test suite, which adds complexity, which means tests are less likely to be written.
]]>wp plugin install one-time-login --activate && wp user one-time-login <user>
After you run the command, you’ll see a success message like this:
Success: Your one-time login URL is: http://wp.dev/wp-login.php?user_id=1&one_time_login_token=eb6f4de94323e589addb9ad3391883e1d6233bc3
Copy the URL, paste it into your web browser, and… voila!
Feel free to file issues and pull requests against the project on Github.
]]>gpo to push your current branch to origin:
alias gpo='git push -u origin $(git rev-parse --abbrev-ref HEAD)'
Four key strokes is way better than 20+. For more of my favorite aliases, check out my dotfiles.
]]>Used appropriately, a persistent object cache like Redis or Memcached can be an incredibly helpful tool for scaling your WordPress site.
Say, for instance, you have an unavoidable query which takes an entire second to run. Or, you need to make an API request to a service that’s notoriously slow. You can mitigate the performance impact in both cases by storing the result of the operation in the persistent object cache, and then using the stored reference when render your response.
Like a fine wine with steak, persistent object caches like Redis or Memcached are best paired with complex data generation. They provide a useful way to store computed data that was expensive to create, and don’t make sense to waste on a cheap meal.
]]>A Mocha + Chai test looks like this:

Pretty simple, huh? But, to get the test to actually run, I had to…





I’m using Grunt with Webpack because that’s what I copy and pasted from the Feeling RESTful theme (and Grunt is what I’m used to generally).
]]>Let me just say — Thursday, February 4th was pretty darn demoralizing. I spent a huge amount of time in January towards the WP REST API in preparation for what I wanted to do on the command line, and a lot of momentum / inspiration / general good feelings were destroyed in that meeting. As such, I spent much of February and March working on WP-CLI features unrelated to the WP REST API (e.g. package management).
But, I’m back in the saddle. Because I’m 2/3 of the way through one of those fancy WP REST API + React WordPress applications, I’m running into dozens of ways I want to be able to make WordPress more efficiently. And of course, this means doing it on the command line.
Before we proceed: most of the, if not all, RESTful WP-CLI features have required under the hood changes to WP-CLI. You’ll want to wp cli update --nightly to play with this new functionality locally. Once you’ve done so, you can wp package install danielbachhuber/wp-rest-cli to install the latest.
--debug and --debug=rest to profile your REST endpoints#REST APIs are all about speed. Milliseconds matter, and every one you manage to shave off will have a real world impact on user experience.
To make it much, much easier to understand how many queries your endpoint is performing, and how long they take, I’ve added some lightweight profiling to RESTful WP-CLI.
Use --debug to get a summary of your queries for any command.
$ wp rest post list --debug
Debug (rest): REST command executed 7 queries in 0.001954 seconds. Use --debug=rest to see all queries. (1.446s)
+----+-----------------------------+
| id | title |
+----+-----------------------------+
| 1 | {"rendered":"Hello world!"} |
+----+-----------------------------+
Use --debug=rest to get the full list of queries executed.
$ wp rest post list --fields=id,title --debug=rest
Debug: REST command executed 7 queries in 0.001696 seconds. Ordered by slowness, the queries are:
1:
- 0.000291 seconds
- WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts
- SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') ORDER BY wp_posts.post_date DESC LIMIT 0, 10
2:
- 0.000257 seconds
- WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, WP_Query->set_found_posts
- SELECT FOUND_ROWS()
3:
- 0.000256 seconds
- WP_REST_Posts_Controller->get_items, WP_REST_Posts_Controller->prepare_item_for_response, setup_postdata, WP_Query->setup_postdata, get_userdata, get_user_by, WP_User::get_data_by
- SELECT * FROM wp_users WHERE ID = '1'
4:
- 0.000244 seconds
- WP_REST_Posts_Controller->get_items, WP_REST_Posts_Controller->prepare_item_for_response, setup_postdata, WP_Query->setup_postdata, get_userdata, get_user_by, WP_User->init, WP_User->for_blog, WP_User->_init_caps, get_user_meta, get_metadata, update_meta_cache
- SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE user_id IN (1) ORDER BY umeta_id ASC
5:
- 0.000233 seconds
- WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches
- SELECT wp_posts.* FROM wp_posts WHERE ID IN (1)
6:
- 0.000209 seconds
- WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches, update_post_caches, update_object_term_cache, wp_get_object_terms
- SELECT t.*, tt.*, tr.object_id FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON tt.term_id = t.term_id INNER JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') AND tr.object_id IN (1) ORDER BY t.name ASC
7:
- 0.000206 seconds
- WP_REST_Posts_Controller->get_items, WP_Query->query, WP_Query->get_posts, _prime_post_caches, update_post_caches, update_postmeta_cache, update_meta_cache
- SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (1) ORDER BY meta_id ASC
(1.598s)
+----+-----------------------------+
| id | title |
+----+-----------------------------+
| 1 | {"rendered":"Hello world!"} |
+----+-----------------------------+
Profiling works for any CRUD operation.
$ wp rest post create --title="Test post" --user=daniel --debug
Debug (rest): REST command executed 28 queries in 0.023962 seconds. Use --debug=rest to see all queries. (1.777s)
Success: Created post.
$ wp rest post update 3 --content="Foo bar" --user=daniel --debug
Debug (rest): REST command executed 31 queries in 0.023309 seconds. Use --debug=rest to see all queries. (1.634s)
Success: Updated post.
Hopefully this feature becomes an invaluable part of your REST endpoint development process, as it has mine. Hit me with feedback on its Github issue.
wp rest * edit to edit a resource in your system editor#Most people probably don’t know this, but you can use wp post edit <id> to edit post content in your system editor (e.g. vim). Now, with wp rest * edit, you can edit any REST resource in your system editor.
$ wp rest post edit 3 --user=daniel
When you run wp rest * edit, RESTful WP-CLI fetches the resource, transforms it into a YAML document, and puts it in your system editor:
---
date: 2016-04-14T14:02:57
date_gmt: null
password:
slug:
status: draft
title:
raw: Test post
rendered: Test post
content:
raw: Foo bar
rendered: |
|
<p>Foo bar</p>
excerpt:
raw:
rendered: |
|
<p>Foo bar</p>
author: 1
featured_media: 0
comment_status: open
ping_status: open
sticky: false
format: standard
categories:
- 1
tags: [ ]
If you make changes to any of the fields, then the command sends it back to WordPress (through the WP REST API) to update.
On WordPress installs that support Basic Auth, editing also works over HTTP:
$ wp --http=http://daniel:daniel@wordpress-develop.dev rest post edit 1
Et, voila.
I’d love your input on the dozens of ideas I have for a more RESTful WP-CLI:
wp rest * generate to generate mock data in the format your application expects [#55].wp rest * diff to be able to diff the state of two different WordPresses, a la Dictator [#56].--http=http://daniel:daniel@wordpress-develop.dev becomes @wpdev [#2039]And I want to hear your ideas too! As well as any feedback, questions, or violent dissent. Let’s chat on Github.
]]>wp site empty (doc) like I am, you’ll want to make sure Posts 2 Posts tables are emptied too.
https://gist.github.com/danielbachhuber/d1a97ceab65e7e7a17ba8182cb8c2e00
]]>I heard back from our developers, and it looks like this issues stems from not sending invoices directly from Harvest. It sounds like you might be copying the web invoice link and sending that to your clients, then marking the invoices as sent manually.
The problem with this, is our Stripe integration relies on a Sent invoice to generate an email address to be used for payment. This is compounded by the fact that we have per-user invoice links now. The invoice link you’re copying is from your own account, and when someone else visits that link, Harvest think it’s your email address viewing it.
To fix this, you’ll simply need to send your invoices directly from Harvest normally. If that’s not the case, let me know and we can take a closer look!
So, if you use Harvest, I guess you shouldn’t do that.
]]>I pretty much love React at this point, and can’t imagine using WordPress’ theming for anything in the future. If you hire me to build a brochure website, I will probably build it in React, just because.
What I like most is that everything is so damn elegant. The component-based architecture encourages you to think about whatever you’re building in terms of reusable pieces. I suspect this naturally lends itself to Better Quality Code.
But, React is also a substantial departure from WordPress’ quick and dirty ethos. A concern of mine is long-term maintainability of a React-based website, particularly for clients who think they’re getting a WordPress website and expect to be able to hire a WordPress developer for future changes to it.
Routing is painful. I haven’t found an elegant solution to the fact that routes need to be declared in WordPress and in React.
For the project I’m on, all routes are going into React first so the application works as expected. At some point, I’ll need to figure out how equivalent routes should be sustainably registered as WordPress rewrites.
The theory is that single page applications deployed as WordPress themes can use WordPress to serve response headers, social / SEO meta, and prepare an initial payload of data using the main query, before passing on the torch to React. In practice, I’ve worked very little of this out yet.
Or, I can noop WordPress’ route handling entirely, but then I’ll lose some of the benefit of having WordPress serving the initial pageload.
Which brings me to managing application state. Once you get over the day of effort to understand how Redux works, it’s really quite elegant. It also takes about 50% more effort than I’d like to get my application data into my components.
If I may make one request, could someone please write a redux-wp library to magically generate actions and reducers from my WP REST API index?
If you’re curious what real-world WP REST API endpoint registration looks like, here’s the Controller for a Record which, in the LMS data model of students completing activities and quizzes, stores the data of a student’s answers to an activity or quiz.
https://gist.github.com/danielbachhuber/2b3ed549beb0984e2070979370a8650b
Commentary on my code, in no particular order, includes:
register_rest_field() when I’m already subclassing and have access to the schema. I should probably refactor that.WP_REST_Posts_Controller->get_items(), aforementioned method is impossible to subclass.title and title_rendered instead of creating a title object on the Post resource.arg_options always feels really awkward, because registering a schema property seems like it should be equivalent to registering a query parameter or anything else. I want to be able to use validate_callback, default, and others as top-level arguments to registering a schema property.Generally, I consider the WP REST API controllers to be good, but not great, right now. I’m writing lots of tests for cases I don’t think I should need to write tests for, because the WP REST API is a bit leaky. For instance, I’d expect for my declaration of query params and schema to be the canonical truth of what the endpoint supports, which isn’t the case currently (e.g. you can deregister the password field on a Post-derived resource, and password will still be included in the response object).
In my ideal world, to create a custom post type endpoint, I would:
WP_REST_Posts_Controller.register_routes()Leave me any questions you have in the comments! Or, better yet, write about the real-world lessons you’ve learned.
]]>To perform a more atomic deploy, use DeployHQ to deploy your project to a deploy directory, and then run a post-deploy copy command to move your files where they need to be.

As you can see, I’m trialling ServerPilot for managing servers. More on that later, possibly.
]]>For the longest time, I was a staunch proponent of writing my own meta boxes, each and every time. Then I discovered Fieldmanager, and never looked back.
Field definition is a gateway drug for modeling WordPress data. And, in the WP REST API, the better WordPress data is modeled, the more clients can do with it.
]]>Right about now seems like a good time to get official feedback on WP REST API from @wordpress’s lead developers and committers. Just sayin'
Helen, a lead WordPress developer, replied with:
Where does this feedback go, how is it structured, what makes it “official”, and how binding is anything that is said?
To which I replied:
maybe: 1) make/core or personal blog posts 2) I have suggestions 3) comes from your voice 4) actual goal: build consensus
There’s a lot of background to this exchange. If it doesn’t make sense to you, first read this WP Tavern post and then read this Post Status post. The tldr: we’re at a juncture for the WP REST API (a good thing!) where we’ve completed a ton of work (four years for Ryan, in fact) and need to make decisions on whether it’s ready to be merged, or needs additional work before merge consideration.
And we need to make these decisions as a group. Of individuals. With very different: backgrounds, opinions, experience levels with the REST API, and experience levels with other APIs. I’m sure you all know how group decision making goes.
Before we make decisions though, it would be incredibly helpful to have as much information on the table as possible — so everyone can know all sides of the decisions we need to make. This is why I publicly requested “official” feedback on the WP REST API from the WordPress project’s lead and contributing developers:
The feedback doesn’t need to be of any particular form. Jeremy Felt already posted his, which is A+, very much appreciate. And, we (Ryan, Rachel, Joe and I) would love constructive feedback from anyone and everyone — but WordPress’ lead developers and committers are the ones who will be maintaining this project for the long term.
If you’re looking for inspiration on how to get started, I typically try to frame my feedback as:
Both of these could cover:
Ultimately, “should we merge it?” is a binary decision. But, getting as many perspectives as possible out in the open will help us better explore the potential ramifications of the decision, which is more important than the decision itself.
If you don’t want to post on your personal blog, then leaving a comment on this post is a great place for your feedback. Thanks in advance!
]]>Like my title? Get the pun? Te he he.
I’m just back from A Day of REST, where I spoke about a more RESTful WP-CLI, and unlocking the potential of the WP REST API at the command line. It was probably the best talk I’ve ever done. You can check out my annotated slides if you haven’t already.
The talk covered the progress I’ve already made, and the hypotheticals on my mind every day when I go for a swim.
Today marks v0.1.0 for wp-rest-cli. This initial release makes WP REST API endpoints available as WP-CLI commands. It does so by:
Warning: This project is at a very early stage. Treat it as an experiment, and understand that breaking changes will be made without warning. The sky may also fall on your head.
Here’s how it works:
$ wp rest
usage: wp rest attachment <command>
or: wp rest category <command>
or: wp rest comment <command>
or: wp rest meta <command>
or: wp rest page <command>
or: wp rest pages-revision <command>
or: wp rest post <command>
or: wp rest posts-revision <command>
or: wp rest status <command>
or: wp rest tag <command>
or: wp rest taxonomy <command>
or: wp rest type <command>
or: wp rest user <command>
$ wp --http=demo.wp-api.org rest tag get 65 --format=json
{
"id": 65,
"link": "http://demo.wp-api.org/tag/dolor-in-sunt-placeat-molestiae-ipsam/",
"name": "Dolor in sunt placeat molestiae ipsam",
"slug": "dolor-in-sunt-placeat-molestiae-ipsam",
"taxonomy": "post_tag"
}
Notice how you can use --http=<domain> to interact with a remote WordPress site.--http=<domain> must be supplied as the second argument to be used. Without it, wp-rest-cli will look for endpoints of a WordPress site in a directory specified by --path=<path> (or the current directory, if--path=<path isn’t supplied).
Using wp-rest-cli requires the latest nightly build of WP-CLI, which you can install withwp cli update --nightly. Once you’ve done so, you can install wp-rest-cli withwp package install danielbachhuber/wp-rest-cli.
Wait, wp package install. What in the?
That’s right, WP-CLI now has package management. Using wp cli update --nightly, you now can:
wp package browse to browse packages available for installation.wp package install to install a given package.wp package list to list packages installed locally.wp package uninstall to uninstall a given package.While I wasn’t planning to dive down this rabbit hole during the Kickstarter project, I was finally inspired on how to finish the feature, and took a couple hours yesterday to do so. It’s amazing how you can be mentally blocked on a problem for literally two years but then, once you’re unblocked, finish it up in a short period of time.
You’ll probably run into one or more bugs with wp package. When you do, please let me know on this issue. If the bugs get too hairy, I may pull the feature from the release and revisit. But, for now, you can much more easily install and use community packages.
wp-rest-cli also makes use of another new feature: register arbitrary functions, closures, and class methods as WP-CLI commands.
For instance, given a closure $hook_command:
$hook_command = function( $args, $assoc_args ) {
// the meat of the command
};
WP_CLI::add_command( 'hook', $hook_command, array(
'shortdesc' => 'List callbacks registered to a given action or filter.',
'synopsis' => array(
array(
'name' => 'hook',
'type' => 'positional',
'description' => 'The key for the action or filter.',
),
array(
'name' => 'format',
'type' => 'assoc',
'description' => 'List callbacks as a table, JSON, or CSV. Default: table.',
'optional' => true,
),
),
) );
Then, when you run wp hook init, you’ll see:
$ wp hook init
+---------------------------------+----------+---------------+
| function | priority | accepted_args |
+---------------------------------+----------+---------------+
| create_initial_post_types | 0 | 1 |
| create_initial_taxonomies | 0 | 1 |
| wp_widgets_init | 1 | 1 |
| smilies_init | 5 | 1 |
| wp_cron | 10 | 1 |
| _show_post_preview | 10 | 1 |
| rest_api_init | 10 | 1 |
| kses_init | 10 | 1 |
| wp_schedule_update_checks | 10 | 1 |
| ms_subdomain_constants | 10 | 1 |
| maybe_add_existing_user_to_blog | 10 | 1 |
| check_theme_switched | 99 | 1 |
+---------------------------------+----------+---------------+
Want to use this command locally? Update to the nightly, and then runwp package install danielbachhuber/wp-hook-command.
Well… I’ve spent a ton of hours over the last month on the WP REST API. 67.03 hours of 83 budgeted, to be precise. Given there doesn’t yet seem to be an end in sight, I may reallocate ~30 hours or so out of the WP-CLI budget for continued involvement with the WP REST API. But, I do need to slow down the pace of my involvement a bit, because it’s not sustainable.
On the wp-rest-cli front, the product problems at the top of my mind are authentication and aliases.
Instead of:
wp --http=demo.wp-api.org --user=daniel:daniel rest tag create
I’d much prefer:
wp @wpapi tag create
In the example preceeding, @wpapi is an alias for both the target and authentication.
In this hypothetical universe, aliases would also be injected into the WP-CLI runtime:
$ wp @wpapi
usage: wp @wpapi attachment <command>
or: wp @wpapi category <command>
or: wp @wpapi comment <command>
or: wp @wpapi meta <command>
or: wp @wpapi page <command>
or: wp @wpapi pages-revision <command>
or: wp @wpapi post <command>
or: wp @wpapi posts-revision <command>
or: wp @wpapi status <command>
or: wp @wpapi tag <command>
or: wp @wpapi taxonomy <command>
or: wp @wpapi type <command>
or: wp @wpapi user <command>
There’s a bit of thinking to do, and code to write, to get from here to there, though.
Feeling inspired? I want to hear from you! Particularly if you’ve written custom endpoints I can test against. Please open a Github issue with questions, feedback, and violent dissent, or email me directly.
]]>
A more RESTful WP-CLI is about unlocking the potential of the WP REST API at the command line. But what does this actually mean? Let me begin with a story…

Migrations used to really suck.

Back in the olden days, there was a web interface for mapping users before import. Imagine having dozens of files to import, each with hundreds of users to map. This nightmare is how I started out.
At the beginning of my career I helped run CoPress, a hosting company which helped move student newspaper websites to WordPress. Intelligently, we had a Python conversion script to transform College Publisher archives to WordPress WXR. Not very intelligently, we uploaded those WXR files through the web. CM Life was the largest import I had to work on.

“Hey Brian, about a third of your archives have been imported into your site. To finish this process, however, we’ll need to take the site down for up to a couple of hours, or turn off comments and have you not publish anything at least. The technical explanation is that the import script is being shut down by Apache halfway through the import process because it’s taking a longer time to check the incoming content against the database.”

Fast-forward a few years later. When I joined Automattic’s WordPress.com VIP team, they had a directory full of really useful bin scripts with really inconsistent usage instructions. One of those bin scripts was Thorsten Ott’s CLI wrapper for the WordPress importer.
Thorsten also introduced me to WP-CLI. Driven by the desire to have a consistent interface for the bin scripts, I contributed his CLI wrapper upstream to WP-CLI. And thus, what used to take hours through the web, suddenly took minutes or seconds at the command line.

But migrations still kinda suck.
The ideal WXR import requires a fresh, empty site and script execution without errors. If you import into an existing site, or your script fatals, your data can be broken without you realizing. Furthermore, WXR doesn’t handle custom database tables or site configuration.
Let’s leave this problem of migrations for a bit and get back to a more RESTful WP-CLI.
WP-CLI is a command line interface for anything you might do in the WordPress admin (create, edit, and delete posts, comments and users). It also provides useful WordPress-related commands, for instance:
WP-API also provides commands (endpoints) for managing WordPress. Given these similarities, which I see as an opportunity, last fall I ran a Kickstarter for “A more RESTful WP-CLI.”

A more RESTful WP-CLI is a WP-CLI that’s backed by the WP REST API. In this model, WP-CLI is both a client and an application. As a client, the functionality is in the REST API endpoints, and WP-CLI exists as a user-friendly wrapper over the API. As an application, the functionality is in WP-CLI, built on top of the WP REST API.
More specifically, the RESTful WP-CLI will comprise: endpoint discovery, command registration, authentication, and meta operations. It’s important to note I’m only 18% of the way through the project, though. Some points are concrete, but a lot are still hypothetical.
Let’s look at some code!

Conveniently for us, WP-API describes itself in the index with context=help. This is sufficient description to create WP-CLI commands based on what the site supports. But how do we register WP-CLI commands?

Historically, a WP-CLI command is a class method passed $args and $assoc args. $args represents positional arguments. $assoc_args represent associative arguments. With those supplied values, the method then performs some procedural logic.

Metadata about the command is included in a special PHPDoc format. Short description is at the top. The synopsis defines accepted parameters, which can be positional or associative. Both types can be optional. Lastly, a description can be included for each argument.

WP-CLI then parses the PHPDoc to turn it into synopsis it can understand.

Last year, I set about building a prototype of commands based on the WP REST API. If defining a class is the only way to register a WP-CLI command, then creating dynamic WP-CLI commands required defining a new class at runtime. Super ugly.

It would be much nicer to be able to register an arbitrary callback as a command. This callback can be a closure, function, or method of an instantiated class. Include your description and synopsis as secondary arguments. And this feature is coming in v0.23.0!

With our new functionality in place, we can much more easily register commands dynamically. Much nicer than the eval hack! RESTCommand class supports list_items, create_item, etc.

Boom. Totally dynamically generated from the API for wordpress-develop.dev

It even works for remote sites too! That’s the whole point. Include –http= to access rest endpoints from an arbitrary remote site.

Here’s how you can list tags locally.

I can create tags locally too, through the REST API. But, there’s new behavior: requires authentication and authorization locally. WP-CLI currently offers unfettered access to the database. In the future, we’ll likely have a sudo mode.

Documentation populates from the schema - dynamically! This will become more detailed over time.

Because WP-CLI knows how to interpret the index, parameters are validated before the request is made - dynamically!

But, remote authentication hasn’t been worked out yet.

The goal for authentication is to make it as easy as possible. Authenticate once, and reuse (cache) that authentication until it expires. Switch between multiple authorizations. For the project, there are a couple of options I’ll be exploring: http and ssh.
http auth would include basic, oAuth 1 and 2, and API key - whatever the remote site supports. http is advantageous because it’s more accessible, but runs the limitation of web server requests.
We could also proxy over SSH, when it’s available. SSH auth -> discovery of the remote wp install -> discovery of endpoints -> perform a command.

Two problems: don’t want to type long commands, each site will support different endpoints.
To address these problems, I’m considering ways to introduce aliases, as internal shortcuts for additional global params. Ideally, WP-CLI should only expose commands supported on a specified WordPress instance. Aliases provide UX for this feature, but backwards compatibility is a concern.

All of the work up to this point is foundational, though. WP-CLI as an application means meta operations, or commands to manipulate core resources. For instance, wp diff could compare two JSON blobs. The diffing mechanism is easy, and we can now know they’re equivalent blobs because WP-API defines canonical routes.

Why do all of this? Short of a mind to WordPress connection, WP-CLI’s goal is to be the fastest interface for WordPress. Anything you might want to do to WordPress, WP-CLI should always be, quantatively, the fastest way to perform the task. Furthermore, creating a common interface for disparate features means you can develop mental muscle memory for getting faster with WP-CLI over time.

Thanks!
]]>See you soon, WP REST API crew!
]]>Worked on my Day of REST presentation for a couple hours.
Took a 40 minute run to Tualatin Park; feet were sore which means I probably need new shoes.
Made cottage cheese pancakes for breakfast.
Went to Jordan and Haley’s for Elsie’s first birthday.
Came home, put Ava down for nap.
Made a couple pull requests against WP-API.
Finished installing the second raised bed in the backyard.
Cut down some bamboo.
Neighbor brought over a few pieces of absolutely amazing brisket.
Made steak fajitas, corn tortillas from masa harina, chips from stale tortillas, and guacamole. Had in-laws over for dinner. Drank wine.
Long live the weekend.
]]>It seems every advanced abstraction on top of WordPress ultimately spends 90% of its time finding a solution for these problems.
]]>[caption id="" align=“alignnone”]
I was 173 pounds long ago, and have been in the 180 range for the last couple years[/caption]
I’ve “tried” and failed to lose weight in the past many times. “Tried”, in quotes, because I didn’t actually have a strategy. Mind power, I guess? This time has been the only time I’ve effectively lost weight, and I attribute success exclusively to tracking calories.
Want to lose weight too? Use an app like MyFitnessPal to establish a goal, and meticulously track every single calorie you eat. Every single calorie on every single day. I’ve worked out (30+ minutes of cardio) 3 to 6 days per week my entire life, and calorie tracking is the only way I’ve ever lost weight.
Huge props to Albert Sun for helping me realize I can lose weight too.
]]>theme-name/lib. However, in doing so, you lose out on WordPress’ built-in update tracking.
It would be cool to have a utility plugin that loads theme-specific plugins into the Manage Plugins view and WordPress update check.
]]>
https://gist.github.com/danielbachhuber/0f991d150067d8a332ec
]]>
It would be cool if someone wrote a WordPress theme (or plugin) to automatically generate a documentation site from a WP REST API index — and the only configuration parameter was the URL to the endpoint.
]]>And so the journey begins. As with most journeys, I have a mixture of emotions: excitement, anticipation, trepidation, and eagerness. Although the destination may be far away, I know I can get there as long as I consistently take steps in the right direction.
Today marks the formal kickoff of my Kickstarter project, “A more RESTFul WP-CLI”. To celebrate the occasion, I’ve launched a project page to capture high-level goals and document my progress along the journey. I’ll keep it updated as I write blog posts every couple or few weeks. Consider these blog posts both a development log and an invitation to participate — I look forward to your comments, issues and pull requests.
For the past month or so, the question at the top of my mind has been: what does it mean to “unlock the potential of the WP REST API at the command line”? Or, even more broadly, why do this project?
These are big questions, and I consider myself fortunate to be able to explore them over the next six months or so. Here’s how I’ve unpacked them so far, in a series of loosely connected ideas:
wp post list is more or less GET /wp/v2/posts. But, wp widget list doesn’t yet have an equivalent in WP REST API. We still have a ton of work to do.generate, (push|pull), and clone in addition to being a seamless command line interface to WordPress internals.wp post * commands, WP-CLI requires Easy Digital Downloads to produce its own wp edd * commands.Lots of threads to pull on.
I’m starting development by working towards making wp tag list work interchangably with local and remote sites. Doing so already raises a few issues:
eval() a dynamically generated class. It would be much nicer to be able to register an arbitrary function, closure, or method as a WP-CLI command.wp @prod would only expose commands available on production.wp-cli.yml and wp-cli.local.yml already, you should be.HTTP DIGEST authentication (Wikipedia) permits more secure communication between the client and server over insecure HTTP. It’s also a fair bit more challenging to implement, for a couple of reasons:
www-authenticate response header with values critical for signing the second request.To make HTTP DIGEST authentication requests easier in WordPress, here’s a function you can use:
https://gist.github.com/danielbachhuber/6c09dd2fcd1a9c4ef252
]]>WP_REST_Posts_Controller and brethren would be to test how much (or little) time it takes for a developer to correctly model their custom post type data by extending it. If it’s easy to do, then we’ve established a great abstraction. If there are pain points or places we need to work around, then we should refine the abstraction.
]]>richard.tape [8:19 AM] anyone used wocker? I’m looking to set up a dev environment that I can share with someone else so they’re able to more easily help me debug a problem and I want to modify the base containers and then package the whole thing up so I can just pass that to them and they just spin it up and are in the same shape I’m in… ideas?
wp backup would create a tarball of the database, WordPress files, and (optionally) the uploads directory. wp restore could then read said tarball, and expand it to a working WordPress install.
We could even potentially parse the original wp-config.php into a manifest file, which would permit the restoration process to override some details.
WP-CLI’s search-replace command addresses both of these problems for you, with its awareness of WordPress’ tables, and intuitive handling of serialized data.
Last month, Pantheon generously sponsored 15 hours of my time to address some of the long-standing bugs in the backlog, and make a few substantial enhancements too. On Pantheon, wp search-replace is an integral part of the Pantheon Workflow.
Let’s take a look at how search-replace works, and then we’ll review the new features coming in WP-CLI v0.22.0.
WP-CLI search-replace only requires two parameters: <old-string> and <new-string>. On Pantheon, here’s how it could be used to transform a database cloned from Live into Test:
wp search-replace 'production-domain.com' 'test-my-site.pantheon.io'
By default, WP-CLI searches through all tables registered to the $wpdb object. In each column of each table, it first inspects the column’s rows to see if serialized data is present. If it discovers serialized data, then it iterates through all of the rows, de-serializes data as relevant, recursively performs a search and replace procedure, and updates the row in the database. When no serialized data is present in any of the rows, the replacement procedure is a much simpler MySQL UPDATE statement.
On multisite, WP-CLI defaults to performing search-replace on a single site. You can search-replace across all sites in the network with the --network flag.
wp search-replace 'production-domain.com' test-my-site.pantheon.io '--network'
Want to inspect the results of your search-replace command without making changes to the database? Use the --dry-run flag to mock the entire operation, and see a summary of how your database would’ve been modified.
Here are a few of the improvements you can expect to see in the forthcoming WP-CLI v0.22.0:
LIKE statement every 1000 rows, WP-CLI now just runs it once. On a post meta table of ~3.5 million rows where 75,610 rows were affected, this change improved execution time from 734.926s to 225.509s (3.3x faster).--export=<filename> argument to create a SQL file of your transformed data, instead of making updates to the database. This is a helpful feature when you want to prepare a database for a new environment without having to import and then run search-replace.wp search-replace <old-string> <new-string> '*meta*'. Note: the table pattern needs to be quoted, as * is a special character in Bash.--verbose flag, in case you’re curious to see how long each replacement operation is taking.Happy to see these new features? Please share the love on Twitter :)
]]>The primary reason for this? I want to blog more often. The writing interface in WordPress.com is now much, much better than what you get in a standard WordPress install. Plus, there’s also something to be said about not having the mental overhead of site management every time you go to write a blog post.
This domain’s history: switched from 1&1 to WebFaction in June 2009, to Slicehost in May 2010, back to WebFaction in September 2010, to WordPress.com in November 2011, to Digital Ocean in March 2014, and back to Webfaction in January 2015.
]]>I am a white, privileged male who grew up in an upper middle class family. I didn’t have to work in high school, and my college would’ve been completely paid for, had I chosen to complete it. I live in a comfortable house in well-developed suburbs, with easy access to many local services. I identify as fiscally conservative, socially progressive, and think politicians are a bunch of schmucks (so you could probably call me libertarian).
As someone of privilege, I try to refrain from discussing controversial topics on the web. All too often they devolve into a flame war, “a heated argument between two individuals, that results in those involved posting personal attacks on each other during or instead of debating the topic at hand.” But, as a maintainer of several open source projects and active contributor to many others, codes of conduct have a direct impact on my daily life.
I do believe in the golden rule, and do my best to treat others as I wish to be treated. I think communities, online and off, can benefit from explicitly stated expectations of behavior — even more so when leadership role models ideal conduct. I also understand it’s difficult to regulate away human behavior, and take an active concern with who holds the power to enforce rules. Power is a real thing. Lastly, I know that if a conversation turns into personal attacks, it can be effective to explicitly address emotions — “it hurts me when you say…” — because it brings empathy to the forefront.
Text-based communication, particularly as we practice it on the internet, is really hard. Let me say that again for emphasis: t****ext-based communication is really hard. Merlin Mann and Dan Benjamin have a great podcast episode about emotional density, which conveys many of my thoughts on the subject. In short, text loses many of the voice intonation and body language nuances we humans actually use to communicate. Think about it this way: text is a medium where 2/3 of packets are lost in transmission. If we chose to collaborate on the web, this is a constraint we must acknowledge and embrace.
Be nice to others. Go out of your way to be helpful. And, if someone flames you, understand they might be operating a computer without their first cup of coffee for the day.
]]>
By default, the topmost UI element on each homepage will display the most recent published post. In the Customizer, the Pottery Barn team can choose one or more posts for promotion with an AJAX post selection tool (plugin in-progress). If multiple posts are selected, then the UI element turns into a carousel (powered by Slick).
Look ma, no checkboxes!

Further down the homepage, the Pottery Barn team wanted to promote their top Pins from Pinterest. Rather than create a more complicated workflow of uploading images and completing multiple fields per Pin, I decided to magically pull in Pin metadata from their Open Graph / Twitter Card tags.
Drop a link in — voila!
If you’re considering a similar approach, here are a few technical details I worked out:

The image should be the visualization.
It would be really neat if I could verify a migration with WP-CLI. Using the WXR file as the baseline, the command would iterate through all of the data in the file, compare it to what’s present in WordPress, and alert me if anything is missing or unexpectedly different.
]]>What a year. It’s hard to imagine life moving any faster — and then it does. Having a second kid is parenting squared.
Wait a sec… I haven’t blogged about my son yet. Hey, Charlie!

Charles Edward Bachhuber was born at home on December 16th, 2015 weighing 9 pounds 6 ounces. He’s a total bundle of joy. Leah, Ava, and I are proud to welcome him to the family, and can’t wait to share our world with him.
Here are some of the highlights of the year from Instagram:

There were two big points to my career this year: joining Fusion (May), and then leaving (November). Yeah yeah, thanks for the jokes about me holding down a full-time job.
I joined Fusion because I’ve always wanted to work for a news organization. It seemed like the prime opportunity to build a distributed technology team within a startup media company. But, as I discovered, sometimes things don’t work out the way you want them to.
Fusion was a great “Intro to Management” experience. In hindsight, I can safely say I had no idea what I was getting into. And now I know! But it took me a half year of experience in the role, and consuming dozens upon dozens of blog posts, podcasts, and books, to fully appreciate how a management role is different than what I’ve historically done.
The takeaway I can share in a sentence: distributed and co-located teams don’t mix. Companies with both a physical office and remote employees absolutely need to operate as though everyone is distributed. Without this commitment, many things break in many frustrating ways. And, learning to be a manager in this context is incredibly difficult.
Since November, I’ve been back in the saddle with Hand Built. Business is going well. Notably, I helped PBS Frontline launch their new website, and built a new blog for Pottery Barn. I also have a number of potential projects in the hopper for 2016.
What I’m most proud of professionally, though, is how much time I get to spend contributing to open source. In 2015, this turned out to be 12.26% of all tracked time (282 hours). On behalf of Hand Built, this was 128 hours towards WP-API, 60 hours towards WP-CLI, and 13 hours towards WordPress core.

Travel slowed way down for me this year — and I didn’t make MVP Gold on Alaska. According to TripIt, here’s the tally for 2015 compared to 2014 and 2013:
Happy (almost) New Year!
]]>It would be an all-in-one device (both camera and display) where I can have an instant-on connection with anyone in the world. And, to get fancy, the optics of the camera would correct for the orientation of the device, such that it would always appear as though I’m having a face-to-face conversation (instead of nose to face or forehead to nose).
A price point of $500 or less would make this a killer device for any company.
]]>Here’s the playlist that kept everyone on the dance floor the entire night:
Truthfully, people sat down for the Bollywood song. But it wouldn’t be my wedding without Bollywood. For the Hava Nagila, Leah and I actually did end up on chairs. And, if you’ve ever lived in Eugene, you know why we ended with Sweet Caroline.
Good luck!
]]>If our paths intersect, say hello!
On the gear front, I recently picked up a Patagonia Refugio 28L backpack. It passed the test with flying colors on an overnight to SF. One pocket for my laptop, another for clothing, and a third for cables, etc. I can’t underscore how exceedingly awesome it is. Clothing volume-wise, I think it’s going to max out at three night trips unless I pack my reusable undies.
]]>Early last year, I was fired a month before Ava was born, found my dream job, and was laid off a month later (while on my unofficial paternity leave, to boot). It was difficult to stomach the idea of joining another company full-time, so I started my solo consultancy, Hand Built. Through Hong, Fusion became one of my clients and I helped successfully deliver strategic project after strategic project.
I’ve long wanted two opportunities for my career: 1) to write code for an actual media company, and 2) to be able to help foster a work environment I want to be a part of for a long time. Joining Fusion gives me both in spades — to the degree it feels too good to be true. We’re building a distributed team, already represented in New York, Philadelphia, Miami, Toronto, Portland and Mumbai. We open source (almost) everything. And we have tremendous freedom to decide what to build and how to build it. Or, as Davis likes to say, “enough rope to hang ourselves.”
Fusion’s technology team is hiring across the board. Come contribute to our success. If the team sounds like it might be a good fit, shoot me a note at my shiny new email address: daniel.bachhuber@fusion.net
]]>Today we learned:
Insanity. According to our realtor, RMLS reported the month of March as having the lowest inventory in Portland since September 2005.
]]>There’s lots of little attributes which define the “quality” of a piece of content — just like there are attributes which define code quality. Developers have continuous integration to run automated checks on their code, but journalists have editors — who are prone to human error. It’s easy and quite common to forget to add a photo credit, or spell the SEO title incorrectly. What are some ways we can automate these errors out of existence? Let’s get together, present some real world “quality” problems to work on, prototype, wireframe, and define algorithms, and then share our results.
Code review is single-handedly the best way to level up your development skills. It’s also really hard! Let’s discuss code review methodologies as a group, and then pair up to practice.
]]>




We had a failed plan (proposed by me) where I would sleep 3-4 hours on Unisom, then take over and Leah would sleep 3-4 hours. I took my pill, then attempted to sleep for a couple of hours while Leah dealt with an often-screaming Ava. She hadn’t taken her morning nap, so she was already a wreck by the time we were on the plane. Not much sleep for me. Then, later, Leah took half of a pill, got an hour and change of downtime while Ava napped in the Ergo, and then had to groggily help me take care of Ava. But, on a positive note, we all slept roughly an hour at the very end of the flight.
Yesterday, we landed at about 9 am, then took the train to our accommodations. It’s a lovely flat in the Jordaan district we found on Airbnb. The owner is the Dutch ambassador to Sudan, and their place is filled with trinkets and pictures of their travels — the perfect place for us.

After a quick two and a half hour nap, we took off for a walk, some lunch, and grocery shopping.

Our lunch was at Pane & Olio, a welcome departure from all of the tourist cafes nearby. Ava had quiche, Leah a prosciutto sandwich, and I a slice of salami pizza. The lunch special, some sort of macaroni dish, looked quite good.
For dinner, I cooked up chicken with sweet potatoes, onions and brussel sprouts. What I love most about Airbnb is that travel accommodation can easily become a home away from home. For us, home-cooked meals are a key ingredient.
Last night wasn’t too bad. We all woke up for a couple of hours around midnight. Ava got to sleep in our bed because we didn’t want her crying to wake up the neighbors. Ava and I woke up around 6:30 am, and Leah slept in until 8 or so.
Leah’s time for the laptop!
Today we: walked to the Van Gogh museum in the morning, came home for naps (me one hour, Leah an hour and a half, and Ava two hours), and went on a canal tour in the afternoon. Dinner was SushiMe — not quite as good as Ichiban ?


This site’s history: switched from 1&1 to WebFaction in June 2009, to Slicehost in May 2010, back to WebFaction in September 2010, and to Digital Ocean last March.
]]>The crust makes or breaks a quiche. We love our friend Riley’s recipe, so much so that Leah pre-makes a half dozen crusts and sticks them in the freezer so we always have one ready.
Ingredients:
Directions:
Mix flour and salt together, then knead in butter. Work until butter is well-mixed. Mix wet ingredients in a separate bowl, then add to other ingredients. Work together. Form into four balls. The dough can be frozen for up to two months. (Makes four crusts)
]]>As interim Director of Engineering, I consider my primarily responsibility to be very similar to a janitor — keep the lights on, clean up messes, and make sure things are happening in an orderly manner. And, when they aren’t, I jump in to get things back on track.
For instance, over the past week, I’ve:
Really, it’s anything that needs to be done to keep the team on track and working on the right things.
Before we make too many assumptions, let me frame the conversation. I think Agile™, as a formal process with right and wrong procedures, is bullshit. To me, agile means the minimum process needed to ship code that exceeds product goals. What that process specifically is depends on the composition of the team and what we’re working on.
Many digital news organizations publish an article when it’s good enough to go, and then revise from there. This is in contrast to print publications, where you can’t edit a story after it’s been printed. In a similar vein, the proper way to ship web software is to deploy your Minimum Viable Product and iterate, fixing bugs and tweaking features. Your development process should foster this process — just like it shouldn’t take 15 minutes for an article edit to appear on your website, it shouldn’t take two hours for your bug fix to make it to production.
Fusion is still experimenting radically with it’s “agile” process. Our two leading tools right now are Slack and Github.
We have two Slack organizations: Fusion Product for technology and product, and Fusion Digital for editorial. Given how easy it is to simply strike up a conversation with anyone, I cannot imagine being in an office of the same number of people, having to go over to someone’s desk, see that they’re not there, etc. etc.
However, Slack comes with costs too. It can be very easy to become overwhelmed by the number of conversations happening that you’re inadvertently following along. Also, text is a low-bandwidth form of communication, where subtlety is lost.
For the technology team, because our work is so closely tied to the products we’re building, Github issues are the best place to have conversations. Currently, we have repos for each product we’re responsible for, as well as a “Fusion for the Future” repo for discussing future projects, and a “Let’s UX This Puppy Up” repo for UX / design requests and our style guide. To add a light project management layer to our repos (e.g. determining which state each issue is in), we are using Huboard.
The goal for our Github repos is that no one should ever have to wonder what’s next to work on. Backlogs should be chock-full of well-scoped issues and features to pick from.
I love this question! It’s right up my alley.
One of my favorite phrases from my days at Automattic is “communication is the oxygen of a distributed company.” Meaning, the success of a company is directly correlated to its ability to communicate. And, if a company is struggling, it’s probably because communication is breaking down in some way.
Given this assumption about the importance of communication, it begs the question: how do you communicate well? For me, it boils down to these things:
Open, archived text should be the default medium for conversation. It’s helpful to have everyone in the company in a communal, synchronous chat application for quick one to one exchanges. If the conversation doesn’t need to be real-time, then there should be an open, archived space for asynchronous communication. Fusion uses O2, the successor to P2, for this. It’s a blog with threaded commenting where anyone can post or easily review past conversations. See Sara Rosso’s presentation for how it’s changed Automattic. Lastly, if the conversation needs to be higher-bandwidth than text, go to audio or video. But a team that communicates well can conduct 90% of its conversations via text.
As an aside, it’s funny to me that Slack is now worth billions of dollars, and has taken over companies like wildfire, because IRC has been around for years. But, I guess that’s what happens when you get the UX right. Many people I’ve seen hesitant with IRC love Slack.
When you do communicate primarily through text, you need to be very deliberate in how you speak — it can be much easier to miscommunicate, because you’re lacking the subtlety you normally get in face to face conversation. Emojis can help with nuance. Screenshots are often worth a thousand words. Taking a pause to edit can greatly increase impact.
I love Michael Pollan’s “food-like substance” phrase because it can be re-used in so many ways. Meetings and emails are “communication-like activities”.
Meetings, because of their coordination costs, should be used sparingly. Just think — six people in a one-hour meeting represents six hours of lost productivity. If you do need the communication bandwidth that comes from meetings, a meeting shouldn’t be allowed to begin until it has an agenda with specific discussion points and a note-taker. These notes should then be archived to your open, archived asynchronous communication space.
Granted, face-to-face interaction is still important for keeping your team human. Fusion’s technology team has twice-weekly standups of 15 minutes or less, and Hangouts as needed. Because we’re a distributed team (currently NYC, Miami, Portland, Philly, and India), we plan to have a couple in-person meetups in 2015 too.
Similarly, emails are blackholes for the information a team needs to be productive. The context and details associated with an important discussion between person A and B is totally lost when person C joins the team. Do you really want to forward your entire email archive when person C joins the team? Or lose institutional knowledge when person A leaves the team? The types of conversations that happen in email can easily be done in Slack, O2, Github issues, or whichever open tool a team chooses to use. Archives are worth their weight in gold.
Scott Berkun wrote a book, “A Year Without Pants”, about his time with Automattic’s distributed culture that many people find a useful introduction.
Once your communication is like oxygen, agile goes best with a heavy dose of open source software. Let me give you a real-world example.
Last night (Wednesday, December 3rd), Alexis Madrigal pinged me in Slack asking whether Fusion had a native way to embed a PDF in an article. DocumentCloud and Scribd are great, but also subject to DMCA requests. Alexis and Kevin Roose were working on story about the Sony Pictures hack, and wanted to embed a PDF version of a budget at the end of article.
“Give me 30 minutes,” I said. It ended up taking an hour and a half, but I was able to cobble together a solution using Mozilla’s PDF.js and putting the PDF in an Amazon S3 bucket Fusion controls. Thus, any DMCA requests will have to go through Fusion legal. Problem solved, powered by flat, effective communication.
Open source doesn’t just mean using open source software though. It means being a responsible member of the open source communities you’re a part of. And if you use any open source software, you’re a member of its community. Your product is dependent on that software — you want it to be healthy and thrive.
Just like being a good neighbor means picking up trash when you see it, being a good member of an open source community means taking the extra effort to open bug reports or create pull requests. Open source is a tremendous catalyst for software development — aka idea to production in a couple of hours — but it’s an informed, deliberate, and strategic activity.
]]>Whoa, AppleTV is an amazing experience now. My parents had a version one or two several years back which was a bit meh — ok, so I can play the media I already have in my library, or purchase from the iTunes Store. With the addition of AirPlay and content from Netflix, YouTube, and other providers, it’s become much, much better.
Speaking of, Fusion has some real estate in the AppleTV digital storefront (not sure what the appropriate terminology is). When the channel launched in December, I didn’t think much of it. But it’s really neat! And Fusion produces great content. I’ve watched more clips in the past half hour than I’ve watched on the website in the last month.
Experiencing Fusion through AppleTV underscores how version 1.0 this whole post-cable video business is though. I have my iPhone out, and I’m just using it as a remote. The experience could be so much more.
While I’m watching a given clip, I want a synchronized second screen experience where I can dive deeper into the story — videos with links. When the clip is over, I want answers to “what next?” Stories like that of San Pedro Sulas shouldn’t dead end, they should take me deeper into the issue — from informational to educational to empowering.
Integration ideas:
It goes without saying: the biggest event in 2014 was the birth of our daughter, Ava Lucille. The past nine months have flown by; watching her experience the world brings new meaning to life. Furthermore, the home birth experience, which Leah wrote about, was amazing, empowering, and priceless for the both of us.
From Instagram, here are some of the highlights:

This year has been more, uh, turbulent than others in my career. I started 2014 as a Senior Engineer with Human Made, splitting my time between client services and product. In early February, I was fired. Don’t worry — we’re on good terms, and have since worked together on a couple of projects.
Getting fired turned out to be a blessing in disguise. Later in February, I landed my dream job with Digital First Media. I had grand plans to reinvent digital publishing using open source across DFM’s 100+ properties. But, while on my unofficial paternity leave, my business unit imploded, leaving me without a job again.
When you get fired and laid off within the span of a couple of months, working for yourself becomes incredibly appealing. I announced Hand Built, my WordPress consulting shop offering bespoke development, data migration, code review, and devop services. Since April, I’ve gotten to work with a variety of clients including:
Solid list, huh?
Given my time with Human Made and WordPress.com VIP, I was fortunate to have a good sense of the consulting business. Still, solid advice always helps. Mike Bijon and Boone Gorges were nice enough to give me the rundown on how they operate their businesses (also worth mentioning: Modern Tribe’s freelancer guide). One of Mike’s invaluable tips: target 20 billable hours per week for 48 weeks out of the year, as you’ll likely spend 20 hours or more per week on non-billable admin, sales cycle, etc. In 960 working hours, I need to make all of the revenue I’d like to make in a year, also keeping in mind added costs of benefits and additional tax. This was a great framework for determining how I needed to sell my services.
A highly-relevant aside: I made an early decision to switch from Freshbooks to Harvest. Harvest is so much better than Freshbooks. One of Shane Pearlman’s, uh, pearls is to get religious about time-tracking. Before I started my business, I hated budgeting my time. Work estimates were the last thing I ever wanted to do. Once you get hooked though, you never go back — time-tracking is the only sane way to manage your most valuable resource. Harvest has really awesome Mac and iOS applications for logging hours against projects, and Freshbooks is basically a faff to work with.
Hand Built turned out to be viable. In 2014, I’ve gotten to:
Closing the year, I’m spending the majority of my time with Fusion as interim Director of Engineering. It’s a somewhat of an odd limbo state — Fusion can’t yet extend a full-time offer because they don’t have a business presence in Oregon. If / when they do, I’ll probably accept, as I really enjoy the team and what we’re working on. But the limbo state has its advantages too — I’m on the hook for a fixed number of hours each week, and get to have my side projects.

In 2015, I’d like to improve upon two areas: open source contributions, and my product offerings.
In starting Hand Built, my goal was to spend roughly 25% of my time on open source. Even though I’ve become the maintainer of WP-CLI and a co-leader of WP-API, I’ve a bit fallen short: 28.66 hours on WP-API, 116.17 hours on WP-CLI, and 56.95 hours on other projects including WordPress core. But, this does equal ~12% of my tracked time so I guess I’ve exceeded Matt’s 5% goal. Setting monthly time budgets, as with any client project, is likely the best way to meet the commitment.
When I chatted with Boone, he mentioned 75% of his business comes from recurring, on-going contracts, avoiding one-off pick-up projects. In his opinion, it’s the most viable way to be a solo web developer. My past eight months echo this — the majority of my billable hours are priced hourly and a part of a long-term contract. I’d like to do more code reviews and migrations though, so I need to invest time productizing these offerings, marketing, etc.
Both Leah and I love to travel. In 2011 and 2012, I managed to hit ~130k miles flown each year. According to TripIt, here’s the tally for 2014 compared to 2013:
Not quite as impressive, but still pretty good.
Cemre Güngör put together a neat app for visualizing your TripIt profile. Here’s how mine turns out:

Time to go celebrate my sister’s 21st birthday. Happy New Year’s Eve!
]]>
While I didn’t really need it, I finally decided to upgrade. Pictured on the left is my new, fully-loaded 13" Macbook Pro. Retina, 3 GHz i7, 16 GB RAM, etc. Pictured on the right is my old, yet reliable, 13" Macbook Air. It’ll take a while to collect a similar set of awesome stickers.
Largely because of the SSD and (lack of) weight, my 2011 13" Macbook Air has been the best computer I’ve owned. But, I’ve been envious of the battery life with newer Macs. And, countering the trend of netbooks / everything running in the cloud, I’ve been regularly maxing out my 4 GB RAM.
This Macbook Pro won out over the mythical 12" Macbook Air coming in 2015 because one always needs to be wary of first generation hardware. Using my handy crib notes from October to get everything configured.
]]>The day the iPhone was available, I went to the Apple Store in University Village just to hold one. No commitment. And I went out the door with an iPhone anyway.
I’m writing this post from the WordPress for Android app (which really should be named the WordPress.com / Jetpack upsell app). Two years ago, I tried to make the switch but I just wasn’t ready. Now, I’m mulling making a more gradual switch, having purchased one of the last latest Nexus(i?) for this testing purposes.
As a stranger in a strange land, here’s what I’m running into, in no particular order:
+ Other than the fact I have no idea how to create an unordered list, the WordPress for Android editor is quite nice. + I feel like I’m relearning how to computer with the Android keyboard. Selecting text also feels like it takes three attempts per. + With Ad Block Pro on desktop and Tweetbot on iOS, I almost forgot Twitter had ads. Twitter Android client: ew. + TouchID is conspicuously absent. As is iMessage support and Things. I guess you basically need iOS and Android apps if you want to exist. + It’s mindboggling how Slack has managed to produce a consistent, solid user experience across multiple platforms. Lesson for the rest of us.
Ok, battery just about dead. Back to iOS.
]]>I thought I’d use the opportunity to gauge usability of using it in a project. My feedback is from the perspective of a developer needing to create custom endpoints for WordPress — I haven’t written any client-facing code yet.
These notes are roughly edited. Mostly I just want to get them up before WCSF.
WP-API has a comfortable implementation of using WP_Error for returning error responses in my endpoint callbacks. Being able to specify the HTTP status code is a great touch.
Extending WP-API’s core classes is really nice for DRY. They should be designed to be extended — I’d suggest they’ll be more commonly extended than used standalone.
For instance, I was able to get a lot of mileage out of extending WP_JSON_CustomPostType and customizing the response values for prepare_post(). However, I basically reset the original array (because the project has different data models), so it would be cool if there was some reusability there.
Also, I was able to easily add an authentication check for get_posts(). But, I wasn’t able bypass delete_post()’s capability check, so I needed to create my own.
Context argument is proving to be easily reusable. I invented my own context that seemed to fit in the paradigm.
Route registry is pretty much copy and paste == it works. I love the style of route definition too: /(?P<id>d+)
Using bitmask operators to map HTTP methods to callback isn’t terribly intuitive, although it’s easy enough to get going by copy and paste. I’ve never liked that part of the Rewrite API, and don’t think we should repeat it.
It would be nice to be able to modify the “data” field associated with a WP_Error entry. I’ve set up my models to return WP_Errors, but then I need to recreate that error in my controller to include the status code.
Because we have a variety of content models that are often mixed and mashed (e.g. a Post displayed with Author, Terms, and “Featured Image” Attachment), we should do embedded media really well. I think this is lacking in WP-API right now — you basically need to reinvent the wheel on each endpoint.
I’ve spent way too much time writing code to define and validate supplied arguments. I know this is something I like and Ryan hates, but it would be cool if we could nail field definition and validation for endpoints. This is something we did with H-API. It seems like we’re part of the way there by using Reflection for argument definition in our endpoint callbacks. Easy type validation is just the next step — maybe it could be introduced as an optional library.
On that note too, using Reflection against the defined method arguments to decide which request arguments are passed is too magical. It’s new to PHP and will be completely baffling to Joe Shmo WordPress developer.
]]>Writing code and leading development teams is my full-time job. For local development, I use Vagrant and Salty WordPress. I was using VMWare Fusion for a while, but the filesystem caching issues drove me back to Virtualbox. I edit files with Sublime Text 3 running the Colbalt 2 theme. iTerm 2 (full-screen mode, duh) tames my terminal windows. Only on a rare occasion do I have to open Cyberduck to SFTP somewhere.
On the command line, my life is complete with ZSH, autojump, Git, hub, and WP-CLI. I consider every day I don’t have to use Subversion to be a good day. Most projects I’m on use Github with a as-simple-as-possible feature branch pull-request workflow.
Bartender wrangles my menu bar into submission. If I didn’t have it, my menu bar would be overrun with icons for:
Skype and Slack are open everyday. I’d like to say Slack is over-hyped, but they’ve done a really nice job. Sometimes I remember to open Linkinus to idle in various open source project IRC rooms.
How I run my business is really a post in itself. Harvest is indispensable — I use it for sending estimates, time tracking, and billing. Things is awesome for keeping track of what needs to be done and when. A long time Remember The Milk user, I love having a dedicated desktop application for task management. Mailplane is the best way to deal with email in 2014.
Oh, last but not least, I use a mid-2011 13 inch Macbook Air with a 256 GB SSD and 4 GB of RAM. It’s the best computer I’ve ever owned.
]]>Options I’ve looked into over the last two hours:
P.S. Crashplan supports backing up a NAS drive as long as you can mount it. It’s $60/year for unlimited data. And Dropbox is $100/year for 100 GB. How does that work?
]]>Although I didn’t finish my slides until this morning, I did a couple of things I’ll always be doing going forward:
Post-work, pre-dinner bike ride around the airstrip.
Memo to self: always put the cover on the front. Because dirt and baby.
]]>Short answer: with code! Because AdOps only wants to create a limited set of ad slots, and Google DFP slots can be used once per page, you’ll need to display the slot first, and reload it for each subsequent use.
The slots are added dynamically as the user scrolls. If a given slot has already been loaded once, then the next time we try to use it we actually pull the first instance over to our new slot, reload it, and add a placeholder for its old position so the page height doesn’t jump. We can use the same trick scrolling back up, simply replacing the placeholder with the refreshed ad.
Google’s documentation has a similar example that’s a good reference point for methods, etc. Pay attention to googletag.refresh( unit ); and googletag.pubads().refresh([unitInstance]); — unitInstance is what’s returned by googletag.defineSlot(), so you’ll need to store that somewhere for later reference.
I look forward to hearing about the straightforward approach I missed…
]]>The way to Ísafjörður from Hellnar is a gnarly three hour gravel road. Before hitting town, you’ll drive through a long (~10 km) tunnel with a 60 km/h speed limit. After the tunnel, the speed limit goes back up to 90 km/h. And then, kilometers before you enter the city proper, it drops back down to 60 km/h. But I missed that sign (crying baby and all). Most of Iceland is 90 km/h unless you’re within a city’s limits.
We took a pit stop between the tunnel and town at Bonus to pick up groceries for the week. Within a couple of minutes out of the parking lot, a police car passed us, pulled a U-turn, and flashed its lights. Busted!
The police asked me to get in the back seat of the police car because they video record the interaction. They explained the 60 km/h speed limit and showed me their clocked speed, which I didn’t disagree with. I was going 82 km/h because I thought the speed limit was still 90 km/h. I explained I wanted to contest the ticket.
In the US, my understanding of the game is this: get a speeding ticket, contest it in front of a judge, get anywhere between 0-100% off. Typically it’s at least 50% off. And that’s if you formally get a ticket — if you have a cute baby in the back seat, the police will just let you off with a warning. I’d grade my argument a B-, worth 40% off.
In Iceland, contesting a speeding ticket is mostly unheard of, and confuses the police. First, you’ll have to go with them to the station. There you’ll need to explain for at least an hour why you’re wanting to submit an appeal. Once you get them to agree, you’ll need to go back each morning to ask whether your appeal paperwork has been submitted yet. But don’t worry, it hasn’t.
I also learned:
Unless you’re me, it’s probably easier for you to just pay the ticket via credit card while in the back seat of the police car. I wanted to get my money’s worth in the form of a better understanding of Iceland’s legal system.
And remember, if you don’t exercise your legal rights, you might find you no longer have them.
]]>
Enjoying the scene and a Swiss mocha after the hike from Hellnar to Arnarstapi and back. Bobo is quite the happy traveler.
We’re staying at Hotel Hellnar, near the end of the Snaelfellsnes Peninsula, for three nights before taking the ferry to Flatey and driving on to Ísafjörður. Our hiking is dependent on the weather. It was clear enough this morning to get one in, but started pouring as soon as we returned. This afternoon we decided to drive up to Stykkisholmur and check out the town. Tomorrow? Either hiking in Snaefellsjokull National Park, or watching movies in our room.
]]>
Classic “all’s well that ends well story.”
Last night, Bobo took, oh, about five hours to be put to sleep. For this reason and that, she just would not go down. And, to make matters worse, she knew she was tired — so she cried and cried and cried. Putting her in the Ergo finally calmed her down enough to feed and fall asleep.
Eleven hours later, you know “noon”, the Bachhuber family is waking up for the day. Leah is exhausted because Bobo slept in her arms all night, and I’m two hours late to pick up our rental car. I get that sorted, pick up a scone for Leah, and we’re eventually off for the day’s trip to the Blue Lagoon.
All of the reading Leah did before the trip seemed to imply kids would do just fine in the geothermal pool. I had assumed the waters were 80-90 degrees, and we would have a grand time as a family. As it turns out… the waters were 98-102 degrees, and the official recommendation is no kids under two.
YOVIO (You Only Visit Iceland Once)! It took some serious effort to convince Leah, but I snuck Bobo into the water on my shift. She loved it — and her skin is now as smooth as a baby’s bottom.
]]>
Old Reykjavik towards the harbor from the tower of Hallgrimskirkja church. Doing a bit of sightseeing after sleeping in until 10 am. Bobo took the flights over like a champ; for Leah, it was a bit more rough but last night was a good ketchup.
Dong, dong, dong… church bells in the tower strike one. Time to bounce Bobo back to sleep.
]]>After we arrive Monday morning, we spend three nights in Reykjavik. Wednesday we plan to take a day trip to the Blue Lagoon. Apparently little bobos are encouraged — a water wing should fit nicely around her belly. From Reykjavik, we’ll take our rented car to Hellnar for three days of hiking. Then, to get to Ísafjörður where we’re spending the second week, we take a ferry that stops for the day on Flatey Island.
I’ll be offline the first week, and working a half week the second. Looking forward to the opportunity to relax, spend time with my family, and reflect.
]]>
Shot at the BCNI Philly after-party.
]]>Beginning with CoPress, I got the taste of running a WordPress-only hosting company. Watching clients email Microsoft Word documents back and forth became the genesis of Edit Flow, which is now used by some of the largest news organizations in the world.
Moving on to the CUNY Graduate School of Journalism, I grew to realize the impact usable software can have on education, and was a valued voice for innovation within the institution.
At Automattic, I spent two years on the WordPress.com VIP team reviewing code, fixing nasty bugs, and training developers. I’ve had the honor to speak at many WordCamps, including WordCamp San Francisco. And, along the way, I made significant contributions to Co-Authors Plus and other plugins, and fell in love with WP-CLI.
With Human Made, I split my time between client services and product. I supported a half-dozen clients, most notably Vocativ, CFO.com, and News Corp, with backend and frontend development, leadership, and project management for their launches. I also led WP Remote, a JS application built on a WordPress-powered API, through two substantial feature releases.
Now, through Hand Built, I’m ready to help you solve your business problems. Let it be creating a custom workflow experience for your content team, reviewing an existing codebase for security and performance, or migrating years of archives into WordPress, I have expertise you can depend on.
I look forward to hearing from you.
]]>Strongly influenced by Salt provisioning and installable as a WP-CLI package, Dictator now allows you to:
Dictator understands WordPress in terms of states. States are collections of regions. Each state file has the state declaration along with tracked configuration details for each region. Regions have a defined schema which produces the translation between the human-readable YAML file and how WordPress stores state in the database.
One key idea Dictator adopted from provisioning systems: environments are ephemeral. WordPress no longer doing what you want it to? You should be able to destroy it and provision a brand new version.
For 0.1, Dictator packages two states: network and site. The network state comprises regions for network settings, users, and sites. The site state comprises regions for site settings, users, and terms. Management of widgets, roles, and more is just waiting for a pull request.

Think downloading the entirety of a production database is a messy way to get just a few configuration details? Me too — and with Dictator I can provision full WordPress environments without the bad assumptions that come with using production data.
Ever had a site launch that required a frantic amount of widget configuration right after changing DNS? More than I can remember — and I’m automating myself out of the problem.
Think non-posts data portability would be neat? So do I — and I built a tool for it that I’m very excited to share with you: Dictator. Try it out with wp dictator export site site-state.yml
After 41 weeks and one day in the making (and 16 hours of labor), our daughter Ava Lucille Bachhuber finally joined Leah and I on Monday at 4:01 pm. She’s beautiful, happy, healthy, and such a cute darling.
Aside from what you’d expect — long nights, taking on the doula responsibility to support Leah and Ava — I’ve had two pleasant surprises so far:
Looking forward to many more pleasant surprises on this journey.
]]>
Also in this release:
coauthors_show_create_profile_user_link filter.coauthors_count_published_post_types filter for specifying the post type(s) used when calculating the user’s number of published posts.post_author is set to one of the co-authors assigned to a post.Please leave feedback, bug reports, and praise in the WordPress.org forums. You can also get involved with development on Github.
]]>And I’ve been incredibly impressed. The machine is fast (although I guess I’m jinxing myself now), the control panel is just what I want it to be, and the price make me feel like I’m committing a robbery.
For anyone that wants to take a peek at what I’ve done, the repo is in Github. It was intended to be a one-day project, but I ran into some domain-mapping hell. As it turns out, core doesn’t fully support domain mapping as I thought it did.
Lastly, I provisioned my new machine using masterless Salty WordPress (work in progress). Hoping to align incentives such that Salty WordPress continues to be the best way to provision local and production WordPress machines.
]]>As some of you may be aware of, Digital First Media is the second-largest newspaper chain in the US. Under leadership from the likes of John Paton, Jim Brady, Steve Buttry, and others, DFM is investing heavily in digital, to the tune of $100 million annually over the next three years. Part of this investment is their “Project Unbolt”, and part is other, yet to be announced news products and infrastructure. WordPress will be a key component of the technology stack — and DFM’s Thunderdome team is the place where many experiments are happening.
Five and half years ago (wow how time flies), I wrote “One case against College Publisher” in which I outlined the importance of open source in publishing. Since then, I’ve worked in news largely from the vendor perspective — none of the newsroom opportunities I explored were the right fit. With Digital First Media, I feel like I’ve gotten my big chance at the big leagues. I look forward to helping DFM implement WordPress in a variety of contexts, as well as increasing my contributions to WordPress core, Edit Flow, WP-CLI, and other projects. Open source has a tremendous opportunity to impact news, and the news industry has a tremendous opportunity to contribute to open source.
Check out the announcement on Inside Thunderdome. If you want to join the fun, we’re hiring a frontend developer for my team.
]]>Ultimately, the point I wanted to get across is two-fold:
After the talk, I asked Zack for his feedback:
Resources
All of the references I mentioned in the slides are available at the following links.
WP Remote components:
Object cache drop-ins:
Future of WordPress:
]]>Apparently this dilemma resonates with developers:
My takeaways:
Joe will be in Portland next week for hacking and general mischief. If we manage to bang out the product idea I’ve had forever, it’s going to be something I’m very excited to show the world.
]]>Today: Hiked Dog Mountain with Spittle. Gorge-ous day in the Gorge, but bitterly cold. Saw a few other brave souls.
Now: Just about the perfect time for a hot bath.
]]>The key idea is to bring together a bunch of agencies that build on top of WordPress, Drupal, Joomla, and whatever other frameworks. Personally, here’s what I’d like to get out of it:
Ideally, it would be a two or three day retreat-like event in some great location. Solid presentations, but lots of time for networking. I’m a fan of conferences as a model for continuing education largely because many of us are making this up as we go along, and they’re high-bandwidth opportunities for sharing knowledge.
Let me know if you know of any events like this, or are up for planning it yourself. I’d really love to see this conference happen.
]]>The most notable events of the year took place between the months of May and September.
Sunday, May 26th - Proposed to Leah at the Spray Rodeo. After a couple of months procrastinating / waiting for the right opportunity, I went for it. Dropping the question in front of hundreds of people was the easy part. Summoning the courage to ask permission from her dad was much more difficult. Best decision I’ve ever made.
Monday, July 29th - My 26th birthday, aka the day we learned Leah was pregnant. I remember the moment vividly — she was at home, I was at work, and she called me on Skype video to share the news. My initial reaction was excitement, and I’ve been excited ever since. We weren’t quite ready to share the news with my parents that evening, but my sister Madeline guessed something was up when Leah uncharacteristically declined to try her cocktail.

Sunday, September 1st - Leah and I get married at the beach, in front of Haystack Rock and almost 200 family and friends. Oregon lived up to its promise with beautiful weather. We had a perfect weekend.
2013 was great for hitting my stride as a web developer focusing on media and technology. I started out the year continuing my gig with Automattic’s WordPress.com VIP team. In addition to the day to day of competing with Mo for most closed Zendesk tickets, I continued work on Edit Flow, Co-Authors Plus, Ad Code Manager, and a variety of other plugins.
I also started contributing more regularly to WP-CLI:

Getting to be involved in the project is something I’m both honored by and proud of. WP-CLI has been an invaluable asset to the work I do — I use it in some capacity on a daily basis. Having my code critiqued by scribu has really pushed me as a developer too. His feedback is always apropos, but it’s fun to occasionally prove him otherwise. One of these days, the package manager will finally land…
At the end of April, I left Automattic to join Human Made, a leading WordPress agency that splits its time between clients and product. It was a great transition for me. The team is a pleasure to work with, I get to apply my creativity every day, and the gig has all of the perks of a distributed company.
Since the switch, I’ve likely spent the most amount of time working on Vocativ and WP Remote. The former has been a neat opportunity to me because I’ve been able to build many “future of journalism” ideas I’ve had in the past. Although I’m technically not in the newsroom, it’s the closest I’ve ever been and I get to interface with editorial staff on a regular basis. They’ve hired a number of forward-thinking journalists too. Two things we’ve built of note: Template Manager, essentially Zoninator on steroids, and Poster Images, aka Photoshop in the browser with Imagick doing the heavy lifting. They use both to maintain a highly-visual homepage, with more user-facing features to come.
WP Remote has also been a great opportunity to flex my creative muscles. Just a month after starting with Human Made, I helped lead the charge on getting its first paid feature out the door: Automatic Backups. The only problem: our async jobs system was dead on launch. Joe and I then spent the next 24 hours building Job Agency, a simple, durable jobs system for WordPress (powered by WP-CLI, of course). In October, we launched WP Remote Premium with a few more features, and WP Remote has seen steady revenue growth since.
I really look forward to helping shape Human Made to be a company I want to work with for years to come.
For the last few years, I’ve been pretty fortunate to have jobs and a work/life balance that support one of my passions: traveling.
According to TripIt, here’s the tally for 2013:
Broken down, it looks like:
With a baby on the way it will be tough to beat those numbers next year but I’ll try my best!
]]>Here’s the problem I want to solve: iPhoto, but in the cloud. The digital version of the photo boxes my parents have under their window seat with decades of history.
As someone who spent a few years trying to make it as a photographer, I’ve got a terabyte or two of photos on old hard drives that I hope haven’t failed yet. I want to put those photos in some place more permanent than what I’ve got. Deep archive is less desirable of an option because I have to remember to check every so often, they’re more difficult to access when I want to, etc.
As someone who’s recently married with a kid on the way, I want to collect all of our digital media in one place. In the cloud means it’s not tied to the ephemeral nature of personal machines, and that both Leah and I can manage it (she tends to do more photo stuff now anyways).
So… the fun part. If I had a week to slap this together, here’s how I’d build it:
Other ideas that could come later:
Later: Worth mentioning that Human Made is hiring full time frontend / backend product devs if you’re into this sort of thing.
]]>
Here’s hoping our daughter gets Leah’s genes!
]]>
I don’t normally like photos of myself, but this is pretty awesome.
]]>Spent a long time thinking about my role in the WordPress community too. Wrote a pretty angsty post this morning that didn’t end up now I wanted it to. Still not sure how to solve the problems I see.
]]>What I’m most excited about, and what WP Tavern nailed in their coverage, is that the launch of Premium also marks the formal announcement of the WP Remote API. Our entire JavaScript web application is built upon the same API that’s available to the public. For our users, this means the sky is the limit in how they integrate WP Remote into their workflow. For Human Made, the API is a rock solid foundation for us to continue to build WP Remote experiences with. It also means we can develop the API independently of the user-facing application.
Think of the WP Remote API as a single hub for managing all of your remote sites. Our eventual goal is to offer an endpoint for manipulating each object inside of WordPress. Right now, we offer Plugin, Theme, User, and Option.
In the process of launching Premium, we did a complete rewrite of the API codebase. Our rewrite offered a two-fold advantage: adding a new endpoint is vastly simplified, and our API docs are automatically generated through Reflection.
As an example, read through the site/option endpoint:
[sourcecode language=“php”] <?php namespace WPRemoteAPI; /** * Manage a Site’s options */ class Site_Option_Endpoint extends Site_Endpoint {
protected $pattern = ‘site/{SITE_ID}/option/{OPTION_NAME}’; protected $query = ‘site_id=$matches[1]&option_name=$matches[2]’; protected $arguments = array( ‘option_value’ => array( ‘required’ => true, ‘sanitize_callback’ => false, ‘methods’ => array( ‘POST’ ) ), ); protected $methods = array( ‘GET’, ‘POST’, ‘DELETE’ ); protected $authenticated = true; protected $premium = true;
protected function get() {
$result = $this->site->options->get_option( $this->option_name );
if ( is_wp_error( $result ) ) $this->send_error( $result->get_error_message(), 500 );
$this->send_response( $result );
}
protected function post( $args ) {
$result = $this->site->options->update_option( $this->option_name, $args[‘option_value’] );
if ( is_wp_error( $result ) ) $this->send_error( $result->get_error_message(), 500 );
$log_args = array( ’type’ => ‘option’, ‘action’ => ‘update’, ‘option_name’ => $this->option_name, ‘option_value’ => $args[‘option_value’] ); $this->site->log->add_item( $log_args );
}
protected function delete() {
$result = $this->site->options->delete_option( $this->option_name );
if ( is_wp_error( $result ) ) $this->send_error( $result->get_error_message(), 500 );
$log_args = array( ’type’ => ‘option’, ‘action’ => ‘delete’, ‘option_name’ => $this->option_name ); $this->site->log->add_item( $log_args );
}
protected function validate_query_vars( $query_vars ) {
$query_vars = parent::validate_query_vars( $query_vars );
if ( empty( $query_vars[‘option_name’] ) ) $this->send_error( ‘Invalid option.’, 404 );
$this->option_name = sanitize_text_field( $query_vars[‘option_name’] ); }
}
WPRemote_API()->add_endpoint( new Site_Option_Endpoint ); [/sourcecode]
At the top of the class, we define:
validate_query_vars() method which validates and sanitizes the passed arguments. For this endpoint, you can see how it first calls its parent’s validator, and then validates on its own.These class attributes communicate the endpoint’s qualities in a structured way. In addition to providing us a highly-usable abstraction of code, they also form the basis of our documentation. Through PHPdoc and Reflection, we can provide human-readable documentation at the endpoint-level and the method-level.
Notice we’ve yet to implement argument descriptions and mock endpoint responses. Human Made is hiring a full-time PHP product developer — come help us sort it out!
WP Remote Premium is the second significant WP Remote launch process I’ve participated in. The first was Automatic Backups in June. At the end of the first, we did a post-mortem to identify what went well, and what we’d like to improve upon. Fortunately, we don’t seem to be repeating any past mistakes.
With this launch, here are a few pieces I think we did well:
Met our launch date. The Friday before WordCamp Europe had been set for a couple of months. A few days before, we set an announcement time of 9 am GMT. We formally announced the product at 9:45 am GMT on Friday. Booyah, #shipping.
https://twitter.com/matth_eu/status/386067788944523264
Focused on what needed to be done, vs. what we wanted to do. Every product launch is death by a thousand decisions of bugs to fix, features to add, and tweaks to make. Making decisions from the perspective of what needs to be done forced a clarity to our efforts. In the last 24 hours before launch, we worked against a “Premium Launch Blockers” milestone. When that cleared, we launched.
Brought everyone together for the final push. As much as I love working distributed, there’s nothing like being in physical proximity to build excitement for shipping. Collaboration is higher bandwidth, and it’s much easier to triage, reallocate, etc.
Next time we launch a substantial addition to a product, here are a couple pieces I’d like us to do better:
Longer beta test period. Premium was open for beta testers three days before launch. The functionality for Premium was largely done, however the UI wasn’t in place. There haven’t been any huge bugs uncovered, but beta periods are always nice for fit and finish. Ideally, any large release should be in beta for a couple of weeks.
Spend more time on marketing. Although it wasn’t as rushed as Automatic Backups, I’d mark our marketing strategy as “bare minimum plus one.” We didn’t send any materials to publications until a day prior, largely because the UI was still in flux, and owe thanks to Post Status and WP Tavern for the quick turnaround. On our end, we banged through documentation, an announcement post, and some tweets. In the future, we should be working on marketing for a couple or few weeks.
Ultimately, the launch of WP Remote Premium met or exceeded many of my goals. Renewed focus on offering all of our functionality through a public API is what sets us apart from the alternatives, and will make WP Remote a durable product for the long-term. I’m excited to see what people come up with.
]]>We’d love for you to break it try it out. The free endpoints allow you to update core, themes, and plugins, download an archive of the entire site, and access a log of the actions you’ve performed on the site. Our Premium version lets you install, activate, deactivate and delete themes and plugins, and enable automatic backups, with more to come.
Feel free to write scripts that use the API, or build a new interface on top of it (our application is built entirely on the API). We’ve also created WP Remote CLI for you, a WP-CLI command to access WP Remote. Our goal is feature parity with WP-CLI, plus more. My favorite command right now: wp --site-id=31 remote-site download
Because Premium isn’t launched yet, shoot us an email and we’d be happy to enable Premium endpoints for your site.
Oh yeah — Human Made is hiring for a product-focused frontend developer. If you know someone who might fit the bill, please send them our way. Bonus points if they pitch us with something they’ve built on the API.
]]>
Paste a link:

Paste a quote from a link:

Send a reaction:

With any luck, these should hold me out a few more weeks…
]]>For the full story on Leah’s pregnancy, check out her write-up. We learned just over a month ago — on my birthday, in fact. Having discussed baby names for the past six months, I was mentally prepared and my initial reaction was excitement. Leah took a week or so to get used to the fact we’d be having a kid in March 2014 instead of March 2019. Once she did, we shared the news with the world.
On Sunday, Leah and I got hitched in front of Haystack Rock at Cannon Beach. It was, sincerely, the best day of my life. Not only did I get to tie the knot with my best friend, but the weather was beyond believable. Perfect day for a beach wedding. We had over 180 people attend the ceremony and reception. I’m truly humbled by those who took the time to celebrate with us, particularly those who traveled across the country and across the world.
Originally we had plans for a two-week honeymoon to Turkey and Greece. Because of the pregnancy, we’re instead headed to Sunriver for several days. We haven’t left yet though! Thanks to the state of healthcare insurance in the US, today we discovered Leah is denied any new coverage because pregnancy is a pre-existing condition. Her existing coverage ends September 19th. Fortunately, Oregon has the Oregon Medical Insurance Pool to pick up where the private sector drops off. Ironically, Regence, who provides my insurance and said they would deny her, is the provider of OMIP.
My genuine wish is for the “startup” world to take solving real problems more seriously. Josh Kushner’s Oscar sounds neat.

Before, training to me was running as far as I could, as fast as I could. In my infamous first attempt at a marathon, I’d string together an eight miler, a fourteen miler, a nine miler and do a six miles on my off day. Needless to say, it was too much — my body fell apart three weeks before the marathon.
Now, because I’m training for endurance, all I need to do is keep my heart rate below 155. I don’t have to come out of every run exhausted, needing a day of recovery. Instead, I feel invigorated.
]]>I didn’t bonk on this one, but I did feel pretty beat at the end of it. And today definitely wouldn’t have been a good day for forty.
The theory is that it was a combination of dehydration and the wrong heart rate for me. Planning to pick up a Garmin GPS + heart rate monitor watch — we’ll see how slow running at 145 bpm is like.
]]>One step back to the problem I’m trying to solve. More and more, I enjoy writing in Markdown with iA Writer. “Publishing” whatever document I’ve written generally involves hitting the Preview button in iA Writer, and then copy and pasting text into WordPress. Yes, the same workflow I’ve been preaching against for years.
I wish I could have a Git checkout of content in WordPress, make edits locally using my editor of choosing, commit, and push back to master. I’m aware of Jeykll and the other hipster “content management systems”, however I’m still an old-school content in a database kind of guy.
]]>Always looking for an excuse to travel, Leah and I hit Tokyo, the Kiso Valley, and Osaka June 14th through 24th. It was Leah’s third time to Japan and my first. Needless to say, everything that was wild to me was no big deal to her.
Our itinerary looked like this (Leah did a great job blogging the first part of the week):

As a kid, I remember distinctly the effects of jet lag. One trip in particular had me fall asleep on a bench along the Champs-Élysées at four in the afternoon. My family waited for me to wake back up, patiently munching on baguettes. Another had me tour around zombie-like for 42 hours because I simply couldn’t fall asleep.
The same kid who couldn’t sleep on planes for the life of him is now out in a heartbeat. Mitigating jet lag is a combination of: sleep at the right time, plenty of water and small meals, and caffeine, but not too much.
Coming back from Italy last June, I fought jet lag by running around the Coliseum late at night. I was sufficiently tired by my 6 am flight that I slept the entire way home. Given how timezones work, I landed in Portland mid-morning, drank my Earl Grey, worked a few hours, drove to Sunriver, and was convinced to do a half-marathon the next day.
Last week plus change, Leah and I flew to Tokyo. For me, it was the day following a return from New York — I had a total of 11 timezones to deal with. Our flight out was at 8 pm local and arrived 10 pm local. I slept six hours on the plane, spent a couple hours in transit to our hostel, and then slept four more hours. On our first day in Japan, we managed a full day of sightseeing.
Today, I’m back in Portland, rocking to Kyary Kyary Pamyu, and, having been up since 2 am, keeping my fingers crossed that my theory holds.
]]>It’s working out awesomely. Earlier this week, we announced our primary lineup of speakers. I suppose it’s a given because I’m the speaker coordinator, but I’d love to attend every one. They all tie into our theme of “permanence”, yet stand strongly in their own right.
And, as if those sessions weren’t enough, we’ve invited Brewster Kahle, of the Internet Archive and the Wayback Machine, to give a keynote. We also have one more keynote to announce.
When we began planning this year’s WordCamp, I knew I wanted us to push hard to raise the bar. There are enough WordCamps happening every month, and subsequently talks making it to WordPress.tv, that the status quo shouldn’t be a generic, third time old presentation. Our idea: if we mandate video applications, and only one per person, it would encourage potential speakers to consider their pitch thoroughly. Furthermore, videos would enable us to better assess the person’s stage presence and ability to communicate concisely, both of which are important for inspiring an audience.
It’s safe to say we didn’t know if the idea would work until the day of the deadline. Up until the last 12 hours, the outcome was unknown and, frankly, a little nerve-wracking. In total, we received ~25 applications; 90% were submitted on the last day. It paid off though. Most of the applications were solid, obvious examples of much consideration, and the video format was a tremendous help for screening.
Go out on a limb every once in a while, take a risk, and see how it plays out.
]]>
On the road to Rockaway for BeachPress, aka the beach and WordPress. Alex says it’s too rainy for the Viper, so we’re taking the Mustang instead.
]]>On Sunday, May 26th, I asked Leah to marry me. She said yes — in front of her family and hundreds at the Spray Rodeo. Her father, Ned, caught the moment in the video above.
I’d been waiting for the right opportunity for a few months, spending my time agonizing on which ring to buy and where to pop the question. At the start of our relationship, Leah played an important role in producing my mom’s 30th wedding anniversary gift to my dad. I thought I might take her down to the beach, have a couple friends spell out the marriage proposal in driftwood, and then pop the question. The fates decided I needed to propose in a better way.
Spray it was. Attending the two-day Spray Rodeo, and camping in Shelton-Wayside, is a long-standing Olson family tradition. Leah has been every year since she was six — yes, this year was her twentieth year. Considering she’s mentioned multiple times Spray is her “favorite time of the year,” I knew it was my best chance to get her to say yes.
Sunday morning started out with dismal weather. It rained so hard we stayed in the tent until 9 am. The rain let up, a little sun poked out, and I set about chilling my nerves by chopping wood.
Proposing to Leah posed two challenges: asking for permission from her father, and sweet-talking the rodeo committee into letting me into the arena. The first was much more intimidating to me. When the clouds started to clear, and with my window of opportunity growing smaller, I knew I needed to man up. I went to chat with Ned.
“Hey Ned, can you take a walk to the truck with me?” I ask. Ned gave me a weird look, reached into his pocket, and handed me his keys. “Actually, I’d like to walk with you to have a chat,” I clarified. Ned gave me a weirder look and reluctantly said “ok….”
I pitched my request. My fears didn’t manifest themselves. Ned gave his blessing, wrapped me in a big bear hug, and proceeded to tell me that even if he said no, he’d still expect me to ask Leah. First hurdle cleared.
Convincing the powers that be to let me hijack the rodeo late on day two was dependent on a great deal of luck. Fortunately, I had luck to cash in. I managed to get the name of Joann Griffith, long-time organizer, as the person who could give me the go-ahead. After a quick search, and help from a couple friendly souls, I found her in Frank’s Pub.
I pitched my request. “Well, I always love a good love story,” Joann responded. Boom, two for two. Time for the final step: walking out into the arena, and taking the mic from the announcer…
]]>Here’s what we did:
reveal.js doesn’t produce great static slide output, and I used its Markdown feature which requires Grunt to serve, so the bulk of what we covered will forever live on in the outline that follows.
Code review is a process for testing, revising, and confirming code before pushing to production.
Code audit is a similar process, but happens after the push to production.
There are a number of reasons, primarily…
Well, everyone has their opinions. Here are some:
Security
Validate / sanitize data in input.

Escape data on output.

Put secrets in a config file.

Best practices
Prefix everything to avoid collisions in global scope.

Remove or comment on dead code.

Considerations
Sessions don’t work well in multi-server environments.

Use WP_Http API for remote requests.

Questions help the developer justify their decisions.

Last December, I reached out to Susan Gage, managing editor for digital at The Oregonian, about hosting a hackathon. We had initial conversations about the idea, pulled in Lauren and Ivar, and started planning. Then, in February, I began hearing a bunch about Sisi, Tom, and Code With Me. I got the full download on how Code With Me works from Sisi at NICAR. After a brief discussion with Lauren and Ivar, it became obvious bringing Code With Me to Portland was a much better idea than a hackathon. So we set about convincing Sisi and Tom it was worth their time.
What worked well:
What should be added next time:
Some logistical notes:
After the weekend, here are the open questions I’m thinking about:
These plugins include:
Sometimes what appears to be a curse is actually a blessing in disguise. Human Made has pretty neat products in the works that I’m enjoying applying my creative energy towards. Stay tuned for that. And, on the open source side of things, I’ll have more time to contribute to wp-cli.
To everyone who’s used one of the above: it’s been a pleasure working with you. I’m looking forward to the opportunity to do so again in the future.
]]>Directions
Preheat oven to 275 degrees Fahrenheit.
In a large bowl, combine nuts, seeds and coconut flakes. Stir until well combined. In a small bowl or 2-cup Pyrex measuring cup, mix coconut oil, honey, vanilla extract, cinnamon and nutmeg, until well blended. Pour oil and honey mixture over nuts and seeds and stir with a large spoon or your hands until everything is well coated.
Spread mixture out evenly on a jellyroll pan (cookie sheet with sides) and bake at 275 for 1 hour, stirring every 15 minutes. Remove from oven and stir in dried fruit. Let cool completely and store in an airtight jar.
Ingredients
Enjoy!
]]>Matt’s Global Search (MGS). Now that I’m on the outside, MGS is the piece I miss most. MGS searches all Automattic P2s of all time. Ever wonder why something was done a certain way? Just search. You’ll likely find a thread from three years ago discussing the pros and cons of a half dozen approaches, and an explanation of why the fourth approach was picked. For the unacquainted, it takes some retraining to avoid asking a colleague every time you have a question. When you learn to search first, you become infinitely more capable (and ultimately end up in Barry’s good graces).
IRC for everything. IRC — you know, that really old technology like bulletin boards no one uses anymore? Yeah, it’s still really cool. It’s lightweight, you can use it on your desktop or phone, and it’s super hackable. You can pipe all sorts of things to IRC rooms. Like such as fatal errors… server load alerts… down notifications… When you couple your monitoring with IRC, it becomes a realtime health indicator of your platform, and an immediate point of collaboration for your team.
As I transition to my new role with Human Made’s increasingly distributed team, these tricks are at the forefront of my mind.
]]>
At the first fundraiser auction I ever go to, one for FACES Foundation last October, I end up with a week’s vacation at condo in Maui. I remember the setup clearly: a strong Pisco Sour to kick off the evening, red wine flowing throughout dinner, and the discomfort coming from being the youngest, and least formally dressed, person in the room. So, when the first item went up on the block, I ended up in a bidding war with the couple sitting beside me. And won.
We got to look forward to the trip for months. Spittle and Leah would be joining us for eight days at the end of March; a good ol’ fashioned, computer-free spring break in between lives of craziness. We had no plans other than plenty of sun, bananagrams, reading, and hanging out.
Considering we managed to hike and snorkel too, I think we were successful. Highlights include:
Pro tip: groceries are unreasonably expensive unless you end up at Costco, where they seem to be the same price as stateside.
]]>Hey would it be possible to limit the automatically marking as unresolved to one category? This would be particularly useful for my category ’tasks’ which need to be marked as unresolved when published (and then marked as resolved when completed).
It’s totally possible using a combination of a couple filters. Here’s what the annotated code snippet looks like:
[code lang=“php”] /** * P2 Resolved Posts: Only mark ’task’ posts as unresolved * * @see http://danielbachhuber.com/2013/04/18/p2-resolved-posts-only-mark-a-specific-category-as-unresolved/ */ // Marks all new posts as unresolved add_filter( ‘p2_resolved_posts_mark_new_as_unresolved’, ‘__return_true’ ); // Let us apply conditional logic to when posts are marked unresolved add_filter( ‘p2_resolved_posts_maybe_mark_new_as_unresolved’, ‘p2rpx_only_mark_tasks’, 10, 2 ); function p2rpx_only_mark_tasks( $ret, $post ) {
// Get all of the categories assigned to the post $cats = get_the_terms( $post->ID, ‘category’ ); // Make sure this didn’t return false or a WP_Error object if ( is_array( $cats ) ) {
// Use wp_filter_object_list() to see if there are any ’task’ terms $task = wp_filter_object_list( $cats, array( ‘slug’ => ’task’ ) ); // If there is a task term, we want to mark unresolved. Otherwise, no. if ( ! empty( $task ) ) $ret = true; else $ret = false; }
return $ret; } [/code]
However, in a stock P2 install, there isn’t a frontend interface for setting the category. The category is determined by the post format you use. Other users might be better off searching for tags by switching the term lookup to: get_the_terms( $post->ID, 'post_tag' );
Earlier this week I made the difficult decision to leave Automattic, where I’ve been working on the VIP team for just shy of two years. It’s been a tremendous ride — I’m truly proud of who I’ve been able to work with, and what we’ve been able to get done.
I’ve felt my personal growth slow in recent months, however. Considering where I’m at in my career, and that Leah is busy with school, I’m looking for a more challenging opportunity — one that pushes me to learn, grow, and lead. If you have or know of such an opportunity, I’d love to hear from you: d@danielbachhuber.com
]]>For the former, one idea that’s already come up: I’d love to contribute “Share to WordPress” integration. Oh, and it would be really neat to pull comments already on the post into the reading experience. There seem to be some type of comments limited to just NewsBlur.
The user experience has significant room for improvement. Hopefully he takes the dough he’s pulling in now to hire a proper designer.
It’s also been on my list for a long time to cull my feed subscriptions. Based on what I’m seeing, roughly 90% of blogs died between 2010 and early 2012.
On that note, you need to watch Anil Dash’s “The Web We Lost”:
http://www.youtube.com/watch?v=9KKMnoTTHJk
“The first thing you do, when you succeed in Silicon Valley and your company is acquired, is destroy everyone’s wedding photos […] The reality is those of us that [cared about open formats] have lost.”
It’s time the Open Web became the cool thing to hack on again.
]]>Applications to attend are due this coming Saturday, April 6th, at 9 pm Pacific. Apply now and please spread the word.
Many thanks to The Oregonian and the Knight-Mozilla OpenNews project for their support.
]]>
Last year, I ended the season with an unbelievable day of skiing. Today, it happened again.
Riley, my dad, and I arrived just before open to 13 inches of fresh. Riley, the avid tree skier he is, led the way all over the mountain. Fresh tracks and face shots galore.
We finished with 16k feet of vertical in 14 runs. Reminder to self: increase the DIN setting on my Kilowatts so they don’t fly off so often.
]]>Single-use P2 threads. P2 is an awesome theme for threaded conversations that stand the test of time. Avoid long, drawn out email discussions with friends by pointing everyone to a P2 thread.
A year ago you wrote… Emails of what you wrote in the past, a la Timehop.
Lock one or more dashboard widgets in place for everyone. The WordPress dashboard offers infinite customization. Sometimes you want to make sure a widget (e.g. site announcements) appears in the same place for everyone though.
Save Manage Posts filter state. It resets your query argument filters every time you navigate away.
]]>
Pretty darn neat. Maybe the future of journalism isn’t so far away after all? (via Greg)
]]><?php
if ( ! defined( 'WP\_CLI' ) ) return;
WP\_CLI::add\_command( 'pdxwp-presentation', 'PDXWP\_WP\_CLI\_Presentation\_Command' );
class PDXWP\_WP\_CLI\_Presentation\_Command extends WP\_CLI\_Command {
/\*\* \* Start the presentation with a demonstration \* \* @subcommand slide \* @synopsis <number> \*/ public function slide( $args ) {
list( $num ) = $args;
$slides = array( 0 => array( 'header' => 'wp-cli is for WP devs on a deadline (http://wp-cli.org)', 'body' => array( 'Daniel Bachhuber', 'daniel@automattic.com', '@danielbachhuber', ), ), 1 => array( 'header' => 'What is wp-cli?', 'body' => array( '- A Command Line Interface for WordPress', '- A powerful tool for manipulating WordPress', '- A nascent WordPress community project with lots of opportunity for contributions', ), ), 2 => array( 'header' => 'Why is it useful to me?', 'body' => array( '- Open wp shell to execute arbitrary functions', '- Install, update, or delete plugins', '- Create posts, users, terms', '- More easily manage lots of client sites', '- Export a large amount of data', '- Scaffold a theme, plugin, or unit tests for a plugin', ), ), 3 => array( 'header' => 'Where do I start?', 'body' => array( '- Install wp-cli', '- (monkey dance)', '- Profit!', ), ), 4 => array( 'header' => 'How do I install?', 'body' => array( 'On your command line:', '- git clone git://github.com/wp-cli/wp-cli.git ~/git/wp-cli', '- cd ~/git/wp-cli', '- curl -sS https://getcomposer.org/installer | php', '- php composer.phar install', ), ), 5 => array( 'header' => 'How do I write my own command?', 'body' => array( '- Create a class extending WP\_CLI\_Command', "- Register your command with WP\_CLI::add\_command( 'pdxwp-presentation', 'PDXWP\_WP\_CLI\_Presentation\_Command' );", '- public methods are subcommands', '- PHPdoc allows you to set a <synopsis>', '- Sekret pro tip: Package useful commands with your plugins :)', ), ), 6 => array( 'header' => 'Now go! http://wp-cli.org', 'body' => array( ), ), );
passthru( '/opt/local/bin/clear' ); if ( ! empty( $slides\[(int)$num\] ) ) { $slide = $slides\[(int)$num\]; for( $i = 0; $i < 23; $i++ ) {
if ( $i == 3 ) { $this->line( $slide\['header'\] ); continue; }
if ( $i == 6 ) { foreach( $slide\['body'\] as $line ) { $this->line( $line ); $i++; } } $this->line(); } } else { WP\_CLI::error( "No slide #{$num}" ); }
}
private function line( $out = '' ) { WP\_CLI::line( " " . $out ); }
}
Here’s what the presentation actually looked like:

Never miss an opportunity for adventure is my motto. When DJ posted on Facebook that he was headed to Utah for a conference and wanted to ski, I immediately jumped on it. We ended up skiing Brighton for a few days with his friends David and Jeffrey.
The most important details:
Secondary details:
Best of luck to DJ, Jeffrey and David on their presentations!
]]>You are the epitome of web application. When others change their interface seemingly on a monthly basis, your beautiful design hasn’t change as long as I’ve subscribed to your services. We first met September, 2007. You’ve resisted the temptation to muck with a jewel that already works really, really well.
When you were undergoing scheduled maintenance two days ago, I realized how important you are to my life. You are the very first icon in my bookmarks bar. You are the most accessible location on my iPhone screen; I sync you hourly.
My girlfriend and I share you to keep track of the groceries we need to buy, and the chores we need to do. A simple shared list goes a long way towards de-cluttering the house of bits of paper.
It may have been around as long as I have, but “Inbox Email Address” is a recently discovered pleasure. If I need to jot down a few tasks, boom. If I need to inbox zero my email but log action items, done.
You bring new meaning to the phrase “getting things done.” Thanks to you I never lose track of anything I need to do. Although I may procrastinate on the top priority items, you pay attention to the number of times I postpone and flag it for me if it’s too many.
Thank you, Remember the Milk, for all that you do. Keep on rockin'.
]]>
To truly know a place, you have to walk its hills. And New Zealandia has some pretty nice hills.
Nah, that’s too profound. Really, after two weeks living in hotels, I was just jonesin’ to get outside. To commemorate a beautiful day yesterday, Dan, Nikki, and I trekked the hillside above Eastbourne, directly across the water from Wellington.
It took us forever to get to a decent vantage point though. The trail picked up at the edge of town where it wound up and up to get to the ridge line. New Zealandia is densely forested and the forest doesn’t let up at the top of the hills. If it was possible, I think it gets denser. So we bumped over hillock after hillock, some offering little openings that made us optimistic. Ultimately, I snagged the shot above at an overlook about half way down.
A good hike deserves good food. After the trek, we enjoyed a late lunch at a neat beach-side cafe. I had a panini-esque sandwich they call a “toastie.” Oh capers, it was delicious. Capers may be the new ingredient I sneak into everything.
An aside: if there was a difficult thing about traveling in New Zealand, it would be the use of comical words for everyday things. A cooler is a “chilly bin.” The baggage claim is the “baggage reclaim.” Oh, and most cars are imported from Japan so all dashboard buttons are in Kanji. Maybe that leads to it.
At the end of the day, I parted ways with Dan and Nikki, became amazed that New Zealandia doesn’t have security checkpoints for domestic flights, and flew down to Christchurch.

This morning, once I was fueled with a delicious scramble, I took off on hike number two of the weekend. Parts of Christchurch, including my Airbnb spot, are conveniently located next to Lake District-esque hills. If you aren’t paying attention to where you’re going, as I wasn’t, you can easily end up lost in a neighborhood. Fortunately, after three false starts, I found a path leading above the houses.
It took about an hour and a half to get to the top of Mount Vernon, where I took the photo above. Along the way, I became reacquainted with my love of podcasts. Podcasts are a great way to expand your worldview, and I need to get back into them.
I’ll be in Christchurch for a couple more days, hopefully finding a good place to cowork. Then it’s back to Portland, Leah, and a tasty East African cooking course at the end of the week.
]]>I want one of these when I grow up.
]]>The first was Clay Johnson’s “Industrialized Ignorance,” a look at the current state of the media. Clay argues that, much like how industrial food production gives us food that tastes good, but isn’t necessarily good for us, industrial media focuses on producing content with entertainment value, instead of informational value. To combat this, we need to launch an equivalent “whole food movement” for information.
I like the metaphor, and maybe the solution can be reapplied too. For all that the government has done to improve diet (e.g. not much), I believe the greatest successes come at the individual, family, and community level. Food is very much tied to physicality.
On the web, geography matters less. We’re equally as influenced by the people around us, but we have choice in who we follow, friend and subscribe to. In this way we can, figuratively, pick out the fruits and vegetables we’ll be choosing from for our meals later in the week. The first step to take, though, is to start cooking for yourself.
Not checking email before writing 500 words is a simple hack I’d like to take to heart. Instinctively, I reached for my phone this morning as soon as I opened my eyes. The phone went into low battery mode before I made it to the mail app. I took that as a sign today was the day to start.
“Oh, I’m too busy to spend write 500 words every day,” one might think. Or, “I have nothing to write about.” As WordPress’ distraction-free writing says, just write. The words will come to you.
The second talk that really hit home was Karen McGrane’s “Adapting Ourselves to Adaptive Content.” Yes, it does sound like it’s about responsive design. Instead, she promoted producing content independent of platform. If your content is well structured, Karen argues, you’re in a much better position to reflow it into a variety of platforms.
This sounds familiar. In fact, it sounds like what many of us have been promoting as the future of journalism. Stijn wrote about it in 2010. Adrian wrote about it in 2006. In the last year, the conversation has all but died.
Personally, I’ve found enjoyment in more mundane projects, generally falling under the “improving administrative tasks in content management systems” category. Reinventing the entire content creation process is an unknown, nebulous challenge.
It was nice to be inspired to think big again. We need to bring some of that discussion back. And, while we’re at it, open standards too. Remember those?
434 words. I’ll take it.
]]>Chris Coyier is a humorous man. He was also a designer at Wufoo and now does CSS Tricks and CodePen. Today he’s covering:
Chris designs in Photoshop, to the faux-horror of everyone in the room. Photoshop is more “left brainy” than a CSS editor. It affords more creativity. WebZap gives you buttons and other web patterns to use in your mockups.
The blank canvas is a challenge for every profession. In the design world, you might:
As soon as you have a Minimum Viable Design in Photoshop, though, take it to the web. Making it perfect in Photoshop just means you’ll have to do the work all over again.
“Let’s change the phrase ‘designing in the browser’ to ‘deciding in the browser’.” - Some Guy I Missed
Don’t work live on a server. Just don’t.
Instead, you can and should develop in a local environment. If you’re building for WordPress, MAMP is a good option to provide everything you need to run a web server.
Two tools to demystify version control: Github for Mac and Tower.
Chris is all about the Sublime Text. In version 3, being able to jump to files is amazeballs. Emmet does all sorts of crazy HTML auto-completion.
Some advantages to using a preprocessor like Sass:
Sass plus Compass gives you an amazing number predefined mixins.
Editor’s note: All of this frontend hotness is blowing my mind. I didn’t even know.
Preprocessing also greatly simplifies media queries. And it makes writing CSS fun again.
CodeKit is a Mac app that automagically preprocesses all of your shiz. It will inject style changes into your browser while you edit. Great for when you might need to style web apps with various states. It can also losslessly compress any image assets used in your site.
The easiest way to make a website faster is to load less stuff. If you can’t remove it entirely, you can concatenate and minimize.
Testing is a big PITA. BrowserStack lets you test in a variety of browsers from the comfort of your own home.
]]>John Gruber, well everyone knows who John Gruber is. If you don’t, please hand in your internet license.
Pac-Man is a maze. The maze is filled with dots. You eat all of the dots, without being eaten in turn by the monsters changing you. There are power dots in corners which turn the monsters into ghosts you can eat. Everything leads to points.
It was invented by Toru Iwatani. At the time, coin-operated video games was a nacent industry. Game operators converged at a conference every year to choose new games to buy. Pac-Man never stood out as a hit game. Until it did $1 billion in the first few years, more than Star Wars did in ticket sales.
Buckner & Garcia introduced a song in 1982 called “Pac-Man Fever.” It made it to #9 on the Billboard charts. Gruber remembers being able to play Pac-Man at the grocery store and an entire arcade of Pac-Man machines. It was the first game to reach this level of success.
Gruber ascribes Pac-Man’s success to four characteristics:
Mr. Do!, on the other hand, was an incredibly complex game only a few people at Webstock remember. For instance, when you eat the snack in the center of the screen, the screen changes color, some more bad guys come out that are more aggressive, and then maybe you get another life. Gruber still doesn’t know what the best technique is for winning the game.
Mr. Do! was a popular arcade game, but no one thought it was important enough to track how much money it made. Pac-Man was much more than a popular arcade game. “Everything in Pac-Man was iconic.”
The monsters in Pac-Man had their own names and unique personalities. “Blinky”, the red monster, persistently chased Pac-Man. He was the one most likely to kill you. “Clyde”, on the other hand, was a dumb oaf.
Pac-Man was popular because it rewarded obsessiveness, but Gruber argues it was financially successful because it was a game everyone could get. You didn’t have to be a gamer to know how to play it.
The original Macintosh was similarly successful. It challenged the status quo of interacting with a computer through the command line by offering an interface that was more intuitive. Gruber thinks Macintosh designers inherited many ideas from video games of the time. There was even iconography (e.g. a bomb on the restart modal) you’d expect to see in a video game, not an operating system.
iOS takes the simplicity even further. All of your apps live on your homepage. You’re either on your homepage or in an app. “Android is Mr. Do!” because there’s additional levels of complexity and conventions you need to learn.
Gruber’s advice: if you can’t describe your project in one sentence, you’re not working on a simple project. “Ten pounds of effort on one simple design element will have way more impact than one pound of effort on ten design elements.”
]]>Karen McGrane has made a career of dragging media companies kicking and screaming onto the internet. She’s helped with projects like a redesigned NYTimes.com, Atlantic Media’s web properties, and TIME’s new responsive redesign. “It’s tempting to think that mobile is a design and development problem,” but the real challenge of mobile is content.
To kick things off, compare NPR and Conde Nast. The latter has spent tremendous effort replicating print editions into iPad apps. When the iPad first launched, Karen asked Paul Ford what the effect might be on the publishing industry. This is what she heard:
We’re about to usher in a golden age of PDFs on the iPad.
Conde Nast has gone even as far as make print designers produce two layouts for the iPad: portrait and landscape. The 1980’s aren’t coming back, though.
NPR has taken an alternative approach: Create Once, Publish Everywhere. The story is created once, and let each platform determine how it should be presented. NPR’s CMS captures just the right structure for the content. All of this data is available through the API.
iPad issue sales are on the downswing for Conde Nast. For NPR, viewership has grown by 80%. They attribute it solely to the API and it’s downstream effects on how they produce editorial products.
Thirty years ago, TV Week made the decision to produce multiple versions of their content, and assign meaningful metadata to it. Thirty years later, that content still has value because it’s reusable in new or uninvented contexts.
“News organizations already have structured content […] So many problems in mobile would be solved if everything had a dek.”
One of the biggest challenges in digital is the notion that content and form are closely coupled. That how something looks has a significant influence on what it means. That there’s a “primary platform” for a given piece of content. For many news organizations, this primary platform is still print.
Adaptive content doesn’t mean content prepared for print and then moved to other devices. Nor does it mean content prepared for the web, then pushed to print and mobile. It means focusing on structured content that can live anywhere.
Here’s how it can be done:
“Metadata is the new art direction.” - Ethan Resnick. The more work you put into structuring your content now, the more opportunities you’ll have in the future.
]]>For the last couple of years, Aza Raskin (@aza) has been working on helping bring design to solving health challenges. Solving difficult problems happens by changing how you ask the question. The big meta problem of design is figuring out how to ask the right question.
In 1959, Henry Kramer had a dream that people should be able to fly under their own power. He put up a challenge of 50k pounds to anyone who could build a device for flying a couple meters above the ground between two points. Double the award for someone who flew across the English Channel. No one could solve it.
Paul Maccready in 1977 said that most participants were trying to solve the wrong problem. The real question was “how can you build an airplane to fly under human power that can be repaired in hours?” Other participants would build an airplane in 12 or 18 months, try to fly it once, and it would break. Paul was able to solve the challenge in 8 months by reframing the question.
“Science is in the business of embracing failure because it’s only through failure that we learn.”
It’s not about thinking outside the box, because that means there are no constraints. Instead, it’s about figuring out which box to think inside. “Constraints give you permission to think about something smaller.” Architecture provides perfect examples of thinking inside the box because you often have to deal with specific physical requirements:
The origin of the 140 character limit for text messages is also one of constraints. The person who made the determination wrote out everything you might communicate with a typewriter. Then he measured each line.
Creativity comes from constraint, and asking the right question is the most important part of design. Two more important ideas:
On the science of this, you’d look at how obstacles change someone’s perceptual and conceptual scopes. Generally, thinking of challenges as obstacles to overcome makes people think broader and more creatively.
If you encounter a detour on your drive home from work, you’re more likely to pick something new to eat for dinner. Getting out of your habits is very important. Adding an obstacle changes your perceptual scope.
]]>Clay Johnson (@cjoh) started out with a comparison of knowledge. Most of the room knew the name of at least one Kardashian, but most didn’t know the child poverty rate in NZ. How can we build better communities if we don’t know these things?
In 2011, the obesity rates in America are so bad that they had to adjust the map for comparing states.
“Pizza tastes better than broccoli.” We tend to eat more of what tastes good to us, as opposed to what’s good for us. Evolution hasn’t caught up to agriculture, let alone industrial agriculture.
We’ve created huge multinationals produce cheap, tasty calories for us. The power of industry means that complex food items (e.g. Pizza Hut with a variety of crazy toppings) are more easily accessible than simple ones.
“Who wants to hear the truth when they can hear they’re right?” We’ve also created media companies that affirm what we know, as opposed to informing us of what we need to know.
Politics and media is A/B testing and optimizing for reader clicks. “Opinion tastes better than news.” How do inform a society when everything is optimized for business needs? The AOL Way is a classic example of doing it wrong. Editorial integrity is last on the list.
Something strange is going on in America, and Clay thinks it’s because of the media. Up until 1996, the voting distribution across America was mostly purple (e.g. red and blue mixed). Since 1996, voting distribution has become increasingly polarized. Some areas are bright red and others are bright blue. Clay argues that it correlates with the rise of television networks. Similarly, Google search results affirm what question you’re asking (e.g. “democrats are socialist”).
Our definition of ignorance has changed. Ignorance now can be caused just as much by the consumption of information as lack thereof.
“We need to manage our information intakes like we manage our food intakes.” Some ways you can manage your information diet:
We as a community need to get closer to the source material. We need to demand of journalists that they show their work. Data is what enables us to create a more honest media.
Most importantly, work on stuff that matters. Every moment in history there’s been a hyper-literate class. Computer illiteracy will be like book illiteracy in ten years, and there will be a lot of people left behind. Lawyers are transferring their power to developers. When Mark Zuckerberg creates a new feature on Facebook, he’s wiring society. Features, like laws, dictate how we operate.
]]>Jason Kottke is a blogger and a web developer. Kottke.org is a blog he’s been publishing since 1998. Today he’s talking about something else.
1. How do you decide to do something?
When one of his kids was born, lots of friends and family took pictures for tweeting, Flickr’ing, and generally posting on the web. Most interactions with those images came in the form:
Three years ago, when Kottke started thinking about this, most companies just tucked the data away. It was/is hard to access again by users. “If you’re favoriting things to save important family memories, this is a problem.”
According to Stephen Johnson, good ideas come in the form of a “slow hunch.” One example: Tim Berners-Lee’s invention of the World Wide Web. After college in 1980, Tim coded a hyperlinked tool for academics to share knowledge. It didn’t really take on. In 1989, he hatched a plan to build a more ambitious version of the first tool. He took a vague notion and iterated on it, over and over.
Kottke’s first slow hunch: blogging software. He started Kottke.org by editing static HTML files. Since the time he switched to MT in 2002, he’s thought about writing his own blogging app.
The second slow hunch: streams. When the web first began, the NCSA logged everything that was new on the web. People would email the NCSA anytime they changed something with their website. And the NCSA would post the newest stuff at the top, and bump the older stuff down.
“It’s weird that we read backwards in time on the web, and forwards in time everywhere else.”
2. Stellar, something he decided to make
Stellar is a web app that collects all of your social media favorites in one place, and follow your friends’ favorites. At this point, 15k users have signed up. 2-3k are active users.
Kottke thinks of it as a lightweight blogging app. Every time you favorite something, it gets blogged to the stream. What’s surprising to him is how useful it is as a tool for finding things you didn’t know you’d be interested in. “The delicious cream off the social media churn.”
Stellar is hosted on two EC2 instances with RDS as the database. Software: Ubuntu Linux, PHP, Memcached, CodeIgniter, jQuery, Typekit, Mercurial, and MySQL (RDS). Everything is free, or very cheap, and way easier than it was five years ago.
3. What he’s learned, and the current status of Stellar
Another important stack: the meat stack. There are plenty of articles on how to get the most out of yourself and collaborators on HackerNews, Stack Overflow, etc. Kottke’s advice:
Design turned out to be harder than programming. One sign of success: if he got sidetracked by some new content while working on a feature, then he must be doing something right.
After two and a half years with 25-30 hours / week towards it, Kottke thinks Stellar is about 20% done. Some work to do:
“How can I build a business on the shifting demands of corporate APIs?” Kottke hasn’t committed to Stellar since July 31st, 2012 because he’s been stuck. He was that guy, super stoked about what he was building, until about eight months ago. Only time will tell what will happen with Stellar.
]]>Miranda Mulligan (hey, I know her!) helped take the Boston Globe through a responsive redesign, and now is Director at the Knight Media Lab at Northwestern. She’s the first in five generations of women to not make clothing for a living. Clothing matters; what you wear is an indicator of what you value.
“Journalism needs to be a more thoughtful dresser.” Some large news organizations have very good UX designers, and many more have very good editorial designers. But news design has stagnated, and the news industry needs more design-thinkers.
When Miranda talks with publishers, they’re fascinated by responsive web design. They don’t have many designers in their organization though, and design comes at the end of the project workflow.
“Technologists are winning at media innovation.” Twitter is reinventing breaking news situations. The Evening Edition gives you a summary of what’s happening at the end of every day. Narrative Science turns big data into readable stories. Why aren’t media companies inventing these new products?
]]>Or at least that’s what the speedometer told me on the straightaway.
]]>Today, I was honored to speak about WordPress in the newsroom to the AAN Digital Conference. The alt-weeklies industry is in a situation very similar to what I saw in college media a few years back: one proprietary CMS dominates, editorial workflow is MS Word to InDesign to web, and most of the focus is on print. It was a bit of déjà vu. Fortunately, everyone is also super enthusiastic about the web — no curmudgeons in the audience.
The WordPress-powered sites I highlighted: Quartz, Metro, CBS New York, Rolling Stones, Online News Association, and DigBoston. Quartz is near and dear to my heart because I think they’re really at the forefront of innovation with an app-like product and responsive design. I can’t wait until they roll out their commenting system.
Features and plugins I pointed out include: distraction-free writing, drag and drop media uploader, Edit Flow and WP Frontend Uploader. If you’re looking for more publishing-related plugins, we’re slowly profiling our recommendations in the VIP Plugins Directory.
One parting note: this conference was the first time I’ve heard “dry humping” as a recommended way to show your appreciation to the organizers. Keep on rockin’, alt-weeklies.

It’s the return of the IKEA bar table… again! This is now my third. IKEA no longer stocks the Leksvik, so it’s on to the BJÖRKUDDEN and corresponding stool.
Pros: cheap; almost the right height; stool works fine.
Cons: smaller desk space; stool isn’t as comfortable as an actual chair.
I also purchased an Ergotron monitor arm, however I don’t believe it’s going to raise my monitor to the height I want it. Maybe I’ll get something fancy with little cubbies as an alternative.
Standing desks are perfect for dancing.
]]>
The Miles and Daniel ski trip is now strong into its third year. This time we were joined at Squaw by Albert and lots of Miles’ roommates and friends. Many thanks to Natalie for coordinating the lodging.

Saturday: 20.5k feet of vertical in 20 runs. Post-ski, two hour hot tub session.
Sunday: 22.4k feet of vertical in 21 runs. Miles, Albert and I prepare an epic feast of brussel sprouts, garlic bread, spaghetti, and chocolate mousse for 18 people. Albert schools everyone with his simple tomato sauce recipe.
Monday: Sleep-deprived and hungover.
]]>By default, it appends a simple prompt to the bottom of every Page:

If a reader responds to the prompt, they’re given a follow-up question to clarify their response. Readers must be logged in for the prompt to show up.
Comments are emailed to the post author and summarized in a post meta box:

Many thanks to Mario Peshev for his random hacks of kindness. I started this plugin a year ago and left it half-finished on Github. Then Mario comes along, submits a couple very substantial pull requests, and kicks me in the pants to release it.
Join the fun on Github or use the WordPress.org forums for questions / bug reports. This plugin is already live for the WordPress.com VIP documentation portal, and is available for use by VIP and Enterprise clients.
]]>Last year, Andy Baio wrote two articles comparing Rdio to Spotify. In both instances he concludes Rdio comes out slightly on top — their catalog is just a little bit better.
But, I’ve never been able to get the Blue Scholars or St. Germain on Rdio so I always questioned how the catalogs really compared. Yesterday, after scrapping my first hackathon project at 7:30 pm, I decided to use the Echonest API to answer my question once and for all. Which is better, Rdio or Spotify?
As it turns out, Spotify. By a landslide. Of the 92,343 songs I had time to pull down, 74,703 are available on Spotify and 56,988 are available on Rdio. Furthermore, Spotify had 21,370 songs that weren’t available on Rdio, whereas Rdio only had 3,655 songs that weren’t available on Spotify.
Plus Spotify has the Blue Scholars and St. Germain. Time to make a switch.
]]>

In June, while on a trip to England, my rental car got a flat. I declined the collision damage waiver when accepting the car because I thought I was covered by VISA.
Well, four months later I learn that I am, but only if meet subclauses B, C, and Z. In this particular case, VISA claims I accepted the collision damage waiver. I’m not sure how that makes sense if Hertz made me pay for the flat repair and I have the receipt to prove it.
Smells scammy to me.
Update #1 (Tuesday, 10 am): I called Hertz and they say they didn’t charge me for CDW. Awesome.
Update #2 (Wednesday, 8 am): After calling eclaimsline again and conveying what I learned from Hertz, they connected me with the agent who did the original report. We then called the Cambridge office where we learned there was a CDW included in the rate for damages over £650. We forgot to ask whether it was optional or mandatory. So we conference called back together this morning: it was mandatory, and I couldn’t opt out.
I win. So much win.
]]>Startups are highly-scalable, meaning a small company can serve lots of people. Tiny startups are 1-2 person companies who focus on maximizing impact with minimal resources. They don’t raise venture capital — raising money means your job becomes creating a return for your investors.
Paleo Plan started three years ago with $1,000. Jason did it solo for six to nine months. The basic product of the membership site was shopping list and recipe plans. It worked well for people new to Paleo (e.g. those who’d been recommended to eat Paleo by their doctors).
One feature request he got right off the bat was recipe modifications for allergies. If a client couldn’t eat a certain item on a certain recipe, they didn’t want it on their weekly shopping list. A complex situation to the request would’ve been to customize the website to produce recipes based on known allergies. Instead, the easiest solution was to number the recipes and include the recipe number next to the item on the grocery list. The client could simply cross out the item.
Along the way, Jason has learned that successes aren’t always monetary. A few years back he and a couple friends started Bacn, a online store for bacon, in three weeks and with almost no capital. It was entirely a marketing experiment. After working on it for a few months, they sold for a nominal sum and got to write a book about it.
Question from the audience: if you give yourself three weeks to get something up, how long do you let the experiment run?
Answer: it depends. For an experiment he’s running right now (ebook with a landing page and purchase flow), he’ll give it about $1,000 dollars in time and AdWords if he thinks it will generate $10-$20k over a couple of years. He likes to shoot for making $500-$1,000/month in four months.
I asked a question about the unspoken assumption that pay-per-click advertising is the way to get your product off the ground. Jason responded that Paleo Plan started exclusively on pay-per-click advertising because he was entering a new market where he didn’t have existing clout. If you do have a well-read blog, etc. in the market you want to enter, it’s easier depend on your product just going viral.
Jason’s Tiny Filters:
“Solve a single problem for a group of easily identifiable people who want a solution and can pay for it.” The most critical component is that your target market is actually looking for a solution. Like Googling for it.
“Don’t confuse a startup idea with a genie wish.” There are a lot of problems to be solved, but many of them can’t be easily solved. For instance, an iPhone app that tells you where the open parking spots are. How is this data going to be generated?
“Don’t confuse knowledge with skill.” You may know everything about the car industry, but that doesn’t mean you’re qualified to build a community about car enthusiasts. Build something realistic.
Some good tiny startup ideas: ebooks, membership sites, and digital downloads (e.g. ringtones, Keynote templates).
Some bad tiny startup ideas: iOS apps, global domination, advertising based, anything you have to hire out for, and acquisition-only.
“Manage major pain points by making them medium pain points.” Don’t spend three weeks perfecting something you can improve in a day. Perfect is the enemy of good enough.
Question from the audience: when’s the proper time to become a business?
Answer: once you’re making more than $100/month. LLCs are really cheap to incorporate.
The most important thing: become a problem solver. In everything you experience, figure out how to make it better.
]]>Hoping for the best but expecting the worst, I called Alaska Airlines to see if I could reapply my miles to another trip. I wasn’t looking forward to wasting 80k miles.
“Do you know where you would like to rebook to, or should I just put the miles back in your account?” the agent asks.
Whoa, no way. “Oh, you can just put them back in my account.”
“Great. The taxes on the ticket will also be refunded, but the $25 booking fee with the partner airline is unfortunately non-refundable,” she explains.
“Sounds good.” Best day ever, in fact.
]]>
Last night we celebrated Leah’s brother’s birthday at my house. Happy birthday Sam! Our contribution to dinner was homemade gnocchi with Italian sausage, and a delicious butternut and apple soup.
The gnocchi is actually two recipes on the Martha Stewart website. We used a couple of sweet potatoes in our gnocchi and added Italian sausage from the New Seasons meat counter.
The soup came from my mom’s Barefoot Contessa cookbook. I remember her making it sometime in the not too distant past and loved it. The apples and apple cider are what make it unique — we used honey crisp. It’s great for a rainy fall evening.
Warm the butter and olive oil in a large stockpot over low heat. Add the onions and curry powder and cook, uncovered, for 15 to 20 minutes, until the onions are tender. Stir occasionally, scraping the bottom of the pot.
Peel the squash, cut in half, and remove the seeds. Cut the squash into chunks. Peel, quarter, and core the apples. Cut into chunks.
Add the squash, apples, salt, pepper, and two cups of water to the pot. Bring to a boil, then cover, reduce the heat to low, and cook for 30 to 40 minutes, until the squash and apples are very soft. Process the soup through a food mill fitted with a large blade, or puree coarsely in the bowl of a food processor fitted with a steel blade.
Pour the soup back into the pot. Add the apple juice and enough water to make the soup the consistency you like; it should be slightly sweet and quite thick. Check the salt and pepper and serve hot.
]]>Me: “Pumpkins?”
Leah: “No, you be Mitt Romney and ill be a binder full of women. :)”
]]>Here’s what I like about it: - Jelly Bean is amazing. The device was preinstalled with bloatware. There was even a Yellow Pages app. Fortunately it’ pretty straight forward to root the device and make it run how Google intended for it to run. - Deep Google integration. My life is in-sync in ways I never imagined it would be. In particular, I’m pointing at contacts and browser settings. Plus there’s a Gmail app. Plus there’s a dedicated Google Reader app. - The hardware. Applications load and respond faster, LTE stands for “light speed”, and I’m quite enjoying the haptic feedback. The dedicated back button is nice too, although takes getting used too.
Here’s what I’m still not sure about: - The form factor. The S3 is difficult to maneuver at times with one hand, and seems to always want two. - Battery life. It could be worse than my old iPhone 4, which would be bad. - Some of the UX decisions. I haven’t decided as to whether they’re bad, or just a different paradigm than iOS. Keyboard layout, auto-complete, and copy and paste come to mind most immediately. - The apps. It’s obvious that some, like Evernote, may have actually been designed for Android first and then ported over to iOS. Others, I may or may not be looking at you Remember the Milk, are the awkward younger siblings. Like really awkward. Although the situation is probably a lot better now than it was at the beginning.
We’ll see if this decision sticks, or whether I go crying back to iOS.
P.S. The lists aren’t properly formatted because I didn’t want to take the time to manually type each HTML tag. WordPress for Android could use love too.
]]>The iPhone 5 is out of the picture because of the different form factor. My Mophie won’t work with it, and there aren’t any cases for it yet.
This morning, I went into both an AT&T store and an Apple store. Apparently the only iPhone 4S I can purchase is the 16GB. This would be a significant downgrade from the 32GB model that I’m currently using 26GB of. Furthermore, because I’m using my mom’s upgrade, buying a new iPhone at the Apple store would mean that my mom’s line would be deactivated until I ran over to the AT&T store to reactivate it.
I’m taking this as a sign I should finally make the switch to Android. What should I get instead?
]]>For instance, if I wanted to have a post “Waiting Review” before it was marked unresolved, I could add something like the following to my theme’s functions.php:
P2ResolvedPosts()->add_state( 'waiting-review', 'Waiting Review', array( 'before' => 'unresolved' ) );
The third argument is the position of the state. It can be ‘first’ or ’last’, or ‘before’ => ‘state’ or ‘after’ => ‘state’.
Alternatively, you can remove a state if you no longer find it useful.
Getting this feature out the door required a fair amount of refactoring. It’s been running stable on WordPress.com for a couple of weeks — the most awesome way to beta test. Feel free to post any feedback, issues, feature requests, etc. in the WordPress.org forums. You can also fork the plugin on Github.
]]>For a special treat this morning, Leah and I took a floatplane from Victoria to Seattle. It was amazing.
]]>Oh, and we’re thinking about taking a floatplane back to Seattle on Tuesday. Fingers-crossed that it works out.
]]>
If I was in the Army, my nickname at work tomorrow would be Major Chafeage.
This morning, Leah and I completed our first ever marathon with a net time of 4:01:51. Considering I, somewhat stupidly, climbed Table Mountain yesterday, it was awesome to have such a great finish. Highlights of the course include great weather, a beautiful jaunt across the St. Johns Bridge, and copious amounts of gummy bears. The first 18 miles were strong. After that, my energy level dropped significantly and I dosed on said gummy bears to get to the finish line.
“Let’s do the ultra,” Leah says first at breakfast and then again this evening, referring to the Autumn Leaves 50/50 happening at the end of the month. Heh, we’ll see.

Spittle and I climbed Table Mountain today - this was our view from the top. Fun, challenging walk up Heartbreak Ridge had me essentially front-pointing the entire time. And my calves are a bit sore. The ridge we took down was so windy we had to squat a few times to keep from getting blown off our feet.
Now we’re at East Wind Drive-In getting soft serve. Pretty sweet way to spend the day.
]]>Since the advent of Github as a leading collaboration platform, I’ve forever been trying to reconcile the Git to SVN workflow. Progress is faster in Git(hub) because it’s a far superior platform for fostering contributions. Seamless pull requests are much nicer than the multi-step process of creating and uploading patches. Distribution still happens in SVN, however, because many legacy deploy systems are coupled to it. Etsy took the leap of switching from SVN to Git, and essentially recommends against it. For the time being, we need to be able to live with both.
Two years ago (almost to the day), I wrote a post called “How to properly use Git with WordPress.org Subversion.” The thing is though — it wasn’t ever properly using Git with SVN. It was grinding the two tools together like a sixteen year-old learning to drive a stick. Furthermore, if I ever nuked my Git repo, I’d have to wait literally for hours to run git svn fetch on the WordPress.org repo. Boone has worked in a similar way for a while; I eventually gave up and started copying my files over manually when I needed to release. Mo does this with an rsync command.
A recent stroke of insight has changed my outlook on life, improved how I sleep, increased my libido, and generally made me a much happier developer. It’s this: Git and SVN can live side-by-side in the same directory. You just need to tell them to ignore each other.
This afternoon, for instance, I decided to spend a little bit of time on Edit Flow. I like to develop Edit Flow locally, keep the WordPress.com VIP shared plugins repo version on the bleeding edge, and occasionally release a version on WordPress.org. Because I haven’t yet applied this “Git in my Subversion” approach to what’s in the latter two repos, let me now walk through what that looks like.
The first thing you should do is edit the “svn:ignore” property on your existing SVN repo. You can do so with:
svn propedit svn:ignore edit-flow
In this situation, I specifically want SVN to ignore two things: .git and .gitignore. Add those, save, and commit. SVN will now respect Git’s living style.
Next, change into your target directory and initialize a new Git repo. Running the following pulls my full remote project into the working directory:
git remote add -f origin https://github.com/danielbachhuber/Edit-Flow.git
But, if I run git status, I’ll see that my local working files aren’t tracked by Git, I can’t checkout master or change branches, and Git is flummoxed. Don’t worry — as long as you’ve kept Git as master, and ported your SVN commits back to Git, you can run:
git checkout -f master
Boom, Git in my Subversion. Running git status I notice there’s a lot of .svn junk I don’t want tracked in my repo, so I create a .gitignore file to handle those (on WordPress.com trunk, I also ignore the wpcom-helper.php file we use for every community plugin to handle local action and filter modifications). The integration is complete.
With Git and SVN side-by-side, I can easily pull features I’ve developed locally into the VIP shared plugins repo, VIPs can create pull requests for community plugins, and I can push hotfixes discovered by WordPress.com usage back to the Git(hub) master project. It works well because Git and SVN are tracking the same files, but I don’t have to get them to live together harmoniously — they just ignore each other. Git-SVN be damned, this is much better.
]]>Quartz also launched this morning. It’s the bleeding-edge of what’s being built on top of WordPress. I’m excited to see how the application continues to evolve and, being a long-time Economist reader, doubly excited to become an active reader. Quartz brings new meaning to the phrase “Powered by WordPress.com VIP.”
]]>Upon importing, these would be saved to a custom post type that allows you to comment on the pitch, indicate that you’re working on the story, or punt it far, far away.
Seems like a fun hack to me.
]]>Last night, Leah and I had the fantastic opportunity to fly down to San Francisco to hear Tim O’Reilly speak about the birth of the global mind. As a long time listener of the podcast, it’s always been my dream to attend a Seminar About Long-Term Thinking. The essence of Tim’s talk is well-encapsulated in an essay of the same title. One idea posed in Stewart Brand’s interview at the end touches in the nature of economy in the information age.
Economy, in my perspective, is our way of understanding how we work together. We take many things about it for granted — GDP as a measurement of growth, monetary instruments as our tools for transaction — that aren’t actually hard truths. They exist because at some point along the way we invented them to make our society more prosperous with less effort.
A peculiar situation has manifested itself. Most recently with the web, we’re inventing newer, better ways to function together that are essentially “extra-economy,” or outside how we normally measure economic activity. In these systems, far more value is being created than being captured; and for many, the generated value and associated recognition is more important than financial gain because they lead to influence.
For instance, in what I do with Automattic’s WordPress.com VIP team, a not-insignificant amount of my time each day is spent contributing to open source projects. We don’t directly monetize this work but it generates value that trickles back to us. Releasing our liveblogging plugin has already resulted in several useful contributions from the community. Making money from open source is a hack though, as our currencies are based in scarcity and our peer economies are based in abundance. In the latter, the more people participating means the more everyone benefits.
Our bootstrapping of a new mode of economy is happening hand in hand with another trend: increased productivity making certain types of jobs obsolete. A hundred years ago, the number of people involved in food production was X while today it has dropped to Y, a ten-fold decrease. While we don’t yet have the nutrition we need, we’ve certainly been able to meet our caloric numbers. Douglas Rushkoff observes “we’re living in an economy where productivity is no longer the goal, employment is.” For our government, the focus is to keep the populace in jobs, because unemployment breeds discontent and has a perceived negative impact on our traditional perspective of economy.
I have no idea what comes next. I see an economy of abundance as generative, whose engine is creativity in the very literal sense of the word. And it’s additive too; what’s mine can be yours and vice versa. Don’t ask me “how do I make money?” because I don’t know. That’s the old way of measuring economy and we haven’t invented the new one.
]]>

They call it “the mother of all relays.” I call it another check mark on the list of life goals.
It surprises me how enjoyable the race was, after years of hearing horror stories from my mom.
The team, filled with complete strangers to me save one, was an absolute joy to share the hardship with. As I write this, they’re playing diddies with kazoos someone brought.
Leah, taking over some organizational responsibility for the team, picked up the best possible pre- and post-run food for the vans. Turkey jerky, bananas with almond butter, lots of water, and fruit leather meant we were adequately nourished all of the way through.
Oh, and the running itself. Amazing. Great routes through the countryside, each passing a lot quicker than I expected.
Leg 8 started at 4:30 pm Friday just west of Sandy and ended before Boring. I completed the 4.55 miles in 33 minutes (7:15 pace), roadkilling 11 people along the way.

Leg 20 looked like the picture above — up and up and up. And it was my middle of the night run to boot. Fortunately, I slept a few hours. I nailed it. Finished 5.75 miles in 47 minutes (8:10 pace), roadkilling 31 poor suckers along the way.
Leah and I decided to do our last two runs together. Leg 31 and 32 were four miles a piece. These eight miles wound through the coastal basin just before Seaside. Looking back, it may not have been the best idea to double our mileage during the last part of the relay. I’m glad we pulled it off, and also happy we didn’t time it.
Just about time for beach, beer, and burgers!
]]>
Notable arrivals: ForeFlight and Rdio. Other than that, not much has changed. Here’s Andrew’s.
]]>Today, I was invited to present my perspective at WordCamp San Francisco. These are my slides. My notes are posted below them.

Know thy codebase
Key to being able to manipulate your environment is knowing the rules by which the environment operates.
“Why is the sky blue?” you might ask. “Well, defraction. The atoms in the sky scatter blue light more than any other.”
Similarly, you might ask, “why is my custom URI redirecting to a page when I’ve explicitly registered the rewrite rule?” and discover a canonical redirect conflict you need to disable.
If you don’t already, you’ll eventually know core inside and out. Here are a few places you can get started:
Master the tools of the trade
Tools are another key way to gather situational knowledge. Gather more information to make a decision.
The Developer plugin was released to help bring more consistency across developer environments. VIP works with dozens of developers every day. We want to make sure they’re writing clean code as effectively as they can. In addition to installing suggested plugins, it does some basic environment checking (e.g. is WP_DEBUG set to true). The plugin is on Github and we welcome your pull requests.
Some of the plugins it installs are:
Prefix everything
Prefix all the things! Avoid fatal collisions in global namespace. It doesn’t happen often, but it never needs to happen.
Also, don’t declare functions within functions. If the parent function is called twice, you’ll see a fatal error when the second function.
Commit wisely
Commit messages are one of your greatest opportunities to make your mark in history. When you are gone, your commit messages will live on.
Write them wisely. Recounting what you’ve changed is a good sanity check. More important is to explain why you’re making the change.
Why does the duplicate code exist in the common plugins directory? Is it there mistakenly, or is code being migrated? What was the background context for its being?
When writing a commit message, you’re writing for two audiences:
It’s also tremendously helpful to link to context if there is any, Trac ticket or otherwise.
Run through the slides in this particular section as they describe it plenty.
Most importantly:
Code is a conversation. Read others’ code; have them read yours.
]]>Here’s the problem: I, like many people I know, drive too many places all alone in my car. One person in a three ton metal vehicle that could easily transport five. To move all of that mass around, with such unused, waste internal space, is an inefficient use of energy.
Here’s one solution: ad-hoc transportation. Capitalizing on the triple convergence between location-aware devices (iPhone 2 on June 9th, anyone?), social networking (Facebook, Twitter, et al), and an absurd number of nearly empty cars on the road (suburban America), the goal should be to connect people with people who are pointed in the same destination.
It’s here, and it’s called SideCar. I’m very intrigued to see where this startup goes. Thanks Alex for the tip.
]]>Project shipped — on to the next one. Always working towards more, better, faster. Busy, busy Baxton.
In some senses, I think connectedness makes us a surrogate for the goals of the network. We lose our individuality. I have always been a wanderer, and even I have been subsumed.
Tonight, I’m flying down to Peru to meet up with Leah and do some good old fashioned trekking. She’s been in-country since last week, working up a storm. I hear Belen Hospital may even soon have a website on WordPress.com. We’ll meet in Lima and take a bus to Huaraz.
Huaraz is known as one of the best launch points in South America for outdoor adventure. It sits at 10,000 feet in a valley nestled between two of the tallest mountain ranges in the world. We’ll spend a day or so getting our gear together and adjusting to the altitude. Once we’re ready, a three or four day trek on the Santa Cruz trail awaits.
For reading material, I have William Hertling’s AI Apocalypse (sequel to the epic Avogadro Corp.), Vikram Chandra’s Sacred Games, and Cutting for Stone by Abraham Verghese. To occupy the hours of walking and dinners made over a camp stove, I have the best traveling companion in the world.
The unexamined life may not be worth living, but I find it harder and harder every day to put aside time to examine it. Fortunately, there are still many adventures to be had. In those adventures I can find the opportunity to wander.
¡Hasta luego! See you all on the 29th.
]]>add_filter( 'p2_resolved_posts_mark_new_as_unresolved', '__return_true' ); to your theme’s functions.php. Thanks macmeister for the request.Fork the plugin on Github. In particular, I’d love to see an interface for assigning a post to yourself. Please post any feedback, issues, feature requests, etc. in the WordPress.org forums.
]]>Fortunately, it’s because it’s already 81 degrees towards a beautiful day, and not because of sleet, injury, or crime.
]]>

After driving to Bend Friday night, Robin, Leah, Gordon and I woke up at 6 am to take our shot at climbing South Sister. I’ve done it a couple times before; it was girls’ first time, and Leah’s first attempt at a glaciated peak. Escaping the many mosquitos at Devil’s Lake by 7:15 am, we hiked up and up and up to summit just around 11:50 am. On the way back down, we managed a bit of hot glissading action (see video below images).
South Sister is a great introduction to mountaineering. It’s physically demanding and provides some amount of high mountain exposure, but technically tame (no crampons or ice axe needed). If you’re tempted to check it out, the conditions should be favorable through the end of September. Here’s a good route description.

















On June 9th and 10th, I fulfilled a life-long dream of walking in the Lake District, originally inspired by Bill Bryson’s Notes from a Small Island. My friend DJ, who’s been doing good work at Cambridge this past year, invited me to join his walking club for a weekend in Northern England. We had a great feast Friday night at Trinity College, an unexpected delight, and woke up early Saturday morning to drive six hours.
Our destination was the hills around Ennerdale Water. Once we arrived, we quickly put on our hiking shoes and walked several kilometers up the valley to the Black Sail hikers lodge. The weather was reasonble, but an uncertain barometer for the next day (the Lake Distict is known for cold rain and howling wind).
Fortunately, we lucked out. Sunday started out nice and only got nicer. We walked up Steeple Peak to access jaw-dropping views towards the Isle of Man. What amazed me were the well-maintained stone fences threading up, down, and all around the hills. The area around wasn’t desolate but it certainly wasn’t well-populated.
After a wonderful day on the trail, we returned to an extremely, screw-through-the-treads flat tyre. That misery isn’t a story worth repeating.

“We kick ass. This morning we finished our second half-marathon and beat our personal record by three minutes at twice the altitude. Now we’re going to eat burgers.” - Leah
“This girl is crazy. Over the last forty-eight hours, I’ve pulled an all-nighter, run eight miles around Rome, flown 14 hours back to Portland, and drove four hours to Sunriver. Somehow she convinced me to wake up at 6 am and run a half-marathon with her. I’ll be eating my burgers in the hot tub.” - Daniel
]]>In the WordPress.com repository, there’s a fair amount of code in use that’s never seen the light of day. Bits and pieces of this code would probably be useful to other people, and subsequently be improved as more developers read, implemented, and found new uses for it.
Open source is a unique and tremendously important phenomenon because it enables people to create more economic value than they could with previous collaborative frameworks. It’s “one of the most important ideas of our generation.” Automattic as a company believes this too; on the first page of our internal company documentation, Matt Mullenweg says, “I’m fine with releasing basically any code on WordPress.com that isn’t our password files.”
However, we don’t release as much code as we could be releasing, nor do we go about many our projects in the open source way we admire. I get the sense others in the community may agree.
Part of the challenge, as I perceive it, is that we (Automattic) build new functionality for WordPress.com, are lazy in our implementation, and it then becomes extra work at the end to “release” the functionality as a plugin. People have limited time in the day, understandably, and the last step doesn’t get done.
Last month, I wrote an internal blog post identifying four ways I’d like to see Automattic improve:
There was good conversation in the comments and, in somewhat typical fashion, not a lot of clarity on the takeaways.
Personally, I’d like to get as much WordPress.com code into a repository that VIP developers can check out and use in their development environments. Hell, it even means they can submit patches for fixes, coincidentally as Erick Hitter just did while I’m writing this post. I’d like to move our existing, private shared plugins repository into a WordPress.com public plugins repository which would also contain code like the shortcodes we’ve implemented on WordPress.com.
Communication is the lifeblood to open source, and the only remedy to poor communication is over-communication. For an open source project, discussion should be public, ticketing should be public, and the changelog should be public. This obviously isn’t to say that everyone should have an equal voice — rather, everyone should have an equal opportunity to participate. Making public WordPress.com’s internal code would be a start, but that would just be the start.
What other approaches do you think we could take?
If you haven’t already, I’d highly encourage you to read Tom Preston-Warner’s “Open Source (Almost) Everything”. It’s legit.
]]>It’s exactly this — an introduction, because I hope to inspire further exploration of interacting with WordPress through the command line. Similar to Scribu, I’ve found “the keyboard is faster than the mouse” for many tasks, and that developing proficiency with the command line has dramatically increased my effectiveness as a programmer.
So, I hope you take the time to check out wpshell and wp-cli (and ack, for that matter). Think critically about how they can improve your workflow, and let me know what you script up!

For the return, I flew north from Sunriver to the Dalles and then cut down the Gorge. One of the neatest things about this trip was having what’s called flight following. This is where either Portland or Seattle has you on radar the entire time. They’ll then give you traffic advisories if your flight path is crossing another plane’s. It’s also a nice amonut of banter to keep you company as you spend a few hours solo in the cockpit. The flight back took 2.1 hours.
These photos and videos are a bit of what I saw along the way (gradually improving my aerial photography).

Ad Code Manager is a plugin designed to help you deal with ad codes, those short snippets of Javascript used to display advertisements on your website. This week, Rinat Khaziev of Doejo, Jeremy Felt of 10up, and I pushed v0.2, which includes these improvements:
Rewrite Rules Inspector is a simple development tool for viewing all of the rewrite rules registered with your site. It’s been available for VIPs hosted on WordPress.com for a while — today it’s available for download from the WordPress.org repository.
Specifically, the Rewrite Rules Inspector helps you:
Both plugins are available for forking in the Automattic Github repo, and pull requests are always welcome. Coming up next are improvements to Co-Authors Plus, P2 Resolved Posts, and a new round of development on Edit Flow…
]]>Yesterday, Leah and I woke up at 3:30 am to go clamming with my dad. The series of fortunate events went something like this:




Today’s flight along the coast was my first solo cross-country. Originating from Twin Oaks Airpark, I flew a Cessna 150, N66589, towards McMinnville and then onward to the coast. It took me to 1.1 hours to get to Newport where I landed, hung out for a little bit, filed a new flight plan, and then returned home in 1.0 hours.
Like I mentioned on Twitter earlier, there’s a really sweet app for the iPad called ForeFlight that allows me to plan my route, look up weather along the way, and file my flight plan. Here’s what it looked like for the flight down there.

Without an iPad, producing the flight plan takes about 10x longer than with. Such is the real-world value of technology. Of course, I have to do it the pen and paper way first because I’m “learning.”
Totally awesome…
]]>Please post any questions, bug reports, feature requests, etc. in the WordPress.org forums. If you want to contribute code, I’m eyeballing co-author management in Quick Edit and guest author functionality for v2.7.
For WordPress.com VIPs, this update has already been deployed to the shared plugins repo.
]]>


Yesterday wasn’t my first solo, but it was my first time going through the whole process on my own: preflighting the plane, fueling, determining my flight plan, flying, etc. I took off towards McMinnville, did three touch-n-goes there, and then flew around some clouds to get back to Twin Oaks.
It was awesome, to say the least. I’m at a neat point in my training now too — I have endorsements to land at Twin Oaks, Aurora, or McMinnville, and am free to fly whenever I’d like (and the weather is good enough). Going forward, I need to complete some cross country work with my instructor, practice maneuvers for my checkride, and pass my written.
Plus, some video:
]]>At lunch, I learnt I was to lead a small group breakout on “the future of the CMS.” To keep the discussion going, we started out by brainstorming the things we liked and want to improve our respective software, and then did a roundtable to identify our six month personal goals.
Some things people like about their CMS:
What people would like to improve (lots of conversation, as expected):
Given the short notice, I thought the breakout session went quite well. About twenty people showed up. In terms of what worked:
Next time, we should:
“Ideas are non-rival goods.” There is no cost to sharing them.
“Like a Rolling Stone” from Dylan was written in five hours of insight and produced in four cuts.
On moments of insight: “As soon as the answer arrives, it feels like this answer.” Scientists simulate these moments of insight by having people complete word puzzles. When you get undergraduates too drunk to drive, they solve 30% more of these problems.
Researchers using EEG machines could predict the moment of epiphany up to 8 seconds in advance.
Insights come mostly commonly from states of unfocus and relaxation.
“Creativity is residue of wasted time.” - Albert Einstein
What defines successful creativity? Not IQ or something that can be measured with a personality test. “Grit. Persistence, stubbornness, and the unwillingness to quit.”
“We live in a world obsessed with maximal tests.” In study after study, maximal tests have failed to correlate with typical, real-world performance. It’s more reliable to look at the historical data for the subject (e.g scanning frequency on electronic checkouts vs. running the cashier through a test).
“Making something new is really, really hard.” Grit is especially important in the creative domain.
“How do you know that you actually know something if you don’t actually know it?” A hunch is a “feeling of knowing.”
“The era of the line genius is over.” In the 1950’s, the most highly-cited research papers came from scientists working on their own. Now, the papers come from teams.
What are the ideal templates for group creativity? Steve Jobs restricted Pixar (a large-ish company) to two bathrooms in the atrium to force connection and random conversations. Physical location matters a lot. “Our most important new ideas appear in idle conversation from too many people occupying the same space.”
“Attendance at business conferences has almost doubled since the invention of Skype.”
Geoffrey West asks in his research: Why are cities so durable and companies so fragile? As a city gets bigger, everyone in the city becomes more productive. Companies do the exact opposite, and this becomes dangerous in the long term.
Later: here’s a great lecture by West on the topic
“The magic of a city is that it’s a freewheeling, chaotic place.” The walking speed of pedestrians is the single most predictive variable of patents (innovation) per capita.
]]>To showcase the awesome things happening in our local WordPress community, we’ve decided to give 8 to 10 lucky folks the opportunity to pitch a plugin, theme, project, or history of their business. If it’s not technical, no problem — the only requirements are that it relates to WordPress in some way, you can present it in five minutes or less, and that the other attendees will find it useful, fascinating, humorous, or have some other generally positive reaction.
Want to apply? Fill out our quick survey by April 18th, and we’ll let you know shortly after whether you get picked.
Demo night will be the usual time and place: April 23rd, 6 pm at the US Bancorp Tower conference rooms.
Hope to see you apply!
]]>
Night flight over Portland. PGE Park Jeld-Wen Field is in the mid right as a point of reference. Beautiful weather this evening — mostly calm, some small chops coming back over the West Hills. Ended up with five landings at Hillsboro, one at PDX, and a final at Twin Oaks. Total of 1.4 hours.
]]>
On Friday, I finally pushed P2 Resolved Posts live in the WordPress.org directory. Based on Nacin’s gist of the same name, it’s a “lightweight GTD plugin for WordPress and the P2 theme.”
Mark a thread as “unresolved” when the topic needs resolution, and mark it as “resolved” when you’ve achieved that state. There are also sidebar widgets to let you see all unresolved posts, optionally filtered to a specific tag.
We use P2 extensively at Automattic, for a variety of purposes. I improved Nacin’s code last November because I wanted a simple way to encourage the culture of coming to a resolution on a topic. All too often, conversations are left hanging. This is a problem for those participating, and an even larger problem for those reviewing the conversation at a later date.
The plugin is in-development on Github. Please post any feedback, issues, feature requests, etc. in the WordPress.org forums.
]]>Yesterday, I scheduled a cab to the airport for 5:15. Normally, this is more than sufficient time to get to the airport, check in, etc. It isn’t sufficient time, however, when you sleep through your alarm, both of the cabbie’s phone calls, and wake up at 5:30.
So, that happened. It doesn’t happen often, but it’s not the first time.
Thankfully, the cab was still in the area (I called him back) and we raced out to the airport.
On the way, I figured out that I had already checked in and I could use my phone as a boarding pass. One less step.
He dropped me off at 5:55, I was through security by 6:02 (thank you MVP status), and on the plane at 6:07.
Boom, boom and boom. Thank you baby Jesus (and karma, and Radio Cab, and the most awesome airport in the US).
]]>Considering making the switch to WordPress? Join Daniel Bachhuber, code wrangler for Automattic’s WordPress.com VIP, to learn how to make open source work for your publication. We’ll discuss whether WordPress is the right fit for you, how to assess other options, and what steps you need to take if you’d like to make the switch.
Most of the people attending had been to at least one of my other sessions, so it was a quicker review of the slides and then more of a general Q&A session. A lot of the questions revolved around the different types of hosting, where you should go for support, etc.

You publish with WordPress, are comfortable with editing theme templates and making basic CSS changes, and you’re ready to take your site to the next level. Join Daniel Bachhuber, code wranger for Automattic’s WordPress.com VIP, to learn what you need to know. We’ll discuss topics like version control, performance and optimization, debugging, and other development best practices. This session will be geared towards the tech-savvy with a practical knowledge of WordPress.
It ended up being a little less ambitious. We started out with (the importance of) setting up a local environment, reviewed what makes a plugin, and introduced a few project ideas. Between a dozen and two dozen students attended; for almost all, the information was completely new.
The most important note on this subject: there are lots of jobs available.
Also, come hit us up with WordPress questions at our Happiness Bar!
Session notes are below the slides.

So, you’ve heard of WordPress before, possibly used it for your personal portfolio, and want to learn everything there is to know about it. Well, everything we can cover in a hour at least :) Join Daniel Bachhuber, code wrangler for Automattic’s WordPress.com VIP, as we cover the WordPress interface, key concepts like themes, plugins, PHP and MySQL, and how to choose a good web host and design for your site. This session will be geared towards those with limited familiarity who want to learn more.
It was a quick introduction to the WordPress project, key terminology you’d hear, and then a tour through the WordPress admin. The room was packed with maybe 30-40 people which was sweet. Tomorrow is “Hacking WordPress in the Newsroom” and Tuesday is “Making the Switch to WordPress.”

Please post any questions, bug reports, feature requests, etc. in the WordPress.org forums. If you want to contribute code, I’m eyeballing co-author management in Quick Edit and guest author functionality for v2.7.
For WordPress.com VIPs, this update has already been deployed to the shared plugins repo.
]]>Feeling better already? In this session, we’ll touch on everything from debugging to best practices to coding standards to version control to performance and optimization. You’ll hear the insights WordPress.com VIP shares every day.
Session notes are below the slides.

My name is Daniel Bachhuber and I work as a code wrangler on Automattic’s WordPress.com VIP team. We work with publishers like TIME, The New York Times, TechCrunch, Cheezburger, and more who use WordPress at scale.
The point of this presentation is to cover the things you mostly learn the hard way. Now you can learn them the easy way. Some of these topics were covered by Erick’s talk this morning… I’ll quickly review.
Why is this talk important?
Set yourself up for success
→ WP_DEBUG opens your eyes
Why:
WP_DEBUG does the following:
Slide: Show the whitescreen of death and then with WP_DEBUG on
“5 ways to debug WordPress” and “Debugging WordPress” - Andrew Nacin
→ Know thy codebase; when in doubt, ack
Why:
Use ack to quickly search your code base. It’s better and faster than grep.
Slides: Different usages of ack
Some usage:
Slide: Files you might commonly need to reference
[sourcecode language=“php”] // Some of your functions for sanitizing input // and formatting output, including esc_*(), // sanitize_*(), and capital_P_dangit() wp-includes/formatting.php
// Post manipulation, including // register_post_type(), get_posts(), etc. wp-includes/post.php
// Reference for modifying the Query wp-includes/query.php
// Functions you can override in your theme // or plugin wp-includes/pluggable.php [/sourcecode]
→ Install Debug Bar, it’s like Firebug for your WordPress
By default, the Debug Bar gives you information about the execution of the page.
Slide: Debug Bar by default
Define SAVEQUERIES to do the following:
Slide: Debug Bar with SAVEQUERIES
Debug Bar Extender adds some profiling information
Slide: Debug Bar Extender
→ Use version control and write descriptive commit messages
Version control is an awesome historical record of your project. SVN and Git are two popular types of version control, the former is used for the WordPress.org project and the latter was popularized by Github, a social coding site.
Version control gives you these advantages:
Slide: What a diff on Github looks like
What makes a good commit message:
Slide: What good and bad commit messages look like
Neat example of Wired Magazine accepting contributions via Github for an article.
Let others love your code too
→ Don’t modify core. Do extend it properly.
Why: your changes will get blown away, you won’t upgrade regularly, and the sky will fall on your head.
WordPress has an extensive system of action and filter hooks you can use to extend functionality and modify values. It’s the “window into WordPress”.
Sometimes you will need to do ugly workarounds. Don’t worry, it’s better than modifying core.
Slide: Filter workaround for core problem with custom statuses
If you find something limiting in the API, open a Trac ticket!
→ Prefix all the things
Prefix all of your functions and variables to avoid collisions; better yet, write your functionality into classes.
“In WordPress, prefix everything” - Andrew Nacin
Slide: Example of non-prefixed vs. prefixed
→ Coding standards are standards for a reason
Why: You’re not the only one working with your code. WordPress’ coding standards are a common language for others to understand your code.
Slide: The coding standards I run into most commonly with VIP
There are so many
→ Use the WP_HTTP class for remote requests
The transport mechanisms available for WordPress to use vary from server to server, especially if you’re releasing code to be used on shared servers. That’s why you should use the WP_HTTP class… it uses the best mechanism available.
Slide: different HTTP functions you can use
→ Find the proper action for your action
‘init’ isn’t everything. Invest some time into finding the right action to avoid bugginess later. Make sure all order of execution code in your functions.php and/or plugin is hooked into an action.
‘after_setup_theme’ is a good place for:
Slide: after_setup_theme
‘wp_enqueue_scripts’ is where you should enqueue all of your scripts and styles. Define a dependency if you need to. Enqueuing on ‘wp_print_styles’ may cause issues.
You can also minimize HTTP requests by only enqueuing them on the pages you need them.
Slide: wp_enqueue_scripts
Others:
Don’t trust strangers
→ Properly handle your user-submitted data
Validate that the data is what you need. Follow a whitelist approach
Sanitize what the user has submitted:
Slide: All of the core sanitize functions you can use
Make sure you sanitize your data at the point of accessing it.
Slide: Sanitize at the point of using your data
“Data Validation” in the WordPress.org codex wp-includes/formatting.php includes all of the functions
→ Escape data on output
There are different escaping functions you can use to protect your HTML. Make sure your HTML is what it’s supposed to be:
Slide: Different escaping functions you can use
Slide: Escape at the point of printing data
→ Nonce (numbers used once) to make sure people are who they say they are
Use Nonces for security (XSRF) and checking user intention (Edit vs. Quick Edit)
Nonces are temporary (24 hours), tied to specific users (if authenticated) and actions, and in some cases, referrers.
Slide: Adding a nonce to your form, and then checking for it on form process
“WordPress 2.0.3: Nonces” - Mark Jaquith
→ When you must use SQL, $wpdb->prepare()
$wpdb->prepare() properly escapes strings.
Use %s and %d depending on whether you’re using a string or a digit; quote marks will be auto-added for strings.
Slide: Usage of $wpdb->prepare
“Protect queries against SQL injection attacks” in the WordPress.org codex.
Performance matters — make it fast
→ Know your Query
query_posts() should be used in one and only case if you need to modify main query of page. It sets a lot of global variables and will lead to obscure and horrible bugs if used in any other place and for any other purpose.
get_posts() is very similar in mechanics and accepts same arguments, but returns array of posts, doesn’t modify global variables and is safe to use anywhere.
WP_Query class power both behind the scenes, but you can also create and work with own object of it. Bit more complex, less restrictions, also safe to use anywhere.
Slide: Different ways of the Query
WP_Query actually does four SQL queries
Slide: How you can disable extra queries on the Query
Slide: How you should modify the query
“When should you use WP_Query vs query_posts() vs get_posts()?” “You don’t know Query” - Andrew Nacin
→ Cache expensive data
If a given set of data takes more than ~200 ms to generate, you should cache it.
WordPress has three different types of caching:
→ Cache remote requests, or offload to the frontend
Remote requests are when your code has to pull some data from somewhere else. Retrieving that data can be expensive. Uncached, every millisecond the remote request takes are milliseconds added to the page load. And these are for every visit to your site.
Sometimes, we can rely on the API to be fast enough that we can just request and cache on the frontend.
Slide: Remote request on the PHP end
Oh, but we actually need new live data all the time. Trying to invalidate the cache and repopulate all of the time is bad news bear. Let’s just move this to some Javascript on the frontend
Slide: Offload the request entirely to the frontend
The best thing you can do is read others’ code and share your own. If you have a friend or colleague you can match up with, swap code and leave feedback for each other. It’s tremendously beneficial for both parties. A good WordPress developer never stops learning.
]]>When exporting, the script gives you a summary of what will be included in your export file.
For importing, it would be nice if the script pre-flighted your data and told you how many total posts were to be imported, whether new tags were going to be created, identified the custom post types in your export file that were to be rejected by the site, etc.
Also, we should figure out a better way to make sure all of our internal scripts are regularly open sourced (and synced to most recent versions).
]]>
Today, Miles and I skiied Alyeska for the first time. Alyeska is a resort about 40 miles south of Anchorage, Alaska. If you’ve ever seen a Warren Miller or Matchstick Productions Film, you probably are aware of Chugach Mountain Guides which operate out of the same area.
The snow is pretty much the best I’ve skiied in my entire life. The mountain received 34 inches on Monday, 30 inches on Tuesday, and then about 6 inches per day since. That is a lot of snow.
We did 25.5k feet of vertical in 20 runs all over the mountain — and had fresh tracks most of the day. Tomorrow, the goal is to ski from 10:30 am to 9 pm and break 40k feet of vertical.
]]>From Mike:
Consider the audience when you write a commit message. What is that audience? It’s at least two groups of people:
- Your coworkers: You’re telling everyone else what you did. Commit messages are one to many, asynchronous and textual. Sounds like email, so write the commit message like an email. The first line should be a descriptive subject. The next line should be blank (as a separator). Then comes the body of the message. Write everything as if you’re describing it to Nikolay.
- Your future self: Think back on the times you were fixing something and needed to understand why an old commit was made. How often was the commit message useful? How often was it your own useless commit message? The commit message should say what the problem was (repro steps?), how you fixed it (briefly – the code itself gives more details), and why you changed what you did. That way the shiny pants people of the future have the information they need to decide if they can safely change your code.
From Matt:
I think as a company we need better commit messages. Very often in our messages we say what is happening but not the why, and most importantly the context of the change. I’m going to pick on this changeset, but you could really pick almost anything:
[link to changeset]
4 lines changed, with the message:
“Fixing incorrect $blogid variable, should be $blog_id. Check if $current_blog is === false before trying to reset it.”
First a good thing: it’s a multi-line message, which is nice. Commit messages can use as many lines as you like, and be as verbose as you like.
However if I were to come across this changeset 3 years from now, say if I were debugging a similar area in the code, I’d have no idea why this change happened. The message might as well be blank, since it doesn’t really say anything I couldn’t tell in 2 seconds from looking at the diff. Some useful context would be:
- What bug did this code cause? (This is most important.) Why change it?
- Is there a relevant discussion, either on a P2 or in Trac?
- Who was involved in the fix, IE who else would have context for this change either because they reported the bug or reviewed the fix.
From Lance:
]]>Good commit messages are my gospel. The actual syntax should vary by context, though. For theme commits, for example, we always start with the theme name up front.
But, the goal of giving context and pointing to related items is key.
I personally don’t think long commit messages are better. Instead, point to a Trac ticket or P2 post with all the gory details.
It’s 28 degrees out and I’m frozen solid. The wind is most brutal when all you’re wearing is long johns.
]]>At WordCamp Phoenix on February 25th, I’m presenting “Mastering WordPress Development.” The title lends itself to a number of discussion topics, possibly including coding standards, how to perform migrations, writing bin scripts to manipulate lots of data, participating in open source projects, how to review your code, common mistakes we see at WordPress.com VIP, etc. If you have opinions as to what I should cover, I’d love to hear them in the comments.
On February 27th, Mike Bijon and I will be taking the Portland WordPress Users Group through using Git (and SVN) for version control and working within a team.
At CMA NYC March 18th through 20th, I’ll be leading three sessions (one per day):
Shaun, Erica, and I will also be hosting a mini-Happiness Bar for a few hours on Monday to help attendees with all of their WordPress questions.
Sweet!
]]>Highlights from the week include:
Great conversations with everyone on the team. Our support workflow is really hitting its stride, and I think we have a much better sense now of where we want to take our internal tools.
Relaunching LIFE Magazine on WordPress.com Tuesday night at the steak house. When I pulled my laptop out at the dinner table, I thought the waiter was going to ask me to close it. Instead, he offered a wifi connection.
Figuring out how to “fix” rewrite rules for VIPs. Now, to finish and test the implementation…
Sunset boat ride through the Miami harbor. Ultimate chill out session.
Lots of great food: Cuban, steak, sushi. I took a semi-break from veganism and allowed myself to eat meat one meal a day.
Awesome daily runs along the South Beach boardwalk, with a seven miler on Thursday.
All photos, except for the group shot on the boat, were taken with my fancy new Canon S100.

Each guide could have:
This idea has been around the block a lot, and I recently rediscovered it in a notes folder. I think guided signups would be super useful for photo blogs, small to medium size business sites, mommy bloggers, etc.
]]>I want to add the authors’ biographies to the end of each post.
Awesome… it’s pretty simple to do. Conceptually, what we need to do is load our co-authors, and then loop through printing the relevant information for each one.
You’ll want to put the following code snippet within The Loop in any template you’d like the bios to appear.
[sourcecode language=“php”] /** * Show multiple Co-Author biography fields at the bottom of a single post * This snippet should be placed within The Loop */ if ( class_exists( ‘coauthors_plus’ ) ) { // Get the Co-Authors for the post $co_authors = get_coauthors(); // For each Co-Author, echo a wrapper div, their name, and their bio if they have one foreach ( $co_authors as $key => $co_author ) { $co_author_classes = array( ‘co-author-wrap’, ‘co-author-number-’ . ( $key + 1 ), ); echo ‘
’; } } [/sourcecode]If you’d like other co-author details to appear as well, like their avatar for instance, you can modify the output within the foreach loop.
]]>PandoDaily is a brand new tech site started by Sarah Lacy, former senior editor at TechCrunch. From her announcement post:
We have one goal here at PandoDaily: To be the site-of-record for that startup root-system and everything that springs up from it, cycle-after-cycle. That sounds simple but it’ll be incredibly hard to pull off. It’s not something we accomplish on day one or even day 300. It’s something we accomplish by waking up every single day and writing the best stuff we can, and continually adding like-minded staffers who have the passion, drive and talent to do the same.
So… this sounds like a newer, better, and fresher TechCrunch starting from scratch. And she’s recruited Michael Arrington, MG Siegler, Paul Carr and Farhad Manjoo as regular contributors. Props to Sara Cannon for pulling off the design.
Grist, a non-profit environmental news publication, is near and dear to my heart. It’s why I’m on the technology side of publishing instead of photographing in the third world. In summer 2007, I worked an awesome web production internship where, in exchange for a bit of copy and pasting into the CMS, I had the freedom to explore publishing on the web and to start developing my skills. That was back in the days of Bricolage; Grist has since been on ExpressionEngine. Props to Matt Perry and Nathan Letsinger for making the switch happen (and to the Otto and Nacin show for their support).
Want to help publishers kick ass with WordPress? Come join my team — we’re hiring.
]]>What am I missing?
Obviously most publishers know most of these by heart, it’s key to running a successful business. What’s more interesting is to use this type of data as a baseline for experimentation.
It’s important to remember the difference between creation and optimization, and how data can be used for each.
]]>I’m terribly inexperienced at this, so don’t poke fun, only offer good suggestions for improvement…
[sourcecode language=“bash”] #!/bin/bash
# Open all of the requisite applications echo ‘Opening Chrome’ `open /Volumes/Macintosh HD/Applications/Google Chrome.app/` echo ‘Opening Skype’ `open /Volumes/Macintosh HD/Applications/Skype.app/` echo ‘Opening Sparrow’ `open /Volumes/Macintosh HD/Applications/Sparrow.app/` echo ‘Opening Linkus’ `open /Volumes/Macintosh HD/Applications/Linkinus.app/` echo ‘Opening Adium’ `open /Volumes/Macintosh HD/Applications/Adium.app/` [/sourcecode]
]]>For the first, Annie and Jacob have been eating vegan for about a month and a half now. Jacob convinced me to switch last night when he made an amazing grilled pizza with mushrooms, onions, peppers and a tahini sauce. I’ve seen it’s possible to eat well while eating vegan, and I’m pretty sure you end up eating more vegetables too.
For the second, I’ve had a policy for a while where I turn my computer off at end of the work day at PIE. This naturally extends to not getting sucked into work email at home either — and the easiest way to do so is to remove the account from my phone.
Life hacks for a deliberate life.
]]>Thanks to those in the forum who provided feedback and special thanks to Russell Heimlich for his contributions with sortable authors. If you feel like giving back, there are a few tickets open we’d love patches for. In particular, guest bylines would be pretty neat. I have a possible direction you can go if you’re looking for inspiration.
For our WordPress.com VIPs, this release will be available in the shared plugins directory in just a moment.
]]>One partial workaround is to search taxonomy terms against your query and include those in your results. I did this previously with the CUNY J-School’s tech website:

You can have something similar with the code snippet below.
[sourcecode lang=“php”]<?php /** * Show matching terms for a given search query * Best placed under the_search_form() in search.php */ global $wp_query; // Only show the matching terms on the first page of results if ( $wp_query->query_vars[‘paged’] <= 1 ) { $args = array( ‘search’ => get_search_query(), ‘orderby’ => ’none’, ); // You can change the first argument to an array of whatever taxonomies you want to search against $matching_terms = get_terms( array( ‘post_tag’, ‘category’ ), $args ); if ( count( $matching_terms ) ) { echo ‘
Currently, I’m looking for people who’d like to help me put this together. Interested? Let me know.
]]>For the longest time (since freshman year, early 2007), I’ve been dedicated to Google Reader. I briefly switched to Fever and switched back because the mobile interface wasn’t as functional. Given this whole new Google+ thing, I have less and less confidence of serious, necessary product innovation happening with Google Reader.
Currently, Reeder, an excellent app for both Mac OS X and the iPhone, is my primary interface for Google Reader. It’s lovely, syncs well, and is amazingly integrated with other services. Click a button, choose a service, presto.
I’m subscribed to a total of 568 subscriptions, everything from friends to thought leaders to product blogs to aggregators. Surprisingly, not a lot of mainstream news organizations. My subscriptions are bundled into folders: A-List, B-List, B-High (pretty much Techmeme and Mediagazer), and then by topic (Media & Journalism, WordPress, etc.) or context (friends, Automattic, projects, etc.).
A fair number of people I know have switched away from using an RSS reader in favor of Twitter (example), under the auspices that “if the news is that important, it will find me.” I understand the value of serendipity — I also want to be deliberate about the information I consume. I zero my subscriptions on an almost daily basis.
A reader is for engaging with information; it’s a tool for consuming, managing, and using knowledge. In addition to presenting new information to consume, I also want it to pay attention to, infer insights from, and make accessible in an evergreen matter what I’ve already read. For me, this presents the pinnacle of personal information management — an intelligent tool that can reinforce what I already know and help guide me towards what I need to know.
Dave Winer has been thinking about this for much longer than I have — read him first. Basically, unread counts and the rigamarole associated with subscribing to a new feed are the two big deal breakers for RSS readers. In addition to fixing this, I think the new reading interface should:
That’s what I’ve got. Let’s start iterating.
]]>Short of editing core WordPress code, is it possible to display the multiple authors in the site’s RSS feed?
Of course there is! From the source code, we know the RSS feed template uses the_author() to display the post’s byline information. Furthermore, the_author() echoes get_the_author() which is a filterable function. Filters allow us to programmatically change values used in a function. What we need to do is write a short snippet to produce the co-authors byline when an RSS feed is requested and Co-Authors Plus is activated.
The snippet is as follows, and can be placed in your theme’s functions.php file or a standalone MU plugin.
[sourcecode lang=“php”]/** * Co-authors in RSS and other feeds * /wp-includes/feed-rss2.php uses the_author(), so we selectively filter the_author value */ function db_coauthors_in_rss( $the_author ) {
if ( !is_feed() || !function_exists( ‘coauthors’ ) ) return $the_author;
return coauthors( null, null, null, null, false ); } add_filter( ’the_author’, ‘db_coauthors_in_rss’ );[/sourcecode]
]]>Based on recommendations from friends, we’d like to see Chefchaouen and Fez. Ideally, we’ll bus from Tangier to Chefchaouen tomorrow evening. I’ve read mixed things about how often the buses are, so it might be Friday morning instead. We’ll spend a day or so in Chefchaouen (unless it’s absolutely stunning), and then bus onward to Fez, where we’ll stay until Monday. Monday morning, we’d like to get an early train back to Tangier to catch our 3:05 pm flight (EasyJet 7870) to Madrid.
Chefchaouen notes:
Fez notes:
A final note: No laptop this trip, although I have an international data/SMS plan for my phone. I’ll try to check my personal email account a couple times per day, and will be available by SMS whenever.
]]>Now, an overnight flight to Madrid where Michelle awaits. See you on the other side.
]]>It would be neat to pull in responses to or retweets of a publicize action back into the context of the original post. Furthermore, those external reactions should be ingested in a structured manner, and the comments iA should reflect the nature of type of reaction.
This isn’t a new idea as it’s been done before but it’s still something to be vastly improved.
]]>One way we could get there with the mobile app is by offering a bookmarklet to auto-fill a new post, a la Tweetie.
]]>For a while now, I’ve been of the mind that innovation at the intersection of news and technology is stuck. Most likely at this. The pipeline is broken as far as I can tell. Even if there were a miracle and every journalism program had a “news-coder” program, it would be two or three years for students to make it through.
This is unfortunate. Media companies are technology companies, and have been as long as they’ve existed. David Cohn tried to write about this too. I remember back in the day when newspaper companies spent millions of dollars to build better printing presses. It was a source of pride to own your own press. Transitioning from black and white to color, don’t you remember that? Color ads scored more money than the black and white ones.
On the web… well, the web isn’t a priority. Print makes the money, therefore print is the priority. For any newspaper, magazine, or print publication, until these priorities switch, you’re dead in the water. You are a ripe target for disruption.
Your new priority: you are an arbiter of information whose mission is to empower people to make better decisions.
But I feel like this is known, and we’re in a waiting period to see all of this play out. From here on, it’s just hard work needing to be done. If you’re at a loss of ideas, I have plenty you can steal.
I need to raise money so I can short the education schooling system.
It’s interesting that in Mars Edit and WordPress for iOS, the tags field is right under the title, like this:

This puts a greater level of importance on the tags field than the main content area (with the title as the most important for that matter). Yet we don’t do much with tags. Clay Shirky has an awesome piece on this matter called “Ontology is Overrated”.
Aside: Actually, as I spent ten minutes skimming through his piece, I realized it didn’t have much to say about tags not being used. It’s a great piece nevertheless.
I use tags for organizing my relationship to the world. For instance, here are all of my previous engagements with Clay Shirky. It’s pretty sparse, and doesn’t include, for instance, when I went over to his holiday party last December with Cody and talked to his cute niece most of the time. Here’s what I think of Portland, in the form of pictures, embedded tweets, beer, and the outdoors. Here’s all of the times I thought it worth posting that I went running.
There’s something that can be done with this structure around my data but I’m not quite sure what it is yet. One thought is to have a chart appear at the top to show month by month how many times I posted on the topic. If information companies tagged pieces with a particular story term, they could track when they were producing an abundance of coverage vs. no coverage at all. Another thought is that it would be neat make all of the content associated with the topic accessible on one page.
I think the information architecture would depend on the type of topic. For instance, if I linked you to my running tag, it would show a log of every time I ran, my most common routes, average pace, etc. If I linked you to my music tag, it would give you access to my listening history, and let you browse my collection. And so on.
I use tags to structure my content because I want WordPress to be my personal data store (Google search for an exploration of what that means). In short: I’m building a repository of data I’d like to be infinitely reusable.
I get to contribute to WordPress.com under the auspices of Team VIP. On Twitter, I love how I can one-click open a new posting window by hitting “n”. I want that across WordPress.com. I also want WordPress.com to properly respect post formats.
It’s terrible annoying that every app and every website has taken it upon themselves to reinvent which keys should be bound to which actions. Sparrow, I’m looking at you with your “Spacebar opens the email in a new window instead of scrolling it.”
When I accessed my parent’s wifi network this evening, an airline receipt I accidentally command p’ed three weeks ago was finally delivered to the printer, and made physical. Semi-sentience in the real world.
Editing time.
One last thing. I think I’ll do a post about content analytics soon, especially because Edit Flow v0.7 is nearing release.
]]>Before I arrived, I heard Budapest described as “Little Paris.” Now we both know why.

I’ve been thinking about moving my website for a few months now, ever since I joined Automattic. WordPress.com is a piece of software I use every day. By dogfooding it with my personal blog I get to experience it much more like day to day users experience it. I get to see where the software is working and where its pain points are, and improve it where I can. Plus, I get to benefit from the new features we launch on a regular basis (like gorgeous photo galleries).
This morning, I took the plunge. Moving my content over was no problem. I then activated the Manifest theme and spent a couple hours customizing its base design with custom CSS.
And here it is. Now, back to the my real work.
]]>

This is a quick post I’ve been meaning to do about the work we did this year on the ONA11 conference website.
Background: last year, I was late on getting a conference pass and ended up volunteering for an entire day in the student newsroom. ONA’s student newsroom produces stories, video, and other coverage related to the conference. I had so much fun that I volunteered to do it again this year. I planned to work on it over the summer, but 90% of the work ended up being done in the last week.
The goals for the website varied depending on the context:
With this in mind, we worked on making the website dynamically reflect these needs. It was helpful, although somewhat distracting from the experience, that I was working on the website during the entire conference.
What worked this time:
Next time I’d like to:
Lastly, I have one more idea I’d like to pitch: a way of indicating who you want to meet at the conference. Every attendee that registers get access to a page on the website listing every other attendee. Then, they can go through and indicate whom they want to meet at the conference. It’s a double win; you get to notify who you want to meet that you want to meet them, and you get to see in advance who wants to meet you.
]]>

WordPress Multisite is a way for using one instance of WordPress to host as many sites as you’d like. Originally known as WordPress MU, the multisite functionality was merged into WordPress in WordPress 3.0.
Danger, danger, danger! You’re entering the realm of advanced WordPress user and, by editing files, the database, etc. you can potentially break your site so it will cry. Make sure to back everything up before you get started. And know that you’ve been warned.
WordPress Multisite is especially useful for those who have to administer multiples sites. If you meet all of the prereqs, it can make keeping WordPress up to date, installing new functionality, backing your data up, etc. a breeze. Instead of having to manually update each website you’re responsible for managing, you simply update one.
There is documentation you can follow in the WordPress.org Codex. Basically, what you need to do is configure DNS if you plan to use subdomains, make a change to your wp-config.php file, change .htaccess values if you’re using Apache, and then run through the guide in the admin. Boom, you’re done.
Converting a single instance of WordPress to WordPress Multisite creates and alters database tables, and isn’t recoverable.
Hosting a lot of websites with WordPress Multisite means you should scale the resources available to WordPress accordingly. Otherwise, all of your sites will be slow.
Plugins and themes are installed once, so any changes you make are incurred for all of the users across your site. For this reason, if you’re using any WordPress.org or premium themes, you should make all modifications to the theme as a child theme (or, better yet, just CSS changes).
You can make some themes available to all sites, and other themes available to just specific sites.
If you plan to install a lot of themes, it would benefit you in advance to establish a scheme for storing them (e.g. setting up /wp-content/themes/woothemes/ and /wp-content/themes/wporg/)
Usernames are unique across the network. If you’ve set up a multisite instance for all of your clients, create usernames as firstnamelastname or similar.
Network activating plugins means they’re activated across all the sites in your network, functionality is available by default, and it’s not possible for the site admin to deactivate it.
WordPress Multisite isn’t magic, it’s technology that makes your life awesome.
Use a plugin like Restrict Multisite Plugins to make certain plugins conditionally available to sites.
Map custom domains to sites on your network with the domain mapping plugin.
When importing content with embed codes into a site on your WordPress Multisite network, make sure to disable the KSEs filter. As of WordPress 3.2.1, you need to do so with a special filter (which didn’t exist before 3.2).
You may want to disable some of the email notifications that go out.
Keep your users from needing to modify theme template files with the WordPress.com Custom CSS plugin. This is the same code that formerly ran on WordPress.com, is super awesome, and keeps a revision history of all your changes.
Configure your admin bar to include network admin links for super admins so you can easily access management functionality. You can also expose additional functionality for your users (e.g. custom CSS) where it makes sense.
Write your short plugins to customize the admin interface, and put them in /wp-content/mu-plugins/ to have them automatically loaded.
Other useful management plugins:
What doesn’t make sense about the network admin UI?
What features or functionality would you like developed as plugins?
What features or functionality would you like included in core?
]]>WordPress Multisite - In a nutshell, how it works and why it will make your life infinitely more manageable. If we have a group of people who quickly get their heads around the basics, I’d also love to share tips and tricks for pimping a multisite instance. For instance, using plugins like Restrict Multisite Plugins and customizing your admin bar to give easy access to the network admin for super admins. (People I should bump in to: Emma McCreary, Kayleen)
Test-driven Development - WordPress doesn’t do it, and I’m terrible at it. I should find a mentor with fountains of knowledge. (People I should bump in to: Michael Fields, Than Taintor, Toby McKes)
WordPress for Publishers - More and more newsrooms are using WordPress for all parts of their workflow. From experience, I know that journalists tend tolerate crappy technology. I’d love to hear from users about their current frustrations and pain points. (People I should bump into: Joe Boydston, Toby McKes)
Dogfooding It - We love WordPress and sell to our clients, but a lot of us developers don’t actually use it on a regular basis. Why? How should we fix this? (People I should harass to no end: Nacin)
If you see me there on Friday, Saturday or Sunday, say hello! I look like this but with much shorter hair.
]]>The course was spectacular. Sweet Home is a gorgeous area to begin with. The race started with an open water swim in Foster Lake with the temperature at 70 degrees. Our bike segment then journeyed through pretty stellar countryside with only a few minimal hills. The run finished up with a quick out and back near the lake.
What I did right:
What I need to do better next time:
This triathlon was an incredibly enjoyable event for me. I’m looking forward to another (half Ironman, possibly?) when the season starts again.
]]>:%s/,|||,/=nr2char(11)/g :%s/,|||/=nr2char(11)/g :%s/""/=nr2char(21)/g :%s/"//g :exe '%s/' . nr2char(11) . '/","/g' :exe '%s/' . nr2char(21) . '/"/g' :exe '%s/"$//g' # add a :%s/^/"/g :%s/<br /><p><br />/</p><p>/g :%s/<p></p><p>/<p>/g :%s/<BR><br />/<br />/g :%s/<br /><p></p><p>/<p>/g :%s/<p><br />/<p>/g :%s/</p></p><p>/</p><p>/g :%s/</p><br /><p>/</p><p>/g :%s/<br /><p>/</p><p>/g :%s/<p><p>/<p>/g :%s/<P>/</p><p>/g :%s/</p></p>/</p>/g :%s/<br /></p><p>/</p><p>/g
Two more things: 1) Anyone who’s ever tried to tell you to use find and replace in bbEdit for large files is dead wrong. 2) College Publisher, you suck ****. ‘,|||,’ is not a valid delimiting character. Quit being malicious.
Lastly, if I’ve thought ahead, I would’ve tracked invalid markup against prevalence and date range. That would’ve made for a fascinating anthropological study.
]]>The real title: “WordPress isn’t good enough.” There are so many more things that can be done to make WordPress better. Which, was pretty much the essence of the talk.
Improve stability. WordPress should be stable, for anything that you’re doing. How many people have lost content and had to recover through revisions or going back through browser history? It doesn’t happen often, but it still does sometime. There’s a Google Summer of Code project to use local storage in your browser to back up your drafts.
Plugin compatibility. It should be easier to know whether your plugins are compatible with the latest version of WordPress.
Seamless updates. WordPress should update automatically. Many users are distributed amongst a few different versions of Firefox (3, 4, 5, and 6). With Chrome, the version you’re on is less apparent but you can still track it down. On Facebook, there’s no way for you to know which version you’re on. More seamless updates means faster release cycles and better improvements.
Ease of use. Introduce simpler ways to post content. “Telling someone what to do is not as good as making it obvious.” New users should be able to immediately create content.
Better media handling. WordPress needs to improve how it handles non-text content. In the pipeline are a drag and drop media uploader, and a new workflow for managing media content.
]]>“Each plugin speaks with it’s own voice,” says Wes. Sometimes they can produced cluttered and confused experiences for your users. The framework they’ve chosen as it relates to plugins is use, patch or build.
The Argo team decided to build a photo slideshow plugin that leveraged WordPress’ built in gallery functionality, and looked and worked as a standard slideshow.
Their functional starting point was the Slides for WordPress plugin. Wes downloaded and activated the plugin, and made basic presentation tweaks with CSS and Javascript. Unfortunately, there were other behavioral changes they wanted too. They thought about patching but then realized it would too much work. So they went around to rolling their own plugin.
Two improvements worth mentioning are conditionally loading images and Javascript. For the first, the problem to solve is reporters that like 60+ image photo galleries. If you load all of these images on page load, it increases your bandwidth costs and load time for end users. The solution is to reference the image URLs in a storage div, and then only load them when the user is getting close to viewing them. For the second, there’s a global variable on every page load for marking whether a WordPress gallery was included in the post. If so, the Javascript gets added to the footer.
Improvements included reducing the footprint of the plugin from 39k/895 lines to 8k/244 lines.
To make their content more engaging, Argo wanted it to make it easy for their reporters to embed rich media. Initially, this looked like Embedly or oEmbed but they didn’t want to cede control of what was embedded to the content provider.
Solution: A custom post type called Jiffy Posts. Reporters could create a new post with a title, short comment, link to the referenced media, and can include source attribution. Doing it this way, instead of having reporters embed rich media in the post, ensures there’s presentation consistency from post to post and content type to content type.
Ultimate takeaway: The decisions and opinions of plugin authors can directly impact the user experience of your website. Think about this more holistically, beyond just reviewing whether the code is clean.
The slides from the presentation are available on Slideshare and download as a PDF.
]]>Pay lots of attention to the hierarchy with page templates.
Think about how many files you’re loading into memory, and the overall footprint they end up consuming. You can track this down using xdebug.
Fundamentals:
W3 Total Cache has a debug mode that will show you what’s being cached on a request and what’s being missed.
Trick to debug on production:
define( 'WP_DEBUG', true ); // log to wp-content/debug.log, useful tests on production define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false );
WordPress.com VIP is the “best of both worlds.” Customers don’t have to worry about keeping servers up, but they have more of the flexibility that comes with installing new plugins, etc.
WordPress.com VIP clients include:
To think about the different types of hosting offerings, a typical basic dedicated server includes hardware, network connectivity, and electricity. Managed services include all of that, plus take care of your basic LAMP stack. WordPress.com VIP cares about everything plus WordPress, including caching, load balancing, upgrades and functionality.
When working with WordPress.com VIP, the process is probably a little different:
Code is a little different too:
When it comes down to it, the biggest different between WordPress.com VIP and self-hosted: you (have to|get to|learn how to) do it right.
Q: How do you do staging?
Chris: Often we’ll have a staging server in-house that’s client facing and/or use one of our five sites with the standard package as the pre-production site.
Q: Could you explain more about the lack of network admin?
Chris: WordPress.com is a multisite network in itself, so they don’t give you super admin access. If you want to set up a new blog, it’s a more involved process including requesting the site, configuring everything, submitting a theme for review, etc.
Q: Is customer code required to be licensed under the GPL?
Chris: I’m not sure. Licensing is definitely something to be discussed.
Q: What types of things does VIP support?
Chris: VIP support offers lots of support including theme reviews, plugin reviews, data migration. They don’t write code for you however. Any custom development should be done in-house or with a contracter.
Chris: “Working with the VIP team has added tons and tons of knowledge to my team.”
Other questions:
WordPress evolution from an enterprise perspective:
Conde Nast started migrating a lot of sites from Movable Type to WordPress in 2008-2009, and the total number has only been growing.
Hosting infrastructure do’s:
Carefully examine your site’s requirements and evaluate service offerings before deciding on a host
Give yourself at least 2 weeks for new WordPress VIP setups
This lead time requirement can sometimes be a deterrent for clients that want to get a project live on a quick turnaround
Give yourself additional time for VIP code and plugin reviews. Plugins that aren’t already in their set of accepted set can take a while
Leverage AMI’s for sites on Amazon Web Services
Use multiple regions for failover on Amazon Web Services
Use a Content Delivery Network (CDN)
Hosting don’t: Host multiple high-trafficked sites on the same hardware
Migration do’s:
Migration don’t: Forget your image assets.
Neat trick: If you don’t know whether all of your image assets were copied over, write a script to tail Apache/Nginx request log, watch for 404s, and pull the image over from the old environment if the request 404’s.
Development do’s:
Development don’ts:
Launch do’s:
Launch don’t: Keep .htaccess writable
]]>Common principles for web strategy:
Not often is there one sponsor for web strategy; there are generally multiple. Question how long your web strategy is going to be in place, and whether that’s an appropriate timeline. Thinking about why you’re doing it, vision and principles, and figure out what exactly you’ll do and how to measure it.
In determining which platform to deploy, or functionality to implement, Jay recommends having stakeholders list features and prioritize on a 1-10 basis.
A “domain architecture” map will help you understand all of the requirements by department, and how they interrelate.
Lafayette College has integrated WordPress in all aspects of their publishing.
Queen’s College in Australia has gone as far as focus their homepage entirely on prospective students. All other content lives elsewhere on the site, and is accessible after community members receive a login.
]]>At the time of this writing, the J-School has two WordPress multisite instances. One, at journalism.cuny.edu, subdomains of the primary domain, and various custom domains, offers managed websites for students, faculty, staff, and alumni. The other, CUNY Campus Wire, is managed hosting for CUNY student publications.
Post by email - Create new posts, let them be blog posts, galleries, links, etc., via email. Also, offer the ability to respond to a comment thread by email.
Search across all sites in the network - Have a dedicated URL like http://search.journalism.cuny.edu/ to run a query across all sites in the network, and offer faceted filtering to limit result types to specific content, authors, topics, etc.
Dynamic homepage for logged-in users - For J-School community members, the homepage becomes their dashboard for the school, including assignment information, upcoming events, discussion notifications, etc.
Ingest users’ social media content - Pull in and make available tweets, Flickr photos, video, and other social media from WordPress users. Offer BuddyPress profile fields for users to enter their identity information or, better yet, allow them to authenticate against the website using their third-party accounts. Use this data to build features like a realtime map of where community members are based on geo-tagged tweets or Foursquare checkins.
Community tagging - Any user of the network can suggest tags for a content object, including people, topics, and places.
Contextual documentation based on Tech website content - In the WordPress admin, replace the generic help tab documentation with custom documentation from the Tech website. Optionally allow users to create a new support ticket from the WordPress admin.
Soundslides WordPress plugin - Make it easier for students to publish Soundslides projects by allowing them to upload publish_to_web projects through the admin and embed with a shortcode.
Take a screenshot of each website homepage once a month - Offer a visual archive of how sites are evolving over time.
Network usage stats plugin - Track usage across the network. Data points like:
Total number of sites and users
Posts published, media content uploaded
Links used per post, by site and globally
Total embedded rich media
Users active within the last week
Number of sites using a given plugin or theme; see which is using what from the network admin
Distribution of custom CSS modifications by site, possibly correlated to theme
Most popular CSS property for custom CSS modifications
For the last few months, we’ve spent a significant amount of time revamping our tech website. The focus now is producing documentation on every subject the team deals with, but eventually the vision is to have the website be the primary way for clients to access resources and interface with the tech team.
CUNY J-Camp is the brand for the J-School’s continuing education workshops. We launched a redesign in June 2011 that is well-positioned for additional improvement.
Officially, my title at the J-School was “Digital Media Manager.” I always introduced myself as “the internet guy at the J-School”, and the job included everything from server admin to designing print ads to managing digital media…
Published in May, Changing NYC showcases Census stories from Interactive II and Craft II J-School students. It was a joint project and includes audio, photo, video and live coverage.
One of the significant challenges with this site was that, despite the Census being the overall theme, there were few threads between the stories. Furthermore, all stories needed to receive generally the same weight; no stories could be more “important” than others. The solution was to create three broad buckets to place the content in, Between the Numbers, Moving In/Moving Out, and Neighborhood Anchors, and then randomize the display order of the stories. Fortunately, with the grid view for theme landing pages, I think it worked out alright.
From a design perspective, I wanted to make the site easy to navigate laterally and allow the reader to quickly focus on the content. I have three favorite features:
CUNY J-Camp is the J-School’s continuing education program. With the redesign of the site, the primary goal was to make it much easier to access and register for the variety of workshops offered. Secondary goals included educating new visitors on CUNY J-Camp, and making it much easier to stay in the loop about upcoming opportunities.
The WordPress themes for both Changing NYC and CUNY J-Camp are available on Github.
]]>#18031 Add a “Network Admin” link to WP Admin Bar
Currently on a multisite instance, the super admin must first navigate to the dashboard (using a link on the left in the admin bar) and then use a dropdown menu all of the way on right of the dashboard that requires a click to access the Network Admin. In short, this is frustratingly complex; there should be a way to easily access the Network Admin from the admin bar. I propose we add a “Network Admin” link for Super Admins in the account dropdown. Optionally, we could also add sub menus to the primary sections of the Network Admin.
#18082 Reset screen options button
It would be nice to have a “Reset” button in screen options to restore any given admin view back to the factory defaults.
#18160 Auto-suggest usernames on views for adding user to site
In a multisite network, it’s often difficult to try and remember usernames, or a pain to search the users table, and then copy and paste the username you’ve found into the window with the form. Furthermore, site admins have no access to a global table of users to search and add from. If we can solve the scaling issues, it would be much better to be able to auto-suggest usernames when a site admin or super admin is adding a user to a site.
#18161 Bulk action: Add user to multiple sites
Currently, to add a single user to multiple sites, the super admin has to edit each site, add the user to the site, and then go on to the next site. To improve this workflow, it would tremendously useful to be able to add a single user to multiple sites in the network admin.
#18163 Include more usermeta fields in the Network Admin’s “Add User” view
The view for adding a new user in single site instances includes many useful fields (e.g. first name, last name, a checkbox for whether the user should be emailed the password, etc.). We should replicate this in the network admin to keep the super admin from having to edit each individual profile.
P.S. If you can see this blog post, you’re reading it from a brand new server powered by Rackspace Cloud. Galleries didn’t make it in the import but I’ll fix those shortly.
]]>Just over a year ago, I decided to pack up almost everything I own and move to the big city. I had just received an offer from the CUNY Graduate School of Journalism to work as their digital media manager, the perfect opportunity to hack at both education and journalism. Plus, New York is the nexus of what’s happening with media and technology. So I made the plunge.
And it’s been a really fun ride. The gig at the J-School fit like a glove, and NYC is one of the most vibrant cities on earth. At the J-School, I was given tremendous freedom to explore what’s important for moving journalism education forward. On a daily basis, I’ve done everything from server administration to development to frontend design and implementation to working with students to teaching workshops and classes. Being able to develop a broad range of skills and stretch my mind in different ways is one of the things I value most. Working at the J-School has provided that pleasure.
It’s time to move on to what’s next. On the 30th, I’m flying out of NYC on a one-way ticket. I’m an Oregonian at heart, and need quick access to my outdoors. August 1st, I start a new gig with Automattic’s VIP/media services team, joining awesome and super smart people like Mo, Raanan and others I haven’t had the pleasure of chatting with yet. VIP/media services works with large-scale publishers of all types using WordPress in a variety of ways. I think it’ll be a wonderful fit; most of the work is very similar to what we did with CoPress, but with a bigger playing field. I’m hoping there’s a lot of time for product development too.
Oh yeah, the other big reason for the switch: Michelle is moving to Spain for a year. She’ll be teaching English in the small town of Toro. I don’t think I’ll be there the entire time, visas are hard to come by, but I’m definitely going to visit for extended periods of time. Considering Automattic is a globally distributed company, I’m super tempted to live and work in a new country every month.
To CUNY, one final thought: your competition isn’t NYU or Columbia, it’s Skillshare and General Assembly. Education is being atomized just like news has been atomized; the time-based degree is just as outdated as the article. Like newspapers, you’ll have to radically reinvent your production methodologies to create information products that are relevant and useful to a now perpetually-changing society. The investments you make into your students is your greatest asset; they can become your best teachers, and it’s your charter to make that happen.
Programming notes:
Our intent is to stay in Jarabacoa for Thursday and Friday night. During the day on Friday, we’d like to do something active; this looks like hiking or canyoneering at the moment.
Saturday, we plan to head to the beach for a couple of days. This may mean taking the rental car back to Santo Domingo and a bus to Punta Cana, or keeping the rental car and driving further to Samana and Playa Bonita. Sunday, I’d like to get a few dives in.
On Monday, we’re headed back to Santo Domingo for an evening of music and food, and sightseeing the following day. We fly back to NYC Tuesday evening.
That’s the rough itinerary; changes obviously tk. I don’t plan to have any access to email while I’m down there, so the best way to reach me is by text: (971) 998-5407.
]]>As we lost staff to cutbacks over the years, assembling our content into finished products was taking a larger and larger percentage of our time. Simply processing press releases seemed to suck up significant portions of editors’ days. No one wanted to be in this situation, but our infrastructure for moving content demanded it. We were trapped.
[…]
As the newsroom has grown comfortable with Docs, it is becoming more efficient (links and headlines, for instance, travel from Docs to WordPress) and we are shifting staff members from production to content creation. We knew we had a winner in Docs when we had a major election story with two reporters in the field and an editor in the newsroom, all working simultaneously on the same breaking story, adding content, seeing in real time what each was adding, talking to each other through the chat function and responding with updated information. Fast, simple, low cost.
Lauren Rabaino interviewed Will for MediaBistro to get the full details on how it actually works:
Matt Thompson, in a piece for Poynter about why content management systems matter to journalists, gets the last word:
We’re beginning to understand that a CMS — every CMS, open-source, enterprise, or otherwise — requires continual investment and development. No matter how small or large your organization is, your content management system has to develop to accommodate a digital news environment that changes dramatically from year to year.
[…]
Because it makes no sense to spend a month of training on a system that’s going to change in a year, we have to use content management interfaces that are beautiful enough for users to grasp intuitively.
And because we need to develop fast, we have to borrow tools and ideas from the world of open-source software to make our content management ecosystems better.
Finally we’re getting somewhere. Good investments pay dividends.
]]>Previously, you could associate multiple email addresses, including Google Apps email addresses, with a single Google Profile. This has been extremely useful, especially for using a product like Google Groups.
Their recent infrastructure change reversed all of this. Specifically, I use danielbachhuber@gmail.com to log into my Google services, but use d@danielbachhuber.com and other email addresses with my Google Groups. Because the Google Apps email addresses can no longer be associated with my primary Gmail account, I can no longer participant in the myriad of Google Groups I’m a part of. Furthermore, I have no idea where else this problem is going to manifest itself.
Google won’t ever get social because they’ve just fundamentally broken the concept of one login for multiple identities and contexts. As strongly as I am against it, this is what Twitter and Facebook are doing right.
]]>At the end of March, I embarked on a personal initiative at the J-School to quantify as many of our processes as possible. My working thesis: if we can generate enough data about a system, and have a framework to understand it, we can be far more effective in what we do. Quite possibly way over 5-6%.
My motivations to blog about this are largely because I’m making this up as I go along. I’d like to regularly publish metrics we produce, how we interpret those metrics, what actions we take, and the results that come from our actions. If this initiative incurs the effectiveness increases I hope it does, there will be lessons others can steal.
Our most active spreadsheet right now tracks how our web team executes projects. Specifically, these data points:
Tracked projects range between 1 and 20 hours, and we have 94 logged since March 31st. We use Basecamp extensively. Time on tasks is tracked using its time-tracking functionality, and then we spend a minute adding everything up at the very end of the project.
Next up: figuring out how to interpret the data. I hope the data will give us visibility into:
Reviewing what we have to date, the post-project explanations are already proving valuable in identifying the trends of what makes a project successful versus going off the rails.
]]>WordPress network usage (as of June 2011)
journalism.cuny.edu analytics (excluding internal IP addresses, June 2010 to June 2011)
Our Facebook Page (June 2010 to June 2011):
Our Twitter account (April 2009 to June 2011, according to Twitaholic)
Our videos on Vimeo (June 2010 to June 2011)
As with any metrics, it’s hard to find the signal in the noise. Furthermore, data can be misleading if you don’t use it in controlled environments.
With that being said, I was quite surprised to see our top-ranking video on Vimeo a pretty generic camera tutorial. This is something to consider for the future. Also, I’m quite happy we have 144 students, alumni and faculty set up with personal websites, and 70 personal and project sites using custom domains.
By this Wednesday, I’m supposed to have a plan together as to what metrics and goals we’ll track for the next year. Post to come.
]]>
A month or so ago, Joe and I started working on a dedicated documentation theme for the J-School’s Tech website. We’re calling it Documentation Redux, and it’s currently at v0.3. Closer to v1.0, we’d like to generalize it and make it available for others to use. For now, I want to review where it’s at and articulate where we’re trying to go.
Our goal for the website is simply to publish and make accessible as much knowledge as we can. For every support ticket possible, if a relevant explanation doesn’t already exist, we want to make sure the answer is captured on the website first, and then just include the link to the documentation in our response. The theme will evolve with this goal in mind.
On the homepage, we make search, the dominant information retrieval paradigm, as prominent as possible. I’ve implemented Sphinx as the index utility, which means results are returned against a relevancy ranking instead of reverse chronological order (WordPress’ terrible default).
The primary content area is widgetized into two columns. Instead of manually updating HTML lists of links, any admin user can manage what shows up using widgets or menus.
In the right rail, we’re showing the most recently published blog posts and the most recently updated pieces of documentation. This is our activity feed, per se. At the top, if a user doesn’t find what they’re looking for, they can always file a new support ticket.
Across the header, users can navigate content by any of the seven custom taxonomies we have: topics, courses, contexts, hardware, software, WordPress plugins, or WordPress themes. All roads lead to Rome. The big idea is to have a bucket of structured content from which we can create new packages on the fly (related). For instance, if we needed to create a cursory introduction to new professors, we could create a Context term called “Incoming Faculty”, associate all of the content we need, and email them a link they could bookmark, print, download as PDF, etc.
It’s still a work in progress (look at WordPress for an example). The challenge is fitting all of the pieces together on the fly. Ideally, a term landing page has a short introduction, a clear listing of the documentation available, relevant statuses, asides and standard posts from the blog, and names and avatars for the staff members who can help in a pinch.
Specifically for the last bit, we’ve created a custom post type for staff. They can be associated with taxonomy terms just like posts and pieces of documentation. The problem we’re trying to solve is students (and faculty and other staff) not knowing who to go to for questions on any given term. I’ve lost count of how many times I’ve been asked whether I know the answer to a question about Flash.
As with many projects, the list of features we want to add is just as long as what we’ve already done. In particular, there are a few I’d like to identify.
Reminders about stale documentation. Each piece of documentation can have more than one maintainer thanks to Mo’s nice Co-Authors Plus. Unfortunately, it’s hard to keep track of what exactly is out of date when you have a large body of content to maintain. Either through a custom plugin or as a feature of the theme, it would be nice to have a post meta box where you could set a reminder date. On that date, it would send you an email and/or surface an interface nag to spend 5 minutes updating the piece of documentation.
Auto-refresh search on the homepage. Much like Google Instant, typing into the search box on the homepage would bring up results right away. As you typed, the results would dynamically refresh. 37signals has this too on their documentation site and it’s quite nice. Expanding this, if your query matches an existing taxonomy term, you’d have a lightweight link to its landing page appear at the top of the results.
Link database like delicious. We’re trying to write as much documentation as we can, but we’re not perfect. It would be great to incorporate external documentation and articles as links in our taxonomy term views, make them available in search, and offer multivariate filtering.
“Was this helpful?” and other lightweight feedback prompts at the end of documentation. Capture user feedback on our content as unobtrusively as possible. Authors could A/B test different prompts to see which produce the most valuable input.
Current and historical service issues. As would be expected, we manage a number of technical services with varying levels of reliability. When a service like the little voicemail indicator light goes down, users file support tickets at best and start calling people at worst. Our notification system now is an email to everyone at the start of the issue and another email when the issue is resolved. Ideally, we’d appify all of this so users had a central place to go to if they suspected an issue, we notified affected users only as necessary, etc.
The last one might be a theme in itself, we’ll see. Further ideas, suggestions, criticism or inspiration would be much appreciated.
]]>Friday consisted of: getting leftover guacamole and chips from a lady at the airport restaurant, a four hour flight delay including a twenty-five airplane wait for the runway, 2 am tortellini pizza at Otto’s, and arriving in Bangor, finally, at 4 am.
After an early wake-up call Saturday morning (noon), Will, Albert, Will’s girlfriend Elyse and I drove to the coast to hike Acadia. It was a cloudy day unfortunately, but the hiking was great. Starting at the top of Cadillac Mountain, we dropped down one side to Jordon Pond and back up a sketchy Class 3 or 4 scramble with non-existent protection. Finishing just as darkness fell, we did about 8 miles and a couple thousand feet of vertical. For dinner and drinks, we went to Geddy’s in Bar Harbor.
Sunday became our gorgeous rest and recuperate day. Albert and I rented mountain bikes (his a Cannondale and mine a $2,500 Santa Cruz) and, with Will and Will’s friend Andrew, rode through Bangor City Forest for a couple of hours. This include water crossings and a leech. Afterwards, we drove to 4 Points BBQ for an early, incredibly filling dinner. I had spare ribs and beef brisket, heavy on the Kansas City BBQ sauce.
For Memorial Day, our big goal was the summit of Mount Katahdin, Maine’s tallest mountain and one end of the Appalachian Trail. Waking up at 3 am to snag a parking slot (there ended up being plenty), we started hiking around 7 am, scrambled thousands of feet up Abol Slide, and summited just after 10 am. It was a lot windier than the forecast said. We took Hunt’s Trail, another popular route, for our never ending sketchy scramble down the mountain. I got back at 2 pm, Albert at 2:30 pm and Will and Andrew at 2:45 pm. In total, Katahdin was about 9 miles in length and around four thousand of elevation gain.
Three days of awesome.

Because 37signals started it.
]]>Then, Nieman Journalism let Vadim Lavrusik publish essentially marketing copy about how journalists can use Facebook’s Pages product. For free. In exchange for the ability to run ads against your content.
To this, I said: “I’m sorry, but journalists getting in bed with Facebook is the mother of all bad ideas. See: http://db.ly/103 Shame on you @niemanlab”
And: “Newspapers sell display ads, last I checked. Facebook has a many billion $ valuation from its display ad biz. Therefore = ?”
And: “‘Here’s the problem: journalists just don’t understand their business.’ I couldn’t have said it better myself.”
And: “Yo journos: How much cash will Facebook give you when it goes public with a $50+ billion valuation? My bet: a lot less than Arianna did.”
Now Paul Bradshaw, a prominent journo-blogger in the UK, has decided to use Facebook’s Notes product exclusively for a month. Vadim, under the Facebook for Journalists moniker, explains:
But to answer your question, you should reference the terms. You own your content. Facebook gets a license so that we can put ads next to it. Not dissimilar from other companies.
Ah, referencing ever-changing terms of service. If you aren’t the customer, you’re the product. Writing these points out on territory I control so I can point to it later.
]]>Last week, I said:
I think I’ve solved journalism. Based on my experience as a newsroom & J-School developer who’s had repeat experience with crappy vendor software, this Knight-Mozilla challenge needs to do to crappy CMSes & support ticketing software what Google Chrome Frame has done to IE6,7,8. We must subvert corporate IT like nobody’s business.
Initially a semi-sarcastic remark, this comment started an off-list conversation that I’d like to bring public again, at least on my side. I do believe ground-up subversion can be an effective way of getting things improved when legacy culture presents such a formidable challenge. Here are a few things we’re doing at the J-School:
One: Everyone that works with me on a project has to use Basecamp. Email is not a collaboration tool, nor is it a project management tool. If a new collaborator haven’t used Basecamp, I give them a short introduction during the kick-off meeting and follow up with written documentation. I’ve had almost 100% success in shifting project conversations to Basecamp, but only about 50% success with getting people to check off tasks and milestones. Baby steps. The rest of IT has more or less adopted it, and there are a few people who have expressed using Basecamp in other contexts. Most of the core faculty have accounts now too. A summer goal is to introduce ways in which they can use it for fall courses.
Two: We’re writing documentation for everything. Use of new technology is dropped if the user gets frustrated with it, or forgets or doesn’t know how to use certain pieces of it. As such, we’re trying to prepare a piece of documentation for every support ticket we handle. Users should be empowered to learn for themselves. Technologists’ roles should focus on creating environments where experimentation by non-technologists is easy.
Three: Support requests are funneled through our (terrible) help desk software. If a user needs help, the current culture is either to email or go try and find the person they think can help them. I can’t even tell you how many questions I’ve gotten about Flash because I’m the “internet guy.” And I’m still reminding three or more people per day to file a support request instead of interrupting me while I’m in the zone. We’ll be a lot more effective at answering questions if we can instill a new culture that leverages technology to find people and resources (e.g. “go to Russell instead of me for Flash questions” and “the answer to your question is available on the tech website”)
Four: I’m pushing for more accountability. Use of project management software like Basecamp and collaboratively creating meeting notes in Google Docs are two ways of ensuring everything is written down. The sheer number of things that simply aren’t done because of miscommunication, poor planning, or lack of accountability has surprised me significantly.
When I use the word “subversive” in this context, I really mean “just do it. Have a vision for what you want your future to be, and hack the people and technology systems necessary to make it a reality. Pad next year’s budget by 10% so you can hire the contractor you need for that neat, untested idea. You don’t need anyone’s approval.
]]>Understandably, given the weather and the fact that the students had 6 pm project deadlines, only 4 students showed up. This ended up to our advantage, as I was able to spend much more time talking them through their individual websites. 3 students already had self-hosted WordPress websites, although one had technical difficulties. The last student had a WordPress.com website.
For planning, I spent around 45 minutes outlining about 6 hours of teaching material. I knew the workshop would be largely free-form, and I wanted to give students the flexibility to set their priorities. This worked well in my opinion. They all were working on personal websites, and wanted to spend the majority of their time on improving their themes.
We spent 1:10 on an introduction to how WordPress works as an application (including foundational concepts like programming languages vs. markup languages, and what a database is), theming paradigm, and how to make non-destructive CSS changes with Firebug and WordPress.com custom CSS. I focused on non-destructive CSS changes first, because I think a majority of the changes they want can be made this way and it will save them significant hassle in the long term.
We then spent the last two hours on modifying PHP files, why you should use a development environment, and the importance of using child themes when you’re making improvements to someone else’s theme. This was more tell than do, which means we covered more material but I don’t know that it’s going to stick as well. We hit a point where students said thought they knew it, but wouldn’t be able to know until they applied it. Need more opportunities to apply intermediate tests in class.
Learning slowed after three hours into the workshop. In an education future, being able to see when students are hitting the wall of too much information would be useful. Also, proactively planning class length based on said wall.
According to Zach, because so many students are using WordPress (including for their Explainer.net project), it would’ve been useful to fit it in earlier in their educational schedule. What worked:
What needs improvement next time:
Forgot to do the post-workshop survey… next time.
Who I am:
What projects are you guys working on and/or what do you want to learn how to do?
Topics we could cover today
Sort your content in ways other than categories and tags
Example: NY City News Service
Two parts: registering your new taxonomy, and showing the tags on the page template
Create content types other than a “post” or “page”, and capture structured data around that
Examples: CUNY J-School events and database of databases
Idea: database of startup companies on Betabeat. What data might you want to capture?
Definition:
Definition: Abstraction of presentation from the content/data Charactistics:
Review file structure:
All of WordPress.org’s documentations on themes
Install WordPress on your computer: http://codex.wordpress.org/Installing_WordPress#Easy_5_Minute_WordPress_Installation_on_Windows
Use Firebug to preview the CSS changes on your live site before committing them
Install WordPress.com Custom CSS plugin to non-destructively add CSS to your website without modifying the theme files
Child themes: If you need to create/modify the PHP in the template files, you should first consider a child theme
Version control keeps your changes sane
http://bitbucketlabs.net/flashbake/
Debug feature - turn off for production site - in wp-config.php: - wp-debug, true: define(‘WP_DEBUG’, ‘’); - after WP - shows you error
Software I use, January 2011 edition
Project management tools:
Bug-tracking tools:
Google Docs for writing down everything
Erin’s Notes Template tags: http://codex.wordpress.org/Template_Tags
get_header: getting the data and info within the header.php file
When you want to figure out why something is happening the way it is, consult: http://codex.wordpress.org/Template_Hierarchy
How to edit theme files without damaging the theme
dom: document object model
download firebug
plugin: wordpress.com customcss use this when changing theme templates, see above bold note.
making changes in firebug, when you decided you want it, you can save it with the custom css plugin. copy and paste it in there.
wp-config: for self-hosting. instructions on how wordpress should be run.
version control; super history: can go back to previous versions. saves a log of changes. as you’re making CSS changes, use this.
brush up on CSS http://csszengarden.com/
draw out what you want. wireframes and color palette. identify functional elements. do you want a gallery? or slider? wordpress.org directory woo themes. some for free. graph paper press studio press pick a theme (functional and design) might be new fonts, color scheme. sidebars with background? make a list of the things you want for the theme. see how much you can do with CSS
editing themes: don’t edit themes with your live site.
github: social network for coding. logs your changes to your projects. follow other projects
child theme: inherits the qualities of the parent theme except for the new qualities you want. create a new directory within the theme. wp-content themes child theme needs to have one thing. style.css file has to have a reference to the original theme.
template directive will tell you that it’s a child theme. check wordpress.org for these directives.
development environment or sandbox.
google: mamp wordpress
site: wordpress.org “keywords to search”
Setting up WP multisite: http://codex.wordpress.org/Create_A_Network
]]>First, we lost 40 minutes when the New Jersey vortex mixed up my knowledge of north vs. south. The former is the direction we wanted to go, the latter is the direction we went.
After we turned ourselves around, we drove two and a half hours and overshot our original trailhead by 50 miles. Yes, that’s correct: we landed an entire hour past where we wanted to be. This is uncommon of my navigation skills, but I’ll attribute it to both my and my navigator’s lack of sleep.
Oh yeah: it poured the entire drive too, and Zach was the only one to remember his rain jacket.
Thanks to the NY-NJ Trail Conference website, we searched based on our new location and found a great trailhead ten miles away. The skies cleared in a perfect circle over the mountain.
The hike itself meandered through the woods until it hit a series of wonderful overlooks. Likely my favorite thing about the NE’s outdoors are the majestic deciduous trees. In the late afternoon sunlight, ribbons of color graced forests running from the valley up the opposite hillside. It was a short experience for the time we drove, but a great escape from the city.
One more story. Three minutes prior to parking at the trailhead, the empty light went on. Based on my past experience, I knew I could get another 30 to 40 miles on the tank, and it wouldn’t be too big of a deal to find a gas station on the way back to fill up. After the hike, Michelle asked to stop at a country store nearby for “old-fashioned” ice cream. We do, and unfortunately they’re not stocking it yet. Back to New York City we go.
The car won’t start.
Not only that, the starter won’t turn over. There are two possibilities I can think of. One, we’re so close to being out of gas that the car has a fancy electronic kill switch to keep you from running the battery down (unlikely but possible). Two, there’s some other random, unknown problem with the car and we’re completely out of luck. Given the prior adventures of the day, I suspected the latter.
As it turned out, a half hour later, after calling Zipcar’s excellent customer service, reorienting the car and trying to start it repeatedly, and pulling the shop owner and his friend in the mix, it was user error. The electronic access pad you use with your Zipcard can enable and disable the car’s ignition. When I showed Tim how you access the car after leaving the country story, I inadvertently disabled the car. Zipcars don’t start when they’re disabled, and they do start when they’re enabled. Simply scanning my Zipcard again solved the problem. Oh, technology.
]]>
Mad props to Ivar Vong and the rest of his team who finally pulled it off. They did the switch to “web-first” too. It’s been a long time in the making.
]]>Will Mitchell says the biggest thing he has to grapple at the Washington City Paper with is custom metadata. For instance, stories often have multiple authors who need to be attributed in different ways. They want to persist this data both to keep it structurally sound and for presentation purposes. WordPress is restrictive currently because it doesn’t handle data outside the schema out of the box. Also for the things WordPress doesn’t work well for, he needs to establish the best way to interface an external application with WordPress.
JSON API is an awesome plugin for getting data in and out of WordPress. Makes it much easier to use WordPress as parts of larger contexts. The plugin was originally written at the Museum of Modern Art for a blog served with Ruby on Rails. They made a decision to use RoR’s templating system for the frontend and WordPress’ admin for the backend.
Sweet: learned it’s already possible to associate custom taxonomies with users and other non-post objects. You just need to build the admin interfaces.
Will Davis talked about how he’s customizing WordPress for the Bangor Daily News, particularly the admin.
Question: What’s the state of the art as it comes to search?
Lavallee says NPR spent a fair bit of time thinking about it for the Argo Project. They came to the conclusion they didn’t need to worry about it until the traffic was there. They still haven’t done anything to modify WordPress’ core search.
I mentioned IndexTank as a search-as-a-service option. Mitchell wants “SearchPress”, or a search utility that’s easy to install as WordPress. Google Custom Search doesn’t work for me for a couple reasons: it drops pages randomly from the index and doesn’t offer faceting. Also, it’s not possible to tweak the relevancy algorithms.
Unfiltered HTML is a WordPress MU plugin I wrote to disable the KSEs filter. It allows users to include potentially unsafe Javascript and iframes. Embed.ly is also pretty damn cool. Embedding rich media from 160+ sources is as easy as copy and pasting a link to the resource, like this one:
http://www.slideshare.net/andrewnacin/best-practices-in-plugin-development-wordcamp-seattle
]]>WordPress.com offers 24/7 support via email to anyone who signs up for a blog. Automattic views customer support as essential to building a community. Happiness leads directly to using the product more.
Few ways of getting feedback from your community:
Nacin: “The vocal minority is a bad thing in many cases.” You shouldn’t allow them to guide the course of the community.
Google recently launched a feature in search that supports recipe metadata from publishers. WordPress.com saw an uptick in support tickets from food bloggers requesting the feature to be added.
If you’re building a community, you need to think about the needs of each facet. Designing for a monolithic majority leads to poor results.
“If I was a fresh reader to The New York Times and wanted to start following stories on X topic, where would I start?” asks Spittle. WordPress.com has an email address anyone can email to and receive a response. Nacin argues against email as a way collecting feedback because it’s unstructured and most news organizations don’t have the support staff to respond quickly.
Setting expectations with your community if you want to build a relationship with them is very important, explains Spittle. If you offer an email address anyone can send to, the expectation is that the community member will receive a response.
According to Nacin, “if you want a thriving community, it comes down to engagement. If you aren’t willing, don’t bother.”
Blogsmith, a blogging tool used internally by Aol, has a terrible commenting system. Engadget, controversially internally, switched to Disqus and saw the quality of engagement go up significantly.
Pivoting to a conversation about user experience lessons we can take from software development and apply to news websites. Nacin reflexively types in nytimes.com every time he opens a new tab. Ideally, this is the attitude of every reader. You want to be the homepage.
Question: How can news organizations shift from publishing information to inform, to publishing information to be used?
Nacin: “Readers should be more than visitors.” We need to think of more compelling reasons for them to stick around. Facebook centers the user experience around the user. Personalized recommendations increase relevancy. What if the headlines on nytimes.com were determined based on your past reading history?
Lastly, when you’re tracking data, you should define what “success” is beforehand. It’s much easier to figure out when you’ve hit it.
]]>GitHub is a social coding site. You can host your code in a repository, fork others’ code, merge others’ code back into yours, and get social. GitHub has one of the best interfaces for accessing various facets of a code project.
Version control is similar to Wikipedia in that you can see all of the changes that have been made. Seeing revision history in Wikipedia makes the text, and people contributing text, more trustworthy.
“Version control is your safety blanket.” If your screw something up, you can easily revert back to a previous version and recover the content.
Greg presented a few ideas for Git in a news setting. It would be tied into your CMS, have a simple interface, and not necessarily rely upon code knowledge to use. This opens it up to non-coders as contributors.
Flashbake is “source control for ordinary people.” From Cory Doctorow’s announcement post:
This is a set of Python scripts that check your hot files for changes every 15 minutes, and checks in any changed files to a local git repository. Git is a free “source control” program used by programmers to track changes to source-code, but it works equally well on any text file. If you write in a text-editor like I do, then Flashbake can keep track of your changes for you as you go.
I was prompted to do this after discussions with several digital archivists who complained that, prior to the computerized era, writers produced a series complete drafts on the way to publications, complete with erasures, annotations, and so on. These are archival gold, since they illuminate the creative process in a way that often reveals the hidden stories behind the books we care about. By contrast, many writers produce only a single (or a few) digital files that are modified right up to publication time, without any real systematic records of the interim states between the first bit of composition and the final draft.
Copyright and ownership over data becomes a concern when introducing ideas like forking and merging stories. Whose story is it? How do certain changes reflect back upon the organization that created the story?
“Forking is a Feature” (Anil Dash):
There are several related technical concepts that can answer to the name “fork”, but the one I reference here is the dramatic moment when a software project undergoes a schism on ideological or technical grounds. Instead of merely taking their ball and going home, those who forked were taking a copy of your ball and going to a new playground. And while splitting a community could obviously cause an open source community’s momentum to grind to a halt, even the mere threat of a fork could cause significant problems, by revealing conflicting goals or desires or motivations within a previously-united community.
Starting with the “talk to me like I’m stupid” approach lets the building blocks be put in place so that the story can be expanded going forward. Different branches and layers of a story can then be overlaid to provide additional context.
Episodic updates to a story can be left as separate branches or merged back into the trunk to tell a more complete story.
On a technical note, Git is much nicer than Subversion because it has a much better system for managing contributions. Submitting a pull request is easier than creating a patch file and having to email it somewhere, upload it to Trac, etc.
Question from Zach Seward: What type of story works best for this concept?
Albert Sun thinks breaking news might be a good candidate for this approach, as there’s often conflicting information, quick corrections, etc. When the story is changing on a regular basis, readers want to see what has changed and why.
Via Greg, Marginalia is a tool for visualizing historical information about a Wikipedia article. It also seems to be an open source, Javascript-based web annotation system.
There is a WordPress plugin for publicly displaying the revision history of a post. Scott Rosenberg supported its development and wrote about it last August.
Andrew Nacin brings up the concept of licensing. The big problem is media companies are largely protective of and restrictive with their content. They want to maintain full ownership over it. Users contributing changes back to the original document is different than a user contributing back to WordPress because the licenses are completely opposite.
]]>Overall, I had a few significant takeaways from this evening. A key distinction between WordPress and other “traditional” learning management systems is that the former promotes a very “constructivist” educational approach and the latter are strong on generating learning metrics, whether or not professors use them.
Also, WordPress needs a more flexible privacy framework for authors. There are roles and capabilities when it comes to the publishing workflow, but a piece is either published or password-protected at the end of it. As a plugin, it would be useful for students to be able to control whether a piece is public to themselves, between themselves and a few users, between themselves and a specified group, or open to anyone on the web.
Lastly: “Students use Blackboard and Moodle, then graduate, and never use them again.” WordPress has applications in the real world.

Our readings conversation went well, people were mostly engaged, but it went for a lot longer than I planned. Assigned readings can easily diverge into related topics.
After, when we covered WordPress and other publishing tools, the class progressed into more lecture than conversation. Conversation means the students are generally more engaged whereas lecture means we cover more of the material I think they need to know. Some people took the time to log in to their websites prior to the class while others didn’t take the time at all. There’s an intriguing tension between how much reading I can assign out of class and what students expect to learn within class. What’s the most effective use of physical space?
Covered most of the WordPress admin, but missed activating widgets and configuring settings. Didn’t cover the different types of blogging at all, or the best practices listed at the end of the class notes. That may be a blog post this week.
Things students found useful:
What students want covered next time:
One point I pushed: blogging is publishing on the web. We heavily detoured into bloggers vs. journalists, and I wanted to emphasis that the debate is only relevant for a certain subset of people. Blogging is publishing on the web, and there are billions of people doing it in almost as many styles.
Another point I pushed: Start with free. There are plenty of places to experiment with publishing on the web, and you should get a sense of those spaces before you make significant financial investments. You first investment, a few months after you’ve been publishing, should be your personal domain ($10-$15/year).
Strong call for an assignment between now and next class in lieu of more theoretical readings. I’m thinking one or two things:
Class notes are also in PDF form.
Five Keys to Authenticity (Ryan Sholin)
Be Human: Be Honest: Credibility is crucial and will help you compete in a crowded space Be Aware: Expertise in a niche will set you apart; be ahead of the curve, don’t be late to the online party in terms of joining the conversation. Offer a unique insight, and part of that is paying attention to what others are saying and identify where missing gaps are (and try to fill them). A negotiation between publishing quickly and getting your fact straight. (Do you have the bandwith and stamina, or publish less frequent but well-thought-out posts). Do what you do best and link to the rest (Jeff Jarvis). Focus on your original analysis, reporting etc. Be Everywhere: Try an RSS feed (really simple syndication) to stay on top of latest news in your beat. RSS is a protocol for syndicating content across the WEB, an XML-based protocol (much like newspapers use to submit to newswires). More B2C where consumers can subscribe to info from publishes. Also try Google Reader, which allows you to subscribe to RSS feeds from as many sites as you want. Google reader will manage and index all the latest news for you, so you don’t have visit each source. You curate your sources of info. Show Your Work:
The art of the link roundup (Matt Thompson)
Examples:
The People Formerly Known as the Audience (Jay Rosen)
Recommendation: http://pressthink.org/2011/03/the-psychology-of-bloggers-vs-journalists-my-talk-at-south-by-southwest/
RSS
HTML
CSS
CMS
PHP programming language
Question: When starting out, how often should you update your blog ? Answer (DB): On average, shoot for 700 words three times a week. Plan to spend about two hours on each entry. If your goal is to ultimately attract advertisers, then more content = more traffic = more advertising.
Advantages to WordPress
Question: What is a masthead? Answer (DB): Your blog’s “header.” Masthead is more of a print term. The digital version is called a “header.”
If you want a blog video, use a service like Vimeo or Youtube. Vimeo has a free version, but the pro version ($60 a year) is better. DB prefers Vimeo to Youtube.
Wysiwyg = What you see is what you get.
Disadvantages to WordPress
What you should think about when you’re looking at tools
WordPress hosts to consider
Other tools you might consider
Why you should double-check your slug: http://www.niemanlab.org/2011/04/how-url-spoofing-can-put-libelous-words-into-news-orgs-mouths/
WordPress.org themes WooThemes free themes
Plugins for Publishers, April 2011 edition
Users
Settings
Personal
One-person publication
Multi-person “new media” publication
Multi-person “old media” publication
Corporate blogs
Team blogs
Daniel’s best practices
From Interactive 2’s syllabus:
Photo policy: Do not “lift” or “borrow” images from other web sites for use on your web site or blog without credit or “courtesy of” text. Permission must be provided by creator of the content for any image to be used, unless it is being used for “fair use,” purposes such as to comment on the image or because the image itself is part of the news you are reporting. Since such permission is often difficult to obtain, especially on deadline, and “fair use” difficulty to define, we strongly recommend that instead you use only those images you have created yourself, or which you have obtained via the AP Photo Bank, or other photo service for which the school has obtained licensing, or which are explicitly labelled as “creative commons” and available for your use. IMPORTANT: This matters, not just as a plagiarism issue, but as a legal copyright issue that could create problems for you in the school or beyond, in the workplace. Apply the old journalism adage: “If in doubt, leave it out!”
Top 15 Blogging Best Practices (Laura Lee Walker) 1. Use a catchy title. Make the title unique, consider using questions and lists. 2. Use interesting visuals. Include an image or video in your blog. This will get people’s attention and help them better understand the content of your blog. 3. Include links. Links add depth and credibility to your articles and allow you to show a little ‘link love’. 4. Use bullets, italics, and bold font. This makes for an easier read. Using bold font allows the reader to quickly scan your post. 5. Let your personality come through. This is what makes your blog unique. 7. Reference your articles. If you use other people’s work, include a reference or link to their article. 10. Be bold. This might take the form of being outrageous or controversial. 12. Respond to comments as soon as possible. Treat your reader like a friend. If your friend calls you and leaves a message, do you wait days to respond? 13. Make your blog post easy to share. This may include adding widgets such as Tweet, Reddit, Delicious, Stumble Upon, etc. 14. Post frequently. This helps keep your blog fresh and entices search engines to index you more often.
Finding free images to use (Tech@CUNYJ)
How to install themes from woothemes to wordpress?
Maybe go through google analytics
Where to put metatags and descriptions for SEO and alt text for photos?
In Corporate blogs, can we address characteristics for fields that are not so “corporate” such as fashion blog for an e-commerce site?
Please post a couple educational tools on the web for developing the basics of HTML
Also, please post, if you know any, a link or two that walks you through wordpress, i.e. an easy-to-use manual or instructions
]]>The project site is functionally complete. She wants to update the photo content before promoting it.
Her next big project is to convert the portfolio website mockups she’s done into a WordPress theme. I told her to read through the WordPress.org documentation as much as she can, and try to outline all of the files she might need. Content first, then markup, then polishing it with CSS. I think I’ll put together a workshop next week on building or modifying WordPress themes and promote it heavily.
]]>The Knight Foundation has an important role to play encouraging innovation and experimentation within the news industry — because let’s face it, not many people in news media have that kind of money to throw around these days (KNC has granted about $22 million over the past four years). Knight has a responsibility to the projects they’re funding, the communities that rely on those projects, and the journalism community as a whole to see that their money is put to good use.
What I’ve gleaned from breaking down the numbers, reading the various survey responses and generally observing KNC practices over the past few years is this:
We can take a hint from one project, TileMapping, that according to their survey response is having “a great experience so far!” This project was already in the process of being actively built before the grant money was attained. TileMapping used the funds for a second iteration of their project, so they had a clearer scope of what they were trying to accomplish and what resources were required to do it.
So many of the respondents who haven’t had such a good time as TileMapping said they changed course because they realized that they:
I think many of these problems can be tackled by the solutions Daniel poses, that I need not repeat (shorting funding cycles, milestone-based funding, smaller amounts of money). Related back to TileMapping, projects need to have a clearer plan of execution and sustainability, beyond simple speculation. The Knight News Challenge should be an investment in the future of news, not a gamble.
And while, yes, some projects will most certainly fail, they shouldn’t fail quietly and unacknowledged. There should be clear transparency, enforced through Knight, that requires grantees to explain why projects failed and how future projects can learn from those failures — because what’s the point of experimentation if there are no clear takeaways? Otherwise, it’s just lost time, money and effort. And that’s not how you shape the future of news.
]]>OK, so we can all agree that Knight is ready to take an evolutionary step, right? It’s time for the thing to hold itself, and its winners, a little more accountable.
Not every project is going to be a success. But reading through the responses, it’s not clear to me that there’s a working definition of what Knight Challenge success is. And couching everything as an “experiment” — both the projects and the Challenge itself allows that lack of accountability to continue. Call something an experiment and the stakes are removed — it’s a success just for being conducted.
So how do you increase accountability? Incubators like YC and TechStars, which have a leg up because they fund for-profit endeavors with a clear-cut barometer for success, offer a model that Knight could adapt. Some chief differences:
The incubators have this in common with Knight: they’re making a bet. The question is how hard you work to improve your odds. And doing that work is tough if you haven’t defined what a win really looks like.
]]>Reading through the surveys, it really seems like a lot of the grantees “scaled back” from building software to simply using existing tools or just community organizing. This response was representative:
The technological capacity of the organizations… whom we were encouraging to use our tech was lacking and therefore hindered adoption of [it].
This is a good example of the kind of thing that needs to be worked out prior to applying, or vetted during the application. Sure, no matter how much vetting you do, some projects are going to fail, but the rubric for success can’t be “throw them at the wall and see what sticks.”
I think in the future incarnation of this deal, whatever it is, people need to be more accountable to what they’ve proposed to achieve — not the scaled back “oh shit, this is hard, what can we do with existing tools instead” end product. To me, the word “innovation” connotes a certain focus on new technology. There should be at least one component of the proposal that is a new tool and will be built by the end of the proposal, or else there had better be a really brilliant reason for a proposal that just introduces existing tools into some organization or community.
There’s a ton of emphasis in the application on what you want to achieve and how it will impact a community, but not very much on how, specifically, you’re going to achieve it, and who’s on board to get it done. Compare with Y Combinator where they really make you sweat about the team and the technology, and demonstrate what you’ve already built.
The other thing that is more and more disconcerting to me is the “Knight News Challenge is an experiment” vibe that I get from a lot of the responses. Making it a grand experiment kind of screws up the incentive to stick to your plans, because failure to launch is justified, in retrospect, as an interesting outcome of the experiment. There seems to be a little bit of broken window syndrome (or whatever you would call it) going on. The less accountability people see for the other grantees, the less pressure they may feel to achieve their original goals. This critique isn’t point at any individual: doing this stuff is hard, and scaling back near the deadline often makes sense. But perhaps it makes a little too much sense in the context of the current KNC. Scale the project back during the application phase, so that the grant matches what can realistically be achieved.
I think it would be worthwhile to look at the responses (and concrete results) from “News Games” and “Playing the News.” Two projects about games, both granted around $250k.
One thing that stood out was the outliers in the number of KNC apps submitted. The Ideas Factory submitted 11. MobileActive submitted 48 other applications? Not, say, 4-8? Sup with that?
It seems weird to me that that it’s so hard to find this kind of information News Challenge website. If we’re serious about developing story forms and information repositories that go beyond narrative journalism and hub-and-spoke or blog navigation, we should see some of that in the contest itself.
]]>
Infographic by Lauren Rabaino, updated April 18th[/caption]
In preparation for a roundtable discussion this weekend about the Knight Foundation’s commission on the information needs of communities, a few of us decided to survey past News Challenge grantees. A big thanks to Chris Amico, Will Mitchell, Max Linsky, and Lauren Rabaino for helping out with various parts. We wanted to pull together data like how many of the projects are still active, whether the grantees started their projects before receiving funds, and whether the amount they received was sufficient to achieve their objectives. On a program-wide scale, we wanted to know the percentage breakdown of content vs. education vs. software projects, the average lifespan of a project, and what type of institutions typically received funding. Some of this we were successful in collecting; some, not so much. All of our data is available as a Google Spreadsheet.
Since 2007, the Knight Foundation has awarded about $21.9 million to a total of 63 projects (40 of which responded to our survey). The largest, at $5 million, went to MIT’s Media Lab. The smallest, at $10,000, went to Joe Boydston’s CMS Upload Utility.
Of the 40 respondents:
According to our classification system, of all 63 projects:
The following are a collection of responses we received to the survey’s open-ended questions.
“Readers played the games and, we think, gained an increased understanding of these issues and enjoyed themselves doing it. The games remain on our site and continue to attract traffic and interest.”
“Overall, I considered the project success. We designed a new newsroom for The Chronicle, the student paper at Duke University, designed to leverage a long-term view of where media is heading. Beyond that, the goal of the project was also to identify broader lessons that other news organizations could apply.”
“Our code is also open source and has been used by several other projects (goJournalism.ca, YouCommNews.com and others). While these projects have not been wildly successful it has shown that there is a real interest in this model. Other projects like SpotUs.it, YouCapital.It, Emphas.is and others show that there has been a cultural change inviting more crowdfunding projects.”
“At this point we’ve completed the initial integration of PRX Story Exchange with Spot.us via APIs and collaborative coding - which is one of the principal goals of the project. We are just now rolling out the first pilot instance of Story Exchange with Louisville Public Media, and then plan to offer it more broadly in partnership with local public radio stations and producers.”
“Yes, in the sense that we used a suite of free, simple tools to build a site and a forum for online community. No, in the sense that the hoped-for community never coalesced around the tools we’d created.”
“We’ve continued the project well beyond the duration of Knight’s support, seeking other foundation funding and donations from individuals to allow us to support innovative new media efforts in different corners of the developing world.”
“Several stations are now using and contributing to the tools.”
“We got the concept, in it’s most basic form, built! And we did it with some money to spare.”
“Very modest goals were achieved.”
“The biggest challenge has been finding people with computer programming skills/backgrounds who are interested in studying journalism.”
“We were discouraged [by the Knight Foundation] from changing our focus from print to digital content while receiving grant funds. As a result, we had to wait until the end of our grant to do what our customers were asking us to do (allow them to publish to eReaders, the Kindle, mobile phones and tablet computers).”
“Time: If I thought the project would take X amount of time, it actually took about 100x.”
“Biggest failure to date is that we simply haven’t succeeded in sparking any sustained, large-scale public involvement/contribution. Exploring why that is and what we can do to change it is where we’re at right now.”
“A media partnership was difficult to forge due to the financial problems facing news companies.”
“Building partnerships with newspapers and publishers has been tough.”
“Learning curve […] While I am grateful for the initial grant - one thing I’ve found is that the more funds you have, the more you need. Learning to keep your scope under control is tough. No amount of funds is enough to do everything you want. Just ask ProPublica.”
“The students did a terrific job coming up with the [project] concept in a four month time frame, but then the turmoil within the newspaper industry slowed considerably the progress of the [project] launch and contributed to its short duration.”
“The technological capacity of the organizations in Kenya whom we were encouraging to use our tech was lacking and therefore hindered adoption of [our project].”
“Not having programming background has been a real challenge. Not being able to devote two full-time brains to the business and product development had a definite impact.”
“Software built ‘for journalism,’ I’ve found, is rarely as efficient, timely, or useful as software built ‘for users.’”
“Changing content, not enough staff, exploding field.”
“We failed to invest in evaluation, documentation, and communications. We are dealing with a community that is slow to adopt change, and we lacked the resources to encourage them.”
“Insular community in small geographic locale meant focus on controversial topic was conversational non-starter online.”
“Be willing to go a bit bigger.”
“Building partnerships with people in other countries is a really tough process. Track record matters - someone with an innovative idea is worth talking to, but it’s worth seeing whether that person has ever managed a project previously, gotten other efforts off the ground.”
“Don’t hire a tech firm. Interview people for CTO slots, give them an equity stake and name them publicly as a part of the project. Send them out to speak publicly on behalf of the project. Get their skin in the game.”
“If you haven’t met a few of the Knight judges in person prior to applying, you don’t stand a chance of winning. The Knight challenge is a great marketing tool for the Knight Foundation and the newspaper industry. If your project isn’t going to sound awesome in a NYTimes article about this year’s winners, it won’t be picked.”
“Have a clear understanding between editorial and technical staff about what the project should do and the technical limitations, and try to address these in a project design phase before the actual implementation process.”
“Release code frequently. While this isn’t something we necessarily learned in this project, it has been hugely helpful getting our code out there, getting eyes on it, and seeing how people use and react to it - while we’re still actively developing it.”
“Better understand the application process and what reviewers are looking for.”
“Go for a sustainable business idea rather than a grant-gaining idea.”
“Ask for less money up front; insist on the ability to change, morph and pivot like any other business; and create a product that people will pay for in some manner up front versus building something that may or may not attract advertising or investment. If you can create a sustainable and growing business right up front through ‘bootstrapping,’ you don’t need as much funding and you may not need any funding at all.”
“Insist on more support (mentorship, networking, guidance, collaboration) from the Knight Foundation. Many of us felt that some projects were Knight favorites and received exceptional attention. Looking back, I think that I would be more insistent on getting that support for my project.”
“Mobile phone technology is moving faster than you think. Don’t write code for yesterday’s platforms, even if they were the big thing when you started. Voice is in rapid decline, data is king, don’t be fooled that apps are the end game, see what is coming in your context a year or two down the line.”
“If your goal is to kick-start a project, give serious thought to the next step in funding. Partial funding can be worse than no funding. […] Reach out to KNC staff often. They may not engage with you. […] Use KNC connections wisely. In my case, who you know is more important that the quality of your code/idea.”
“Don’t be illiterate. When this project started, I really couldn’t code. I could not read the code I was paying for, or assess its quality. Since then, I’ve taken night school courses. My objective is not to become a coder but to become the World’s Worst Programmer — I want to be able to read the code I pay others to write, and I want to be able to fix bugs and add small features to my site without anyone’s assistance or permission.”
“There are lots of feature ideas we had in the beginning that never came to fruition - we cut them out in order to get something up and out the door […] There are lots of features twe’ve built since that I hadn’t dreamed up when we first launched.”
“We expanded, both in terms of focus and in terms of diversifying our funding. Basically, KNC allowed us to undertake an experiment, and based on the success of that experiment, we made [the project] a permanent part of our newsroom and have scaled it up.”
“The Challenge has gotten all kinds of submissions. In a very strange way that is a form of success. They have convinced hundreds (thousands) of people to think about innovative ideas. It has been a cultural win for the journalism community. Before the Knight News Challenge - I don’t think there was an institution that really championed experimentation.”
“Knight built a high reputation of the contest right from the start - attracting top players and persons to the project (Sir Tim Berners-Lee etc.) and jury members, too. […] KNC victory opens doors.”
“The News Challenge attracted technical talent into future-of-news efforts, and got people who, like me, had never applied for a grant or even considered applying for one before.”
“I love the Challenge’s openness to experiment and its willingness to take risks. These are precisely the traits that professional journalism has bred out of its practitioners over the last half-century. We need them and the Challenge has, I think, done a great deal to reinject them into the news bloodstream.”
“Bringing attention to the idea of innovation in news.”
“Great forum to share ideas, meet people, and a unique funding model for edgy ideas that would never get funding elsewhere (certainly true for Africa). A real commitment to journalism, democracy and development that comes through and inspires.”
“The KNC has resulted in some wonderful innovation in media efforts. We benefitted by being introduced to new partners and new ideas. We were able to hire development staff we never could’ve afforded otherwise.”
“Systems needed to be put in place to evaluate the open-source code generated through the News Challenge and identify ways to make it more widely deployed.”
“Capture more systematically the lessons of the challenge winners, and find additional ways to share the results of the projects.”
“Tracking the history of grants and providing the public with some metrics on their success would be a pleasant thing. I’m confident [the Knight Foundation does] this internally.”
“Shorten the application and decision process.”
“It would have been nice to get the $ right away instead of waiting for 4 months to get started.”
“Thus far, I think KNC has fallen a bit short in turning the various grantees into a community that works together and supports each other’s work. Perhaps that’s an unrealistic goal, but it seems like the field would benefit from regular collaboration and engagement between grant recipients.”
“Perhaps introducing grantees to other funders in a way to help sustain projects long-term would be useful.”
“Alone, the News Challenge is just a collection of projects. Taken together with all the people who applied for the News Challenge, you have the makings of a movement. To my knowledge, no effort has been made to keep the people who applied but were not funded together with those who were as an ongoing future-of-news community. A program like the News Challenge has to be careful, otherwise they risk encouraging a few dozen teams and discouraging thousands of others.”
“Knight needs to help News Challenge ideas turn into sustainable institutions.”
“Collaboration needs to be funded. We work in our own project silos. There was never enough attention given to drive collaboration between projects. The annual conference was not sufficient for group learning opportunities. Many of us suffered similar pains in isolation.”
“The News Challenge can improve its logistical support for journalism initiatives that lack professsional business expertise. If we want to support ‘informed, engaged communities’ then we need to recognize that most grassroots, community initiatives won’t be lead by people with conventional ‘corporate’ skills. Every effort should be made to support information operators who have never used a spreadsheet and those who have no idea what an elevator pitch or an executive summary is. It needs to demystify the process and eliminate barriers to entry. Red tape should be viewed as an existential enemy.”
“At times we would have appreciated more feedback and help from people at the Foundation. I was also a big fan of the listserve of recipients that functioned in the early days of the challenge and would like to see that renewed. IdeaLab does not offer the same kind of sharing and informal give and take the listserve did.”
“Though vagueness is useful on Knight’s side, better guidance on an annual basis as to what the News Challenge is truly committed to funding would be helpful for applicants. Some of the questions on the grant application form is confusing. The word limit is a great improvement over the characters limit!”
“The selection process my year was somewhat chaotic, and communication with me as an applicant was confusing – I almost didn’t get my grant because of a miscommunication between the Challenge leaders and me that led to one real misfire of a phone interview. (Happy ending, not complaining, but it was definitely a process breakdown.) […] After the selection process, I’ve been surprised at the low level of communication with Knight – close to nil. I’m at a relatively advanced stage of my career and happy to dig my own trench; I don’t feel I’ve been hurt by this lack of communication. But if I were younger/less experienced I think it might be disappointing.”
“For each project awarded, include funding for evaluation and recommend someone to do the evaluation work as it takes away from the project focus for the grantee to start doing research and eval.”
“Recoup the innovation lost in projects not selected. Can we help non-winners with their project, outside of cash funding?”
]]>First, it’s a diverse class in many measurements. As a practicing playwright, one student wants to start a theatre and movie review blog. I had to help her log into the computer. Another is working for a startup and needs to develop a product marketing strategy that involves producing high-quality, relevant content. The best way to address this diversity is to make the class as dynamic as possible. Leverage the strengths of each student, and make their curiosities everyone’s curiosities. We did this by making the period highly conversational and using a collaborative Google Doc as a reference point.
One post-class survey:
I liked the open approach, the attendees have several interesting questions and the fact that we all have different backgrounds and level of knowledge makes it better.
Another post-class survey:
I found it useful using shared google doc and the prepared questions and notes that were were able all link to. I also found it useful that we had open discussions with Daniel and was very helpful that he gave us examples of sites.
To improve the approach for next time, I think I should prepare more links and examples for the Google Doc. If a student gets bored of what we’re talking about because they already know it, I’d much rather have them learn onward than switch their brains completely off topic.
We have a class website for the time between physical classes. My hope is they take to posting questions there and answering one another. I’ve also created individual websites for each person to practice publishing for the duration of the course.
The challenging thing for me at this point: satisfaction with a course could but doesn’t necessarily correlate with the quality of the course. I wish I knew how to test for and evolve the latter.
Blogging Best Practices, the course
Who I am
Who are you? (Name, Where you work, and favorite web tool)
Stock is content, similar to money in the bank; content that is relevant right now, this minute, as well as 3 months from now (ie. good stuff with longevity). Flow is more in the moment, fleeting news updates perhaps with less substance. Flow is the latest rumor about Twitter, or lessoriginal. Stock is like a commodity. It has less of a news peg and if it does it’s only because it’s some sort of deep analysis.
Check out blog by John Gruber; Daring Fireball, is very “flow”; he has anywhere between 2 and 8 posts a day that are short pieces. The title actually links to the original article and the star icon links to the post. He’ll pull a quote from the piece that he’s linking to. He’ll also for example, see his piece on Bloomberg iPad App; brief nugget of analysis, kind of snarky. Short updates that are reactionary, talking about corporate announcements for example. He also has long pieces too that tend to be picked up by other people. His beat is Apple and technology beat, a premier blogger around Apple news. He uses The Deck ad network.
http://daringfireball.net/2011/03/pricing_should_be_simple
How the Web and Weblog have changed Writing
There are no rules: you can write as long as you want.
Why we link: #J361 presentation on curation
Importance of transparency and authenticity on the Web. Be the authoritative source for whatever your beat is.
Examples: Google, The Drudge Report.
Blogging is:
How is blogging different than X?
Terms you might’ve heard
@todo Cover this section next time: Types of blogging
Important things to consider when starting a blog
Basic HTML
]]>It might be more effective to have slots for students to sign up for if I can find an easy tool for this. Also, the whiteboard idea was a dud. I get the sense they only want answers from the instructor (or someone who appears knowledgeable) instead of each other. Making those connections in meat space realtime seems awkward. Next week, I’ll require students to take the pre-workshop survey to save their spot and make connections proactively if I see overlap.
One of the Entrepreneurial Journalism students came by with a whole series of questions about blogging during my office hours this evening. We talked for a few minutes, but I thought they’d be better answered by existing documentation and possibly attending the Blogging Best Practices course. Here are the questions:
Another student came by my office hours this evening with more work to be done on her WordPress theme. She has someone else helping her now too, so she’s made progress since last time we met. Tonight, we registered a custom navigation menu for her header. We also tried to port CSS from her Posterous website to her WordPress one with limited success. Posterous’ lack of support for custom taxonomies is why she’s making the switch.
The last student stopped by my office hours this evening for the last 10 minutes. She’s looking for the proper WordPress theme to use for her publication. She has detailed wireframes that will be hard to match exactly without paying for customization, but we found a theme likely close enough to launch with. I opened the door for her to ask the web team for feedback on the themes she’s looking at.
]]>
We’ve just launched an email newsletter for The Local Fort Greene-Clinton Hill. I hope to report on how it’s going as time goes on; we think it will be a useful tool for deepening engagement with the community.
The setup is a combination of Wufoo and MailChimp. The call to action in the C-column opens a signup form in a pop-up asking for full name and email address. When the user submits this first form, they receive a confirmation email thanking them for signing up and asking them to take a short reader survey. This survey asks for:
The idea is to go Public Insight Network-style and build up a database of The Local’s readership. Right now, this data is just stored in Wufoo but we’ll eventually set up another Highrise account for the reporters to use.
Of course, all of this can be A/B tested, generates trackable data, etc. Let the experiments begin.
Every morning, the headlines are sent out at 7 am.

Also, as a part of the documentation we’re continually preparing for the J-School, here are the criteria I follow for adding new plugins:
A bit of background. Next weekend, David Cohn of Spot.us (not one of the trouble-makers) is bringing a couple dozen of us together for Hardly Strictly Young. It’s at the Reynolds Journalism Institute, sponsored by the Knight Foundation, and will be my first trip to Missouri. Over two full days, we’ll discuss facets of the Knight Foundation’s commission on the information needs of communities. Part of this, or at least what those of us running the survey think, is to help the Knight Foundation learn from the first four years of the News Challenge. It is arguably the most significant effort from news industry actors to inspire innovation within said industry. In other words, it’s been our only hope.
Unfortunately, there’s not much data for us to work with. Yet. The Knight Foundation has all of the winners listed on the News Challenge website, along with their project descriptions and amount granted, but very little information on outcomes. This is where you fit into our crowdsourced reporting project.
We have two sections on our survey form. The first asks for quantitative information on your project, and is intentionally required for you to submit the form. We want to know whether your project is still active, how much of you grant you actually spent, and whether you achieved your stated objectives. These responses will go on the big ol’ spreadsheet of data we’ll eventually release. The second (optional and/or anonymous) section asks for a qualitative perspective on your project, including how it was successful, what challenges you faced, and what you thought of your experience with the News Challenge. These questions are intentionally broad. If you decide to respond anonymously, we won’t publish the remarks with your name (if we choose to publish them).
This data is quite important. Thank you in advance for taking at least a few minutes to respond. To make things fun, we’ll be updating a public list of who has and hasn’t yet responded. So encourage your friends who haven’t yet replied to do so. I’d like to thank On The Media for the creative idea.
]]>Anyone can create a blog, but what does it mean to blog well? This course will teach you how to set up and design your blog, how to get traffic, how to handle conversations, and how to make money.
Useful, right? The short of it: I have plenty of fodder for what I can teach, everything from the ethic of the link to basic HTML/CSS for formatting, but what I should teach is the more important question.
What’s one thing about blogging you’ve learned and can teach? Or, what’s one thing you still want to learn? Topics, teaching strategies and exercise ideas greatly appreciated.
]]>And so on. It’s your rich heads-up display to the information you’re consuming.
The service is dual-purpose too. Every article you scrobble is logged, and you can track data points like:
On the web application, you could set a “budget” for your information consumption, see areas where you’re lacking and where you’re excelling, and view recommendations for getting up to speed on a subject.
Importantly, the tool shouldn’t be tied to any publication. The New York Times, for instance, could start doing part of this based on passive behavior of logged-in visitors, but it’s probably a narrow scope of the person’s entire consumption.
Bookmarklets are much more user-friendly than browser extensions, and I think services like Instapaper are popularizing them beyond the technorati.
]]>From earlier today at the J-School. Stephen Farrell was one of four New York Times reporters taken captive in Libya and released only a few days ago. Before being welcomed back to the newsroom, he stopped by and talked a bit about his experience in front of a packed house. Money quote: working in a war zone is “big boy’s game, big boy’s rules.”

One, an increasing number of sites now use Facebook and/or Twitter exclusively for their user authentication. In this context, having a corporate-controlled ID is unfortunately better than having no ID. Two, at work I’ve had to ask other people to do tasks I should be doing and I’m done feeling weird about that.
This little ol’ weblog is still my preferred publishing residence and that won’t change anytime soon.
]]>One of the Entrepreneurial Journalism students is moving her project site from Tumblr to WordPress to take advantage of custom taxonomies. I showed her the PHP to register one. She followed my lead by copy and pasting to register the other two. No errors at all, though that would’ve been a good teachable moment. We also talked about template tags. She correctly surmised she needs to replace the existing category and tag snippets on her single.php file with the new custom taxonomy snippets. Lastly, we walked through adding a tag cloud to the sidebar and changing it to use one of the custom taxonomies.
Question: How many times does a person need to review a topic in order to fully grok it?
Another student is in child theme territory for her photo side project. We’re modifying the Fullscreen theme from Graph Paper Press to handle (hopefully) thousands of images on the homepage. Tonight we covered child theme structure, WP_DEBUG, and the HTML, CSS and modifying PHP function arguments of displaying the homepage. We’re just getting started and she wants to have it live by the beginning of New York spring break. Effective project management should be a required course for everyone at the school.
The last student had a few minor questions. These included how to remove an extra menu item that had shown up, modifying the padding and margin of div’s using CSS, and modifying the width of subnav items using CSS. Two more required courses: troubleshooting and accurately stating the nature of your problem.
Again, overall, it was a pretty productive time. I think I’ll continue hosting these on a weekly basis as long as students continue to show up.
]]>Obviously the open question is how you’d collect this data. I suspect some already exists and some we’d have to get creative about. The thought came while discussing a Craft 2 census project this morning. To me, this alternate data set is the missing (and more actionable) other half.
]]>
I have an identity on the J-School network that’s much more relevant than my WordPress.com identity. I should be able to register my website with the J-School’s multisite instance in a similar fashion, and have my identity within the J-School network reference my self-hosted data (posts, status updates, photos, links and so on).
This would be neat.
]]>Obviously the former is a lot less efficient way of supporting. If the system logged this information, it would be much easier to see when we’re “in the red” for one-on-one support, and that we should host a workshop for a given topic.
]]>
Last night between 5:30 and 7, we did another HTML/CSS workshop at the J-School. Twelve people showed up, which was much better than the six or so we expected. The participants were mostly from Interactive 2 although there were a few from other programs who had never touched CSS. Overall, I think the workshop went quite well even though I don’t feel we hit our stated goals and deviated a lot from the written agenda. I’ll review the process and the session notes are at the bottom.
We started planning the workshop a few weeks ago, before I went off on vacation. Originally it was scheduled for March 16th, but was moved back after we realized it conflicted with the Interactive 2 Flash assignment. The 23rd was less than ideal because it’s right in the middle of midterms. As such, the showing was quite good.
Rosaleen put together the agenda, scheduled the room, and created the pre- and post-workshop surveys. I thought all of this came together well, and the exercises she established seemed useful. We only started on one during the workshop however.
The most significant issue was that the conceptual and practical review of HTML and CSS took a lot longer than I expected. All of the Interactive 2 students have had an introduction to this by now, but most were unable to explain back to me what they learned. I ended up spending 40 minutes on this review, at the end of which I felt most understood what they needed.
After the review, we started on the first example. It tangented into how to use Firebug, find attributes, and apply those changes with the Edit CSS functionality. This took 20 minutes or so.
We finished the workshop with Q&A with some of their sites.
Quality of note taking on the Google Doc was as expected during the review, but really dropped off afterwards.
To retain the concepts they’ve learned, I really think they need practical experience as soon as possible. The suggestion I gave them was to do a custom design for their resume page so that it stands alone from the rest of their website. Using CSS specific to the resume page, they can have the rest of the website continue to look as it does but have a completely custom design for their resume. We could sponsor a design competition to see how far they take it.
Lastly, I wish I’ve had each student list off their three actionable takeaways at the very end to see whether we had achieved the stated goal. This would be useful data to capture and reference at a later date.
Including this blog post, the tech team spent about four hours planning and executing the workshop. Our next step is most likely to hold an open work session next Wednesday evening
Photo of the attendees
Announcement:
Questions:
Announcement:
Goals:
What are HTML/CSS?
Install & Open Firebug
How to search for HTML elements on a page with Firebug
How to add changes to your site with Custom CSS WordPress plugin
http://testing.journalism.cuny.edu/ LINKS
HEADLINES
TEXT (paragraph)
BACKGROUND
IMAGES
CREATE TEXT BOX INSIDE A POST
Cesar Bustamante: How to use CSS
Patrick Clark: “resizing elements in my wordpress frame”
Kevin Sheehan: How to make a portfolio website better
Vincent Trivett: “how to find the classes and id’s for stuff that we constructed out of wordpress themes so we can tweak the style in css, customizing the theme a little more”
Kirsti Itameri: “how to customize wordpress themes/create your own theme
This was our previous workflow. Now, I’ve set up Wufoo to auto-update Highrise and our MailChimp email lists every time a form is submitted. Woo-hoo for loosely joined pieces!
]]>We spent the first 30 minutes or so discussing the distinction between scripting language, markup language, and otherwise, and common examples of each. They had prior, very basic introduction to HTML, CSS and PHP, but only a few people even attempted to explain to me what each was. On the subject of HTML, I stressed that it’s a markup language, not a programming or scripting language, that gives structure to content. My working metaphor is that, if the J-School building were a web page, without HTML or CSS all of the building materials would be in a pile of rubble. HTML gives the building structure and CSS gives the walls color, the rooms spacing, and other objects other stylistic elements. I’m finding it really useful to have visual metaphors people can relate to for communicating technical subjects.
On the subject of Javascript, I emphasized the fact it’s different from other scripting languages in that it executes client-side. This allows for a more rich, interactive web application experience because the user can experience dynamic elements on the page without refreshing. I also showed them GitHub’s implementation of push state and why Gawker’s new URLs are the suck. For PHP, I pitched simplicity in getting going and for Python, performance.
After we talked about languages, we spent the rest of the time on APIs, what they are, and why they’re important. I think this was more over their head. One metaphor I used, gross as it was, is that an API is the equivalent of emailing someone with a request for data, and then having that person reply to you with an Excel Spreadsheet. For the other person to understand your request, there has to be an established protocol for making it. Similarly, for you to understand the other person’s data, it has to be returned in a standard format. Abstraction and standards. We reviewed a few different popular websites with APIs, including Twitter and The Times. I also showed them how the J-School website uses the Vimeo API to load a channel of videos onto the homepage.
Preparation for the session was difficult for two reasons. First, I had little knowledge of what they had already covered in the course. Access to prior notes and a syllabus would’ve helped this. Second, there was/is a wide range of knowledge in the room. Some already knew everything I had to cover while others didn’t know anything, nor did they have a frame of reference for understanding. I think involving the people who already know things in the teaching process could make them more engaged in the class. Additionally, I could structure the lesson in such a manner that it had both higher- and lower-level takeaways.
It would nice to compile a few reference links on each topic.
Lastly, on next and all sessions I lead, I should take a picture of the participants.
HTML vs. CSS vs. Javascript vs. PHP vs. Python vs. Etc.
HTML 5: Allows you to change URL without reloading the page. (dynamic refreshing)
APIs (Application Programming Interfaces)
http://hackshackers.com/resources/hackshackers-survival-glossary/
Javascript, AJAX and jQuery
Performance & monitoring
Version control
Redundant backup
]]>Yessir. Good choice of beats too. Curiously absent is the EPIC RAINFALL footage.
]]>
Well, not actually, but I’ll get to that in a moment.
Game plan A for today was to fly to Mulu from Kota Kinabalu (KK) and see the caves in Gunung Mulu National Park. It would’ve been epic. But it didn’t happen. While I was waiting a half hour on Tuesday afternoon for Air Asia to accept payment the MASWings flight from KK disappeared. Out of luck.
Game plan B for today was to climb Mount Kinabalu. Weighing in at 4,095 meters, the mountain is a massive slab of granite. No snow, just a massive two-day slog. We wanted to do it in one. Complication: everyone said we weren’t allowed to do it in one day. Second complication: the two-day, guided, finish on Friday morning and rush to the airport climb costs 950 Malaysian ringgit, or around $300 USD, per person. After we finally bit that bullet, I went to eight different money exchanges to see if they’d let me refill my wallet via VISA cash advance (background: I learned earlier this week I can’t use my OnPoint ATM card with any Malaysian ATMs). Unfortunately, the one money exchange I found, in the capital of Sabah, only accepts plastic with a chip, which mine is not. Out of luck round two.
Alternate game plan K for today was to rent 150cc Kawasaki dirt bikes, and ride from KK to Tuaran to Mount Kinabalu to Ranau to Poring Hot Springs to Tambunan to Panampang and then back to KK. It was epic, mostly because it started pouring while soaking in Poring and rained almost the entire way back. For 45 minutes or so we were actually in a cloud, visibility was all of twenty feet. Started the trip around 7:30 am, ate breakfast, hit Mount Kinabalu around 11 am, left the hot springs at 2 pm, and returned around 5:30 pm. 300 km of riding over just about seven hours. Personal records for David and I.
KK to Hong Kong tomorrow, overnight there, and then Hong Kong to Seoul to New York City on Saturday. Back to another alternate reality.
]]>






































Max depth: 31 meters
Bottom time: 40 minutes
Max depth: 24 meters
Bottom time: 46 minutes
Max depth: 19 meters
Bottom time: 48 minutes
Max depth: 18 meters Bottom time: 44 minutes Notes: fun dive; saw turtles, a ringed pipefish, scorpionfish, nudibranches, anemone fish, batfish, and a giant clam.
Max depth: 19 meters Bottom time: 43 minutes Notes: fun dive; saw one octopus, zebra morey, and coral shrimp.
Max depth: 19 meters Bottom time: 41 minutes Notes: fun dive; saw turtles, batfish, blue spotted sting ray, and a peppermint sea star.
]]>Right now, I’m diving with my friend David in Sabah, Borneo. On Thursday, the Whitman Pioneer, student newspaper at Whitman College, published an article regarding allegations brought forth by Dan Hart about TKE initiation the prior year. I was quoted several times. The quotes are from a recorded Skype/phone interview I did with Pio Editor-in-Chief, Molly Smith, Wednesday morning in my current timezone. On a tip from a current TKE member, Molly contacted me on February 28th to learn about my experiences with TKE initiation four years ago. I feel what didn’t make it into the article is now worth publishing.
According to this year’s Whitman Student Handbook (I don’t have a copy of 2006-2007’s), hazing is “any activity of a physical or psychological nature that is degrading or humiliating to another person.” Whether you like it or not, this is our working definition. The handbook also has a short list of behaviors and activities Whitman College considers to be hazing. I experienced these:
For me, the pivotal moment was Friday evening, February 2nd, 2007, a little while after opting out of what I have in my notes as a “cult-like ritual.” Of the couple dozen rules pledges were subject to, one was the requirement they address active members of the house by whichever name they had given themselves for the hour. One of the actives named himself “Mr. God” at dinner, approached me, and demanded I address him by his name. I refused.
My friends wouldn’t consider me all that religious. I was raised and confirmed Catholic, but think myself more agnostic than anything else. Spirituality, and everyone finding their own for themselves, is more important to me than religion. I am, however, quite against people abusing religion to create and reinforce oppressive power structures.
The active scolded me for not addressing him as “Mr. God” and demanded again. I refused again. At this point, he must’ve realized he overstepped his bounds, and I was refusing for some other reason than to be defiant. All of the pledges were quickly ushered out of the TKE dining room. Actives went upstairs to, I assume, discuss what just happened. This incident was my defining moment. I made the difficult decision to leave initiation (and left a couple of hours later after debriefing with the hegemons).
As a freshman, leaving initiation was synonymous with leaving my Whitman community. All of the strong friendships I developed over the previous four months were in some way affiliated with the Greek system. Out of almost 30 people in Jewett’s 2-West, I believe only two didn’t pledge to a fraternity. By leaving initiation, I single-handedly created a chasm between me and my closest friends, put my entire social life in the lurch, and demolished the start of my foundation for a successful four years at Whitman College.
Case in point: Sam Chasan, my freshman roommate and one of my best friends at the time, said this in support of the initiation process:
I say strong because initiation requires intense commitment by the active members. To those who wish to simplify, and view as negative the initiation practices of TKE, are doing a disservice to themselves. Take a second to look at the men you denigrate: they are your PEERS!! They are your WHITMAN classmates, teammates, group and club mates, ASWC representatives, and so on. Intelligent men. Compassionate men. They are men of character. Initiation is a carefully organized and executed series of events, orchestrated as it is to draw out intense emotions not often seen in our monotonous daily lives. It is unfortunate that those who walk out on initiation believe those emotions are categorically wrong.
On a long run along the Mazatlan waterfront during spring break that year, I listened to an Amy Goodman interview with Philip Zimbardo on Democracy Now! Philip Zimbardo is professor emeritus of psychology at Stanford and famously known for the Stanford Prison Experiment. Read through both links fully. The experiment randomly assigned 24 normal, middle-class, psychologically sound males into a mock prison environment, 12 as prisoners and 12 as prison guards. Their goal was to role-play the situation for two weeks. Zimbardo stopped the experiment after only six days because it had degraded to the point where prison guards were torturing prisoners. Only one person, an outsider, questioned the experiment’s morality, and this questioning brought its end. Everyone else had fully adopted their roles.
Zimbardo argues the Stanford Prison Experiment shows two things. First, situation is a powerful motivator. It can turn normally decent human being into characters they’re not, either positive or negative. As I listened to the interview, I drew a strong connection between why the prison guards acted as they did and why active members in the TKE house acted as they did. It wasn’t so much that they were inherently bad people; rather, the situation they were in had a strong influence on what they perceived to be normal behavior. The power of the situation.
Second, cognitive dissonance is an important concept for describing how these normally decent human beings can internally justify doing things they wouldn’t normally do, or that even go against their beliefs. Here’s a good Science Friday podcast on the subject. In the case of the Stanford Prison Experiment, it helps explain why the prison guards thought it alright to psychologically and physically torture inmates. And in the case of the 2007 TKE initiation, cognitive dissonance helps explain why pledges rationalized accepting the hazing as they did.
After understanding the situation in this new light, I was set on writing a piece for the Pio. I worked as the Photo Editor during my time at Whitman and Sophie Johnson, the editor at the time, said she would run it if I would write it. Obviously, it wasn’t published. I showed an early draft to one of the last people I felt I could talk to. She initiated Delta Gamma that year, said she would side with the TKE house because of the Greek system’s importance to her social life, and recommended I talk to Barbara Maxwell, Associate Dean of Students. Growing even more disenchanted with the Whitman experience, I did this instead. She convened a meeting with the intrafraternity council and I aired my grievances. From that, I don’t know what happened. If Dan Hart, whom I’ve never met, only recently came forth with similar allegations from a later year, I suspect not much changed.
Do the ends justify the means as Greek members say they do? I don’t know, I didn’t experience the ends. I do believe the means I experienced aren’t justifiable in any context. I also believe the activities of TKE’s initiation process, not necessarily its emotions as Sam mentions, are and have been in clear violation of Whitman’s policy towards hazing, as well as the moral standards of all those involved. A healthy dose of transparency, accountability, and courage will be required for genuine change.
A note: this is my personal weblog. I publish comments with a first and last name, verifiable email address, and whose substance tries earnestly to forward the conversation. Everything else will be marked as spam. Thank you.
]]>
































Max depth: 31 meters
Bottom time: 46 minutes
Notes: Dove with the camera; saw wridley’s turtle, white-tip and black-tip shark, sea fan, and a massive school of barracuda.
Max depth: 26 meters
Bottom time: 45 minutes
Notes: Dove with the camera; saw lion fish, trumpet fish, turtles, white-tip and black-tip sharks, and a ghost pipe fish.
Max depth: 20 meters
Bottom time: 45 minutes
Notes: David dove with the camera; entered turtle cave for five minutes; saw turtles, white-tip and black-tip sharks, crocodile fish, and yellow tail barracuda.


Dive day number three. Frigid cold. Sun needs to return to SE Asia asap to battle off the rain. Also, first day of four dives. Pretty wiped out. Planned to photograph with David’s GoPro but it wouldn’t start up as soon as I was underwater on the first dive.
Max depth: 29.3 meters
Bottom time: 49 minutes
Notes: fun dive; saw peacock mantis shrimp, nudibranches, 2 crocodile fish, and banded coral shrimp
Max depth: 18 meters
Bottom time: 47 minutes
Notes: fun dive; saw a turtle resting on the bottom, murray eels, and nudibranches
Max depth: 14.6 meters
Bottom time: 45 minutes
Notes: Navigation dive for PADI Advanced Open Water; 30 meter distance swim (40 kick cycles) return via natural reference; compass 180 degree reciprocal; compass square course; saw morey eel poking out of a hole while waiting for compass and dozens of chocolate chip sea stars
Max depth: 13.3 meters
Bottom time: 41 minutes
Notes: Night dive!!! for PADI Advanced Open Water; practiced close buddy teams; turned off touches while kneeling on bottom to see florescent plankton; compass 180 degree reciprocal navigation; saw squid, lots of crab, shrimp, farm of sea urchins, and a long sea cucumber
Max depth: 29 meters Bottom time: 43 minutes Notes: Deep dive for PADI Advanced Open Water; color chart comparison at depth; compared readout from depth gauges; saw 4 lion fish, turtle, 2 nudibranches, shrimp, damsel fish and trigger fish.
Max depth: 19.8 meters Bottom time: 50 minutes Notes: Fish identification dive for PADI Advanced Open Water; Saw fish from 6 groups: trigger fish, bat fish, goat fish, butterfly fish, damsel fish, and angel fish; didn’t kick the coral (environmental awareness); also saw tiger cowrie shell, varicose wart slugs, and lots of yellowback fusilier.
Max depth: 14.3 meters Bottom time: 56 minutes Notes: Peak Performance Buoyancy dive for PADI Advanced Open Water; buoyancy check at the top; slow decent and neutral buoyant circle around a pile of wood; vertical hover, horizontal face-down hover, horizontal face-up hover; efficient, long, slow kicks practice; saw sand, rubbish, massive sea cucumber, and damsel fish.
]]>
There’s something wrong with this picture. And it has to do with “All External.”
We’re using a few different tools at the J-School to monitor performance and uptime of our webserver. Munin is one, Pingdom is another, a bash script running on cron is a third, and the fancy New Relic is the last. Two weeks ago, just as I’m leaving NYC to ski on the west coast, the bash script, which downloads the homepage of two sites every two minutes and greps the response, starts sending email notifications of response failures.
These notifications begin arriving at the rate of a dozen plus per hour, way above the threshold of normal operations. Pingdom was quiet, so I assumed it was a performance issue and the server hadn’t gone down. With how the bash script is currently configured, it uses cURL to download the homepage and then searches the HTML response for a specific string of text. cURL’s request timeout is set to 20 seconds. If the string isn’t found, it will email web ops with an error notification and the response received. All of our notification emails included pretty blank text files as attachments.
The situation: I’m on vacation for the weekend, traveling and skiing, and our network of 250+ websites is regularly experiencing 20 second or more page load times. In the time I can allocate early morning, in the evening, and driving to Santa Clara, I frantically try to re-enable Nginx FastCGI caching. I figure if I can get static caching in place, at least the majority of the requests will be quick and I can solve the application performance problems when I return. No dice. I try and try and try and all my cache log showed was “MISS”.
New Relic is a tool I had installed on the server a few weeks prior. It allows you to see inside web applications in realtime, giving metrics like average response time, Apdex score, and requests per minute. New Relic is also quite pricey but, as of yesterday, Rackspace Cloud customers can use the Bronze version free of charge. On its average response time chart, the tool breaks the time into PHP, database, and “All External.” Our PHP and database responses were quite normal, but whatever was going on with “All External” was taking our excellent sub-400 millisecond response times to the moon.
Tuesday evening, thanks to a fresh pair of eyes from my colleague Min Su, we figured it out. On the previous Friday afternoon, a student who will remain nameless added one of WordPress’ standard RSS widgets to their personal homepage to display their latest posts. Instead of entering the RSS feed into the settings, they entered the URL of their homepage.
Now, this site doesn’t yet receive a lot of traffic, but it is indexed by the ol’ Goog. Every time the homepage was requested that weekend, the RSS widget would request the homepage again. And so on and so on. New Relic reports these as requests to external services. The response time grew as the infinite spiral went deeper. It’s worth noting Nginx handled this traffic in the most performant manner as possible; unfortunately, it doesn’t help all that much when your web application launches a denial-of-service attack on itself.
]]>
Tonight at 12:50 am, I’ll be leaving NYC for Seoul, then Hong Kong, then Kota Kinabalu, then Tawau, and finally arriving in Semporna mid-afternoon on Monday. For two weeks, I intend to dive and explore Borneo with my old roommate, David (don’t worry mom, he’s working on his divemaster certification as we speak). In the pursuit of minimalism, I’ve managed to fit everything I need in to my 20 liter Black Diamond pack. Except for my book to read and the guide book. Hmm.
]]>
Quick splash page I put together for the Tow-Knight Center for Entrepreneurial Journalism in preparation for the launch reception on March 9th. Code is available on GitHub.
]]>My goal is to make each primers on core concepts, include usable takeaways, and offer lots of links for later digestion. In the first, I intend to cover topics like backups, version control, development sandboxes, and performance, a few different tools, and several of my favorite plugins. See my notes in progress on a Google Doc. In the second, I’d like to give a complete overview of migrating to WordPress, including how to migrate your archives, what to look for in a web host, and where you can train your staff, and then have a healthy Q&A session at the end. These notes are also in progress in a Google Doc.
If you have any concepts, tricks, or wisdom you think I need to cover, please let me know. I’d be happy to credit you in the presentation. I also intend to publish my full notes for reference prior to the sessions.
]]>First point: Let’s approach journalism as the science for civic participation. Give journalism the goal to help us improve our standards of living, create a more just society, and so on. Make the goals measurable in various ways, and we can track our progress towards them.
Science, according to Wikipedia, “builds and organizes knowledge in the form of testable explanations and predictions about the world.” A report in a scientific journal has an abstract, methodology, presentation of the data, discussion and conclusion. News articles typically have the first and last. They’re missing two critical pieces: presentation of the data and the methodology used to collect the data. Reproducibility is a vital aspect of the scientific method (related: Jonah Lehrer has a fascinating article on this topic in the New Yorker).
Journalism has no equivalent. As a profession in existential doldrums, we say we bring truth to power while, at the same time, questioning ethics when Anderson Cooper calls out the lies of the state. This is broken. Jay Rosen likes to say “here’s where I’m coming from.” It wants to include “here’s my conclusion, and here’s the data and methodology to back it up.”
For this month’s Carnival of Journalism, David Cohn asks: considering your unique position, what can be done to increase the number of news sources? Last month, I did a time-consuming content analysis of the two Locals. I think the question afforded it. This month’s question makes a false assumption: improving journalism requires a growth of news sources. Look at Google News right now:
We have a metric ton of news sources producing a metric ton of content. 2,535 stories about the Bahrain story, 1,002 stories about Iran, and 392 stories about Ben Ali’s grave condition. I’d be willing to bet there are a countable number of facts contained within all of those stories, and the actual collection of those facts took less than 5% of the total resources used.
Everyone can publish, but the question remains whether what they’re publishing is useful. Instead of increasing the number of news sources, we should focus on producing durable data and the equivalent tools for remixing it. Data can be the average wait time at the restaurant I’m eating at this evening, or the cost and freshness of produce at the various bodegas in my neighborhood. Or, if I’m searching for office space, whether the building I’m looking at actually recycles like they say they do. Functional databases make up two-thirds of the Texas Tribune’s traffic. When information is managed at the data level, it can more be easily reused in different contexts with different tools (long form Instapaper article vs. app with location-based push notifications). Expose the original data and methodology used to achieve the conclusion, and journalism can be reproducible.
]]>Excellent state of the field analysis. All challenges to solve.
]]>
Crashed at Sunnyside Lodge this past weekend and skiied two days at Squaw Mountain with Miles. No fresh snow but the weather couldn’t be beat.
Saturday: 28,500 feet of vertical from 31 runs over 7 hours. Beer and chili fries for lunch. Grilling with Burt Herman and his friends in South Lake.
Sunday: 22,800 feet of vertical from 24 runs over 5.5 hours. Long drive back to San Francisco. Homemade pizza dinner with Hilary Titus and her roommates.
Monday: early morning flight back to NYC just in time to take the lady out dancing for Valentines.
]]>Ski or die man!
]]>
After much deliberation: 11" screen, 128 GB flash drive, 2 GB memory. Initial observations: it’s so light and applications load in half of a heartbeat. Here’s hoping for an epic battery life.
]]>
On Saturday night, well, Sunday morning between the hours of 12 am and 3:30 am, I switched our production web server from Nginx/Apache to Nginx/FastCGI/PHP-FPM. My original reasoning for the project was an understanding the latter combination could perform at a higher level. Unfortunately, it doesn’t appear to do so out of the box.
]]>First, capturing class content. There are a discreet number of facts to presented in this subject area. Along with that, there are examples to be given, exercises to be done, and questions to be raised. Inventing this from scratch each time, or only having access to your prior syllabi, seems completely antiquated. It would be wonderful to be able to use historical data on how others have taught to improve your own approach. If it was a structured database you could access, even more the better. This doesn’t solve the disconnect between teaching and self-directed learning, but it could optimize the quality of teaching.
Second, identifying where students are at and where they want to go. The latter presupposes students know where they want to go, but I suspect most have some idea. Again, both of these points of data currently aren’t captured in any sort of meaningful way. This causes the instructor to prepare course material based on what they perceive necessary, instead of the more effective approach of tying it closely to demand.
Lastly, adapting teaching approaches. For the class this afternoon, there are going to be some number of students who took the January Academy WordPress workshop(s) and some number who haven’t. There are going to be some number of students who have websites set up and are ready to take them to the next level, and there are going to be some number of students who haven’t. The problem is less when class size is 12 to 15, but becomes exponentially worse when you add more students. There must be a way to scale the experience of one-on-one teaching.
]]>A search for my name currently looks something like this:
Ideally, the search functionality should support these requirements:
As far as I can tell, the options on the table are Sphinx, Solr, and search as a service from IndexTank. Sphinx appears the lowest-hanging fruit; Solr takes a couple of weeks to set up and configure, and IndexTank costs money for anything over 500 queries/day.
For Sphinx, there’s a WordPress plugin making it easier to integrate the two. The author has reasonably detailed documentation for installing Sphinx via the admin, if you chose to do that.
Another sys admin has written a three part series on extending WordPress search with Sphinx.
Extending search sources to custom fields is apparently as simple as adding to the select query.
The best way to dynamically add new blogs to the index for WordPress multisite is by editing the .conf file, although I’ll need to develop a way to add a unique index for every piece of content.
I intend to get Sphinx working on the development environment first, document the steps it took, then implement on production.
]]>First, the why. Educational institutions often have long-standing ties to a local community, both in terms of physical location as well as relationships. In New York City, there are families with multiple generations who have attended CUNY. Educational institutions are also in a unique position where they have access to continually fresh human capital. These are the strategic advantages.
As to the how, there are dozens of projects we could embark on. For instance, we could team with computer science students build a tool that maps a community’s information needs. Or we could offer low-cost multimedia reporting courses to active community members in hopes they will take the initiative to cover their own neighborhoods. Or we could reorient the entire institution to be a working newsroom and task hundreds of students as boots-on-the-ground reporters.
Before going off the deep-end, it’s critically important to ground big ideas in today’s reality. Educational institutions are cautious publishers because of libel possibility. Workshops require space and security staff to check people in. More often than not, their technology departments are optimized for providing IT support, not innovating with content management systems. Once you have this valuable context, it’s more straight-forward how you can make legitimate change. We can hack technology and we can hack systems.
How you frame the problem also determines the success of your solution. In my mind, “hubs of journalistic activity” provide a space for communities to: access accurate and impartial information, learn about topics affecting their civic well-being, and make enlightened decisions. These topics range from transportation to education to environment to governance. For many institutions of higher education, the local community is where they can have the most significant impact.
Let’s use data and interviews to paint a picture of university-sponsored hyperlocal journalism as it currently exists in New York City. As examples, look at The Local East Village (LEV) and The Local Fort Greene-Clinton Hill (FGCH) during November 2010. The LEV is an operation run out of NYU, has content contributed to it by roughly 35 students from an elective class called “The Hyperlocal Newsroom,” and is edited full-time by Rich Jones. Kim Davis was the community editor in November. The FGCH website has been a CUNY Graduate School of Journalism project since January 2010 and is managed by two adjunct faculty, Annaliese Griffin and Indrani Sen. Two smaller classes participated in creating content for the website.
Both publications held weekly budget meetings last November to discuss story ideas generated from emails from the community, press releases, watching other local news operations, and general brainstorming. When not in the same physical space, communicating the editorial workflow included email, Google Chat, text and phone. Breaking news generally received a same-day turnaround while other pieces like features and multimedia had a longer production cycle.
Just by the numbers, the LEV, in its 3rd month of operation, published 100 posts from 48 authors totaling 46,289 words. Rich Jones feels this is “roughly 70 to 80 percent” of the story ideas they generated. 33 posts were from 19 community contributors and their posts were 369 words on average.
While trying to cover everything, Rich explains the “challenge for students is working around their class schedules for story assignments and filing stories” and the “challenge regarding the community is helping them become accustomed to professional-level standards that some – through not fault of their own – are largely unfamiliar with.” He also says “feature stories are most likely to be picked up by contributors. The most difficult stories appear to be hard news pieces (fires, crime, etc.) which involve multiple sources and contacting the authorities such as police and fire officials.”
The most discussed LEV stories based on comments were “Examining M15 Bus Line Changes”, and a profile of John Penley, both which received 5 comments. On average, posts had 0.8 comments a piece. The Local East Village had a grand total of 80 unique commenters.
To compare, in November 2010, FGCH published 105 posts from 46 authors totaling 46,945 words. Annaliese Griffin thinks this to be “maybe 75 percent” of the story ideas they generated, but explains it “always feels like there’s so much more we’re not covering.” 36 posts were from 23 community contributors and their posts were, surprisingly, 610 words on average.
When asked about the successes and challenges of working with students and community contributors, Annaliese explains:
Scheduling is the big problem with students. They have to balance Local assignments with stories for three other classes. You can’t just say, “This event is happening today, you have to cover it.” It’s always a negotiation, which ties your hands as an editor. The successes have been many, though. Seeing students gain story sense and understand not only what needs to be covered, but how best to cover a community has been great. Also, we worked on several crowdsourcing projects that were fun and innovative. Here’s a post outlining my favorite student work from last semester. With community contributors we’ve found that straight news, especially crime and anything dealing with city agencies is a challenge. Reporting is hard work that takes skill that needs to be developed over years, not afternoons. We’ve gotten great features and opinion pieces from community contributors, and our schools coverage is about half reported by students, half community contributors and concerned parents. It’s a nice mix.
She adds “schools, arts, and local going-ons” are good fodder for community contributions, and that they want The Local to be the communication platform for micro concerns like “cracked sidewalks, trash pick up, noise complaints, [and] great art programs in schools.”
The most discussed stories based on comments were “IMHO: Don’t Leave District 13, Stay and Help” (71 comments), “Opinion: Let’s Work Together, Parents” (45 comments), and “Moe’s Bar to Close in February” (32 comments). On average, posts had 4.5 comments a piece. The Fort Greene-Clinton Hill website had a grand total of 303 unique commenters.
On the technology side, both sites are on the NY Times’ blog network and running WordPress 2.9.2. Images and photo galleries are managed by Flickr.
Innovation is possible, it just takes hard work, persistence, and meta-innovation.
For example, Edit Flow and Assignment Desk are a couple of projects I’ve been helping develop for the last year. They work together. Edit Flow manages your editorial workflow inside of WordPress with custom workflow statuses, editorial commenting only accessible in the admin, and a story budget to view all upcoming content. Assignment Desk allows community members to pitch story ideas, vote and volunteer for them, and then lets the editor assign volunteers to different roles in a story. Both are open source WordPress plugins anyone can install.
Jay, Erik, Matt, and I have been trying to get these plugins deployed on the NY Times servers since the launch of The Local East Village. The project has the hallmarks of collaborative innovation. Jay, Erik, and Matt are at NYU and I’m at CUNY. Both of The Locals would benefit, and other news organizations can adopt future improvements we make based on feedback from Rich, Annaliese, and Indrani. Unfortunately, for a variety of reasons, the plugins still aren’t installed (although I have my fingers crossed it will be any week now).
Tremendous raw potential exists at educational institutions. I’d personally love to evolve Assignment Desk so that it’s the tool to go to when you need to find someone to cover a story. It could build suggestions based on comment quality, past post topics, or what you’ve filled out in your bio, and integrate with Google Chat and Foursquare to determine your prospect’s availability. The technology can be solved with hard work. We need more people who are persistent and can find new ways to make large elephants dance.
For those interested, my code and data is posted on GitHub. You can get a sense of how the stats collection progressed (and also how my post evolved) from the commit log.
Once I established the most effective way, collecting the data was actually quite simple. WordPress usually has a URL structure that supports filtering posts by date. Then, for any given URL, you can access an RSS feed for all of the posts on that date by appending “/feed/”.
The script I wrote generated day URLs for the entire month (e.g. http://eastvillage.thelocal.nytimes.com/2010/11/28/), downloaded the RSS feed, and parsed out the permalink and post ID for each post. MagpieRSS is a simple PHP-based RSS parser for the job.
Using the permalinks identified from the RSS feed, I used another tool called PHP Simple HTML DOM Parser to download the entire HTML page for the post, and then parse out the data points I needed, including author, author type, body content, post category and tags. Once I had the data, I saved it to the database.
If the site you’re scraping gives you full body content in the feed, you can probably skip the second step.
The only downside to accessing the original permalinks by RSS is that WordPress offers 10 items per feed by default, and doesn’t support pagination. Most admins don’t change this. If there were more than 10 posts published in a day, you’d miss data. Similarly, if there are more than 10 comments, you only get the first 10. Because of this, my data set only has 10 of N comments for several of the FGCH posts.
There are a few things I’d like to have tabulated if I had more time (I’ve already spent 20+ hours on this project). First, I’d go through each post and map it to a narrow set of topical categories. These categories would be the types of information needed by the given community (e.g. entertainment, governance, education, etc. ). Second, it would be amazing pull out all of the links in the body content, sort them by internal vs. external, and use that information to determine which other publications were most commonly linked to. Lastly, and this might even be a standalone WordPress plugin, I’d love to generate a network diagram of which tags were used on which posts, and use that to draw relationships.
]]>Sunday evening, I created a Github repository for two reasons: to see how my code is evolving and to track step by step how I’m putting this data together. After all, journalism must be reproducible.
Now that it’s closer to deadline, I want to open the floor. What data points would you like to see established about The Locals? As of right now, I know that the LEV (Local East Village) produced 100 blog posts in November 2010 from 29 authors and 19 community contributors. The FGCH (Fort Greene-Clinton Hill) produced 105 blog posts in November 2010 from 23 authors and 23 community contributors. The rest of the questions I’ve established are in my research notes.
P.S. Another part of the experiment is to see how well Git works as a versioned authoring tool.
]]>For the last six months, I’ve been working regularly on four different Macs. At home, I have a MacBook and an iMac, and at work I’ve had a MacBook Pro and an iMac. To keep the system environment similar, I’m a reluctant user of MobileMe. It has its downsides, but it’s really the simplest way to sync everything from my contacts to the icons in my dock. For some applications, I’ve noticed it will even sync your license. Authenticating the machine against MobileMe is the first step I take.
Google Chrome is my browser of choice. I trust Xmarks to keep my small selection of bookmarks in sync across browsers and across machines. My homepage is “about:blank.” Once I have my browser set up, I download Dropbox so I can start restoring my files and other application-specific preferences. As of today, my Dropbox is at 41.1%, or 21.2GB. It’s good to install Dropbox early so it can start pulling data down. Dropbox also installs Growl, a system notifications utility, which is nice because I use it for other applications.
For development, I use a combination of TextMate, Git, MAMP, Sequel Pro, Firebug, the default Mac OS X terminal, and Cyberduck. TextMate is a nice text editor with useful features for writing PHP, Python, Javascript, or HTML/CSS. I’m certainly not a power user through. Git is my new version control software of choice, and I generally use it in conjunction with GitHub. For instance, the J-School has all of our code in public repositories with multiple collaborators. MAMP takes the fuss out of running a web server on your local machine. Sequel Pro is an amazing, repeat amazing, tool for futzing with databases. Most hosting comes with phpMyAdmin. Forget that: Sequel Pro blows it out of the water. Firebug is the defacto standard for working with CSS because you can see all of your potential changes live in the browser. Lastly, Cyberduck is my go-to SFTP client. Its nicest feature for is the ability to open a file on a remote server in TextMate.
A while back, I made the switch from Gmail’s web client to Apple Mail. I love me some Gmail but Firefox kept freezing up and I’d lose my email window amongst all of my tabs. For most purposes, Apple Mail and IMAP works just fine. Contacts work out of the Address Book and you have an automatic backup copy of your correspondence. To mimic one-click archiving, I’ve installed a program called Mail Act-On.
Skype and Adium are my chat clients. Nothing too fancy there.
For reading and writing, I use Reeder and MarsEdit, respectively. Reeder is a gorgeous RSS reader that uses the reading list you already have in Google Reader. MarsEdit isn’t the greatest blogging tool in the world but it works with WordPress and gets the job done.
Last but most important: Alfred, Divvy, 1Password, and Skitch define my productivity. Alfred, an application quick launcher, makes launching any application, or finding a contact, a few keystrokes away. Alfred is also significantly faster than Quicksilver. Divvy is neat tool for resizing windows with a keystroke. I find it most handy when I start spawning too many terminal windows. 1Password handily generates a unique password anytime I’m signing up for a new account, stores them in a secure database synced via Dropbox, and lets me use the password when I need it thanks to minimal browser extensions. Skitch is absolutely what you need to communicate visually. Capture any part of your screen with a keystroke, easily annotate the image using the pop-up window, and upload the image to Skitch, Flickr, or your own server for sharing.
Fifty minutes later, I’m back in business.
]]>Notice that I used the word allocation above. Allocated means not vested. In my mind all founders stock should have either a milestone or time based (or some mixture of the two) vesting schedule. If you want to know why find someone to tell you a story about a cofounder who walked away from the company and is still holding a 25% ownership stake. Trust me. It creates problems. Personally I prefer 25% one year cliff vesting with 6.25% quarterly vesting thereafter combined with individual milestones.
It’s all about K.I.S.S. Lance argues against equal equity distribution and for dividing it based on contributions of time and expertise. One approach is to determine the valuation of the company, and then use a function of proposed wages and time contributed to divide up ownership.
Equity distribution amongst startup co-founders?
Technically, equity distribution is proportional to the “value contribution” by each stake holder. In general, tangible contributions (investment, land, resources) are considered much more important than intangible contributions like experience/expertise.
The options seem to be 50/50 or distribution as a function of contributed value. People answering the question lean more towards the latter and offer some suggestions as to how to do it best.
Calculating Partnership Equity Splits
Potential formula for equity distribution: break down money to be invested, time to be invested, and experience of partner into percentages, and then determine percentage contributions of each partner. This breakdown then determines overall split of shares.
How do I survive when starting a business without a paycheck?
There are very creative ways to live cheaply if you’re dedicated. The best response in my opinion is to live out of your car and buy a gym membership for exercise and showering.
Equity-Split Results, Part 1: When Do Teams Split Equally?
Interesting chart comparing different situations. An equal split is more likely amongst smaller teams coming from similar backgrounds that divide equity at the start of the project or company.
Dividing equity between founders
One thing I’ve also noticed is people tend to overvalue past contributions (coming up with the idea, spending time developing it, building a prototype, etc) and undervalue future contributions. Remember that an equity grant is typically for the next 4 years of work (hence 4 years of vesting). Imagine yourself 2 years from now after working day and night, and ask yourself in that situation if the split still seems fair. Another consideration is if one founder has had greater career success and will therefore significantly improve the odds of getting financed at an attractive valuation. One way to figure out how much this is worth is to estimate how much having that founder increases your valuation at the next financing and then, say, split the difference. So if having her means you can raise $2M by giving away 30% of your company instead of 40% of your company, let that founder have an extra 5%.
Variables to potentially consider include: past and future contributions, career success, and who had the big ideas (and whether those ideas have any technology or intellectual property associated with them).
]]>After the Deadline is a service providing super-intelligent spell-, style-, and grammar-checking. It would be sweet to see a similar service offer real-time sentiment analysis on your support responses.
]]>
Redesigned the landing page for the Entrepreneurial Journalism program at CUNY on Monday afternoon. Previously, it was a straight page with about 2,000 words of text. My goal was to convey much of the same information in a much more concise and approachable manner. We’re also starting to think about different calls to action we need to include on the page with the flows associated with each.
Overall, I’m happy with it’s functional utility. The program courses will eventually link to landing pages for each, and the blue links will help add more balance to the page.
For archival purposes, I’ve also taken a screengrab of the entire page.
]]>


Pretty neat. The hotspots in each city are most commonly where I live and work. Unlike Zach, I check-in copiously, even at private residences, as a way of logging where I’ve been. The most unexpected insight from building these heatmaps is the sheer distance between Portland-area check-ins. It makes sense, but also is surprising compared to the other two cities.
]]>There’s a balance to my RSS consumption. I subscribe to sites like Techmeme and Mediagazer to keep tabs on the zeitgeist. Nieman Lab and Romenesko are requirements to keep up with the industry. When they publish, Ethan Zuckerman, Jonathan Stray, Paul Graham, Mark Pesce, and Stijn Debrouwere always offer unexpected insight. I also subscribe to a dozen or so people’s personal Twitter accounts, partly because they share good links and partly to keep up with what my friends are up to.
My Instapaper is mostly fed by longer items I come across by RSS, the Instapaper homepage, or Give Me Something to Read.
As far as podcasts go, there’s another dozen or so I listen to on a regular basis. These include Spark from CBC Radio, BBC Digital Planet, Stanford’s Entrepreneurial Thought Leaders, a few from FORA.tv, IT Conversations, NPR’s Planet Money, WNYC’s On The Media, Peter Day’s World of Business, Rebooting the News, Seminars about Long-Term Thinking, and This Week in Tech. Podcasts are likely my favorite form of media. They’re good fodder for daydreaming during long runs or workouts.
If you’d like, you can also download my whole OPML file.
]]>Also, I arrive at 4:56 pm local time on Delta 2799 if anyone wants to share a cab with Cody and I. He gets in a little earlier.
]]>Thanks to Mo Jangda, Scott Bressler, and Andrew Spittle for contributing their time and expertise to this project.
For a video introduction to the most recent release, check out Andrew’s awesome screencast.
If you take the time to give Edit Flow a spin, we’d love to hear what you think of it. You can also drop us a note at hello@editflow.org

Permalinks should be permanent. If they aren’t, you’re sinning against the web. The challenge with paragraph-by-paragraph permalinks in WordPress is that content is stored at the post level, not the paragraph level. There’s no such thing as a unique ID for each paragraph. Yet.
When the post is first published, we could parse the content for the paragraphs. We’d then stick each paragraph in a custom field with its canonical ID. As the post is loaded, we’d check each graf to find its corresponding custom field value and build the WinerLink from its canonical ID.
This approach would make it more possible to persist permalinks as the post is updated. When the author saves updates to the post, we’d parse all of the paragraphs again. For the ones that matched existing custom field values with 90 or 95% similarity, we’d just update the existing value with new paragraph data. New paragraphs would have new unique IDs generated for them.
We’d be backwards compatible with existing WinerLinks with a bit of Javascript on the front-end. All of the paragraphs have a specific class and we’d just match relative link to the order of paragraphs on the post.
The more obvious open question is what sort of performance cost this processing on the fly will take and whether there’s any hope of caching it.
]]>With WordPress, Nginx is often used in a few different ways: to serve static media assets, to execute PHP for WordPress, or to reverse cache Apache responses. You’ll want to install Nginx, put it in front of Apache, and then choose one option or go for all three. Mike Green has comprehensive documentation to cover the first and third scenarios. It’s more or less what I did at the J-School.
Epic foo is using Nginx as a reverse proxy cache. “Reverse proxy cache” means Nginx will generate a static cache of everything Apache responds with, and then serve this cache as long as you’d like. For us, this means homepage response time has dropped from an average of 1.5 seconds to around 25 milliseconds. On pages without a lot of secondary images and Javascript (e.g. not the homepage), load times are now wicked fast.
It’s worthwhile to note we’re only serving cache to non-authenticated users. Students and faculty expect our website to behave like an application, and to have changes they make appear immediately. This is less of an issue for other visitors. Caching also gives us protection against bursts of unexpected traffic.
Proxy caching was deceptively simple to implement. I spent around 15 work hours in September trying to get it to work, gave up until November, and then solved the problem in 15 minutes with a stroke of brilliance. Originally, I followed the configuration settings specified in Dan Collis-Puro’s awesome WordPress plugin and it took our setup to 80% completion. I then learned the most important thing is to tell Nginx to log cache hits; this makes it far easier to determine whether caching is working or not. The second most important thing is to turn proxy_redirect off. I still don’t fully understand what the declaration does, but it was the crucial missing piece. Seeing dozens of “HIT"s scroll by never felt so good.
Check out our commented master Nginx configuration file [txt] and the configuration file specific to journalism.cuny.edu [txt].
]]>The first type of relationship could be a series. The relationship type would be managed with custom taxonomies.
When writing a post, the author would indicate the posts’ relationships to other posts in a post metabox. After publishing, an infobox would automagically appear on the public-facing view for all of the related posts.
One question is whether the relationship would be defined by the series of posts, or whether you’d want to have a separate, customizable relationship object so you could personalize the infobox.
With this type of low-overhead but valuable functionality, you’d win a whole lot of context for the first-time reader.
]]>What ever happened to the Populous Project, and the Knight Foundation’s smooth $275,000?
Why this is an important story to be told: The Knight Foundation espouses “informed and engaged communities [that] lead to transformational change” except, apparently, when it’s inconvenient. A significant portion of college media is locked to a proprietary publishing platform that takes most, if not all, of their online advertising revenue. In order to build financially viable businesses online, these publications need to take control of their technology. Stories like the Populous Project don’t inspire the trust required for organizations to collaborate on their technology and benefit from the effects of a network of innovation.
Leave specific questions you want answered in the comments.
]]>
The Postal Service’s change of address web application has one of the nicest, most intuitive user experiences I’ve come across in years. In particular, check out the appropriate use of font size and color, clear language, progress breadcrumbs across the top, and the live-updating summary in the right rail that follows you as you scroll down the page. It was uncommonly pleasurable to use.
]]>You recently quit both Twitter and Facebook. As someone who works in Internet and media, what challenges have you faced? Will you come back?
Quitting Twitter has been a mixed bag. The most significant challenge is not being able to influence the news innovation zeitgeist as directly or as visibly. This isn’t to say I was all that influential to begin with; rather Twitter has better mechanisms for understanding how what you’re mindthinking resonates with others. Retweets or click-throughs indicate whether you’re on point, @replies show whether people want to engage in conversation on a given subject, and who’s following you is a sign of your reputation within that community. It isn’t quite the same publishing on a personal website where the subscription mechanism is RSS, interactivity is limited to longer-form commenting and trackbacks, and there’s no way of presenting who reads you.
I suppose the second most difficult challenge is tracking conversations. There were 100 or so people whom I’d pay the most attention. The real-time nature of the platform, coupled with people being logged in all the time, creates a space like a large ballroom where you can go ask someone a question at any time. I can still hear snippets of conversation by subscribing to a limited number of people by RSS, or paying more attention to roundups like Nieman Lab’s, but the experience is only 50% as engaging as it used to be.
On the flip side, there are two things I’ve been fortunate to escape: the increasingly loud echo chamber any time a bit of news breaks is artfully manufactured and the circular, inward obsession with “social media” on “social media”.
Quitting Facebook was easy, except for a bit of hate from the girlfriend. The only use I’ve been missing people for is looking people up; that Facebook is a structured people database is quite nice. There should be an open equivalent based on microformatted websites.
The honest truth is the first few weeks weren’t tough at all; not spending all my time on (mostly) Twitter and (less so) Facebook meant I’ve had a lot more time to work on new releases for side projects, read long-form, and hang out with my girlfriend. The last week or so has been difficult, I feel disconnected from the hive mind, but I won’t be back until there’s an open, interoperable protocol for real-time publishing I can run on my own server. It’s pretty awesome to be able to look up and reference your content from a few years back.
The river must flow. You can build a dam but the water will find an alternate path.
]]>Both Google and Facebook are run like absolute monarchies in which hundreds of millions of users (digital serfs, some might say) have created identities. Rather like mercantilist countries in the offline realm, both companies operate policies to protect this asset.
Brad Burnham at Union Square Ventures, Jun. 10, 2010:
Facebook is a government. Facebook’s users are citizens, and Facebook’s applications developers are the private companies that drive much of the economy. Apple. Twitter, Myspace, Craigslist, Foursquare, Tumblr and every other large network of engaged users (including some services of Google) plays a similar role. We have always tacitly acknowledged this. We talk about these networks as communities, communities have governments.
David Carr, Dec. 19, 2006:
What’s being concentrated, in other words, is not content but the economic value of content. MySpace, Facebook, and many other businesses have realized that they can give away the tools of production but maintain ownership over the resulting products. One of the fundamental economic characteristics of Web 2.0 is the distribution of production into the hands of the many and the concentration of the economic rewards into the hands of the few. It’s a sharecropping system, but the sharecroppers are generally happy because their interest lies in self-expression or socializing, not in making money, and, besides, the economic value of each of their individual contributions is trivial. It’s only by aggregating those contributions on a massive scale - on a web scale - that the business becomes lucrative. To put it a different way, the sharecroppers operate happily in an attention economy while their overseers operate happily in a cash economy. In this view, the attention economy does not operate separately from the cash economy; it’s simply a means of creating cheap inputs for the cash economy.
We need a people’s revolution.
]]>Susie: When did you start using Twitter? Was it for personal, professional, or educational purposes?
I’m almost positive I joined Twitter in April 2007, although I don’t think I started using it regularly until that summer. Since episode 1, I’ve been a regular listener of Leo Laporte’s This Week in Tech. I believe I heard Twitter mentioned first in this episode, and signed up shortly after.
In 2007, all use of Twitter was experimental. There was no distinction between personal, professional, or educational. It was a new tool, and people had to invent how to use it. Since the beginning, up until about three weeks ago, I used Twitter as a mix of all three. I posted images from awesome vacation sights, scored a two-year gig at Publish2 by tweeting “I want to live in startup land”, and tapped the knowledge of people smarter than I by tweeting questions I’ve run into.
Susie: Have you always been open to using Twitter?
Yes, until three weeks ago.
Twitter is/has been an amazing communications platform. When I started, the advantages to Twitter over other platforms were three-fold: forced brevity, serendipity from asynchronous relationships, and real-time updates.
Tweets are limited to 140 characters. Because of this design constraint, the cultural focus became pithiness. Pithy updates about what you’re working on, pithy reports from the conferences you’re attending, and pithy descriptions of (along with the link to) the brilliant article you just read.
Furthermore, you can subscribe to this pithy information stream from anyone on the platform. Most of the time, the thought-leaders of whatever context you’re passionate about aren’t in your same geographic vicinity. People like @jeffjarvis, @cshirky, @zephoria, and @timoreilly. You can’t just drop in the room to hear them lecture, or invite to coffee. On Twitter, however, you can and you can.
Lastly, you can do all of this in real-time. Publishing becomes almost conversational. For a couple of years, I even had every tweet sent to my phone as text messages.
Unfortunately, there are downsides to Twitter that, three weeks ago, overran the positives. I haven’t established my thoughts well-enough to go into too much detail, but I will say a couple of things.
I tired of not having full access to my data. You’re only permitted to access your last 3,200 tweets. Search is a terribly mangled mess, and only goes back seven days. Think about it this way: Want to find your notes from the conference a year ago, or your updates from your vacation to India two years ago? Good luck, it’s technically impossible. There’s no way to export your data either.
I also am increasingly wary of letting a corporation control my namespace and identity without being guaranteed specific rights. Like nearly every other service on the web, Twitter’s Terms of Service has a clause explaining they can delete you at a moment’s notice:
Twitter may stop (permanently or temporarily) providing the Services (or any features within the Services) to you or to users generally and may not be able to provide you with prior notice. We also retain the right to create limits on use and storage at our sole discretion at any time without prior notice to you.
If Twitter is your primary method of communicating, as for many Facebook is becoming, then you absolutely must have the right to a portable identity.
We urgently need an open Twitter protocol that co-exists with Twitter.com. Part of that needs to include a decentralized reading interface so that reading is closely coupled with publishing. I’d prefer spend my free time and attention working on that, rather than “serfing the web.”
Susie: Have you taken any classes where the instructor used Twitter as a teaching tool? If so, what class and in what ways was it used?
No, I haven’t taken any classes where the instructor used Twitter as a teaching tool.
For fall 2009, I signed up for a number of entry-level geography courses. In one of the classes, the professor made it clear laptops could only be used for taking notes. If caught using it for anything else, the infraction would be grounds for a “F” in the course and forfeit of course credit. If you used your cell phone for texting, you’d lose an immediate letter grade. Proof is in a PDF of the syllabus.
On the second day of the new term, I flew down to San Francisco for the Online News Association’s annual conference. There I had the fortune to meet people like Aron Pilhofer of The New York Times and Brian Boyer of the Chicago Tribune. Publish2 won a big ol’ award on Saturday night. It was an extraordinary time that reinvigorated my enthusiasm for helping reinvent the news industry.
I can’t say the same about classes whose structure fundamentally cripples new opportunities presented by technology. Think about it: the web is potentially more disruptive than the Gutenberg printing press. It’s in the process of flattening the music, movie, and news industries, and will change education, government, and healthcare in the future. In most traditional classes, not only do you not have the chance to experiment with the web, but you’re actively discouraged from doing so. This is broken.
The Monday following ONA, I informed the registrar of my intent to withdraw from my classes.
Susie: What do you think are the benefits of using Twitter in the classroom? Do you think there are any negative aspects (i.e. distraction)?
See my response to the second and last question for the benefits. Regarding whether Twitter is a distraction or not, separate the tool from the instructor and the course. If students are bored in class, they will find a means to engage their mind. Before technology X, it was passing notes, reading a book, or skipping class altogether.
Susie: Do you think more instructors should use Twitter as a tool?
Yes, especially this one. If not to teach (there’s only one @jayrosen_nyu), then at least to have a working understanding of the platform, its strengths, and its limitations.
Susie: How do you think instructors should use Twitter?
Let’s take a step back and frame your question in a broader context. It really should be “How do you think instructors should use technology?” When you get down to the nitty-gritty, Twitter really isn’t all that different from Tumblr, WordPress or YouTube. It’s a text-based real-time communication platforms limited to 140 characters that empowers its users to reach a global audience.
Without asking this broader question, you’ll end up trying to “meet the future by doing what [you] did in the past”, as Sir Ken Robinson artfully explains:
http://www.youtube.com/watch?v=zDZFcDGpL4U
The current system of education was designed for an industrial age. You spend tens of thousands on a four-year degree because you used to learn things that would last most of your career. Throwing new technology at these old systems won’t fix anything; in many cases, it will only exacerbate the issue.
Think about technology holistically because it enables you to do in fundamentally new ways. Use Twitter as your real-time notepad, then archive those thoughts on a blog post. When you’re working on a piece, publish all of your source material along with intermediate revisions so the curious reader can explore how your thoughts developed.
Broadening the question opens plenty of possibilities.
]]>Download Video Embed Widget at WordPress.org, leave questions or ideas in the forum, or fork it on GitHub.
]]>
For Election 2010, we built an interactive mosaic that tries to emphasize the wide diversity of perspectives NYCity News Service reporters captured before and after. Vistors can filter these faces by relevant metadata, and click on a face to access a short video or audio interview with the person.
The entire product was done with HTML/CSS/Javascript (jQuery) in about an afternoon. Each mug wrapper has classes with values for each metadata field. Presentation is driven by adding further classes based on those values. Originally, I was going to pull from an API and refresh the entire view but what I ended up with proved to be a better solution.
In the future, I think it’d be more interesting to filter based on issue instead of demographic. Also, I didn’t think about this at the start, but there is a performance loss on page load when every single piece is a video interview as the browser queues all of the hidden Vimeo players.
Later: Michelle and I took a look at the project this evening and I think it’s the first time I’ve seen it truly from the user’s perspective. Most notably: video embed performance sucks and needs fixing. It would also be useful to have the filter values sorted alphabetically (and numerically). Clicking on a new filter should close the active video player. Clicking on a new mug that’s at the bottom of the page should scroll the user back up to the overlay. Lastly, when activating filters, the informational overlays should only appear on mugs that match the filter.
]]>Near the end, I ask Ken how he would measure whether journalism is dying or blossoming to which he replied, “it’s subjective.” This, in my mind, is a solvable problem.
[audio:http://danielbachhuber.files.wordpress.com/audio/20101104-kenauletta-audio.mp3]

At WordCamp Philly, Andrew Spittle gave a killer presentation on Edit Flow, its myriad of uses, and a hint of features in the upcoming v0.6. He also mentioned Edit Flow received a bit of press in Weblog Tools Collection.
]]>
Marc Lavallee and Max Cutler earlier today identifying different sources of news organization data. As a part of the Hacks/Hackers post-ONA hackathon at NPR, we rekindled NewsAnalyzr. The core idea is to build a flexible tool for analyzing the news and those who make it. A necessary foundational element is a structured database of news organizations with pertinent metadata like URL, print circulation numbers, or number of employees. Once you have this, you can, say, easily create an API to give you the title of a news organization based on URL or scrape the homepages all top 200 newspapers on a 15 minute interval during election night.
You should follow our progress on GitHub and I’ll write a more detailed post we have something useful to show of the project.
]]>“Every node in the network is a news node.” The easiest way to see this is in the Twitter network, where every user is a potential source of news.
Freedom of the press belongs to those who own one.
“It’s easier trust ‘here’s where I’m coming’ from than the ‘view from nowhere’.” A reason for this is that people have access to a lot more news, as well as background information on that news. Journalists traditionally believe that the “mask of objectivity” is what allows people to trust them. Now, users can see the shallowness of the approach.
It’s dangerous for the news industry to rely on the tech industry for the next generation of publishing tools. Journalists cover tech icons as if they were messiahs. This creates a situation where news organizations passively absorb direction from the voice of God. There is a wish and hope the iPad will deliver a magic solution for newspapers.
The news system was built to deliver a stream of updates about what is new today. It’s been weak on context, or the background information you need to understand the story. A major design challenge in the rebooted system of news is how you can deliver both at the same time.
Question: How would you reboot mid-term election coverage?
Rosen: You’d develop a citizen’s agenda for coverage by polling the citizenry for what they want politicians to talk about. Then, in political debates, you’d look at whether the candidates are actually discuss those issues.
Question: Where should transparency be shown in news coverage?
Rosen: The easiest way would be to just link the byline to a background page on the reporter. It should have a listing of relevant topics and your perspective on them. Instead of saying “here’s the view from nowhere,” you’d say “here’s all of the information I had to write this piece.”
Winer: It’s not always about transparency, either. It’s about being clear about where you’re coming from. A blind man approaching the back of an elephant is going to have a completely different perspective than a blind man approaching the front of the elephant.
Question: Where should news organizations go if they can’t rely on technology companies for the future?
Winer: We’re really, really, really early in the news system of the future. Twitter is a large company now, but it doesn’t have a guaranteed position. For instance, updates on Twitter are limited to 140 characters. Is this the ideal length for a news item? Probably not; there’s room for innovation. Do it yourself.
Question: What is open source, can it be applied to the news industry and, if so, in what ways?
Winer: They’ve actually giving some things away but others aren’t free. Licenses for software use to run hundreds of thousands of dollars. Now, certain things are given away but other things are charged for. “Who cares how you pay the bills?” The news industry insists to make money in a very particular way. Anything else is sacreligious. It’s this inflexibility that’s breaking the business.
Rosen: The motivations of people who contribute to open source projects are usually “if we all contribute, then we can all benefit and others can benefit too.” Just think about what we could do if we applied this to news.
Winer: Others choose to go open source to wipe out their competitors. The analog in the news industry is “open the doors” and let everyone contribute. Otherwise, they’ll fork you. Whomever embraces this model, and does it well, will win.
]]>Last year was my first industry event and a pleasant surprise; I had the fortune to talk at length with a number of awesome people I had only conversed with online, and Publish2 won a big ol’ award at the Saturday banquet. This year, unfortunately, I wasn’t able to get a general session pass. Not to be discouraged, I’m still headed down to take tomorrow’s audio short course, pimp CUNY J-School’s new entrepreneurial journalism program (link TK), crash as many parties as I can, and hack it cool on Sunday.
Hit me via text (971) 998-5407 or email if you want to hear the pitch or hang out.
]]>WinerLinks gives you paragraph-level permalinks on your posts or pages. v0.2, released just a moment ago, adds WinerLinks to your RSS feed too, as well as a magical showy-hidey mode if you only want the links to appear on hover.
Download it at WordPress.org, leave feature requests or bugs in the forum, and fork the project on GitHub.
]]>Interestingly, the language for deleting your Twitter account has changed to “deactivating.” When you deactivate your account, your data isn’t deleted, and your email address and username are tied up, but it’s impossible to restore.
]]>I’ve attended a few in the shorter number of years I’ve been coding, including Gonzo Camp in Seattle and the more recent Hacks/Hackers opensourceathon. Each had a low to moderate level of success, from my perspective, mostly because peoples’ expectations weren’t met. For some, the expectation was to deliver a mostly functional piece of code. Others didn’t have any expectations. In addition, another problem is that a certain group of attendees run into the challenge of wanting to contribute but not knowing how to do so.
These problems can be mitigated by better preparation.
Specifically, I think a hackathon should have the following established in advance of the event:
Dave Winer wrote a post recently where he implicitly defines a few sample goals:
In 24 hours I wouldn’t try for a breakthrough. But it is possible to focus for a few hours on a problem and come up with alternate approaches. Or to rework something that fell by the wayside in the past because of scaling issues perhaps. Or some piece of the puzzle was missing last time it was attempted, where a solution now exists.
The description for the Hacks/Hackers Hackathon at ONA10 details the what of doing but never the why of doing. Same for the Great Urban Hack. It’s difficult to know whether an event is a success if you never set expectations for it.
Sure, it’s possible to do this type of preparation the day of. If you can put these pieces in place before the event, it means they don’t have to happen at the event. The event can then be focused on the most valuable use of in-person time: working on the project.
]]>
Macaulay’s Wall of Fame digital signage, powered by WordPress, jQuery, Plainview, and an off-the-shelf wall monitor. Wicked cool solution. View the live version, but zoom out so you can see it in full.
]]>Matt manages five personal servers, including one load balancer, two web servers, and two database servers. The Nginx load balancer is a 512 MB slice from Slicehost, web servers are Nginx with FastCGI and 1 GB a piece, and the MySQL database servers are 512 MB. HyperDB is a WordPress plugin which allows you to partition out your database. Matt has it configured such that reads are done from all of his databases, while writes are only to the master database.
Caching is done with Memcached, PHP APC caching, and Batcache. WordPress.com is Memcached, HyperDB and Batcached. LoadImpact.com allows you to load test your site with between 10 and 50 concurrent users and will give you the page load times based on the number of users. Matt’s load times start at about 1.75 seconds and actually go down over time because caching kicks in.
GlusterFS is a system utility to replicate data across all of your production web servers. Upload an image to one, copy to every. GlusterFS is nice because it works on both physical and virtual machines. Matt has the WordPress directory, PHP directory, and Nginx configuration syncing across his web servers.
In total, he easily handles 4 million pageviews/month across all of the machines.
Scott Taylor discussed front-end optimization.
First, ensure the HTML code you write is semantically correct. The TwentyTen theme packaged with WordPress is a good example to follow. Overrides follow the rule of IDs first, then classes, then elements.
Combine scripts from different plugins to just one script to improve load times.
YSlow and Google Page Speed are good tools for front-end development. YSlow will tell you to make less HTTP requests, add expires heads, use Gzip (same thing as deflate), reduce the number of DOM elements, specify absolute image dimensions and a favicon, and cache AJAX requests.
Recommended resources from Scott include: Rasmus Lerdorf at Digg, anything from Steve Souders, and writing from Douglas Crockford.
]]>Post Author Box is an extremely powerful way to add author information to the top or bottom of a post or page. You can use the following tokens with basic HTML to determine what data is displayed:
- %display_name% - %author_link% - %author_posts_link% - %first_name% - %last_name% - %description% - %email% - %avatar% - %jabber% - %aim% - %post_date%
Once you’ve done this, the Post Author Box is wrapped in a special class you can style it away to your heart’s content with another plugin like WordPress.com Custom CSS.
Download Post Author Box at WordPress.org, leave questions or ideas in the forum, or fork it on GitHub.
]]>The Jane’s incident takes Slashdot’s evolution one major step forward. Slashdot readers are now actively shaping media coverage of the topics near and dear to their geeky little hearts. They are helping journalists get the story right, which is a far cry from exerting censorship. Just as open source programmers would critique a beta release of software filled with bugs, the Slashdot readers panned the first release of Jane’s journalistic offering – and the upgrade, apparently, will be quick to follow.
The original article.
Why the open source way trumps the crowdsourcing way In essence, open source projects have many contributors and many beneficiaries while crowdsourcing projects have many contributors and few beneficiaries. Open source is advantageous because “everyone who contributes also benefits.” When crowdsourcing is a competition, there are limited beneficiaries and the effort of everyone else can be wasted.
What I Learned from Assignment Zero Jay Rosen debriefs on Assignment Zero, a distributed trend project in partnership with Wired.com, with the goal of tracking “the spread of peer production and wisdom-of-the-crowd efforts across the social landscape, including the practice of crowdsourcing.” They learned they needed to: understand and articulate the different styles of labor, grok contributors’ motivations, and plan for unexpected levels of participation. Also see Derek Powazek’s review.
Four crowdsourcing lessons from the Guardian’s (spectacular) expenses-scandal experiment The Guardian’s MP expenses project was put together in a week, and employed more than 20,000 volunteers to review 170,000 documents in the first 80 hours. Participation was quite strong at the very beginning, in line with the publicity, and then tapered off.
Projects to check out include: WNYC’s “Are You Being Gouged?”, The Guardian’s “Investigate your MP’s expenses”, The New York Times’ “Moment in Time”, and SeeClickFix.
]]>Having Git properly interface with Subversion is a mysterious black art. If you’re into the Harry Potter stuff, then this post is for you.
First, I must give credit where credit is due. Boone Gorges has a nice writeup detailing how he uses GitHub with WordPress.org Subversion. Unfortunately, it only tempted me. What really set me on the right track was a short piece by Evgeni Golov, which had everything but one crucial piece: checkout instead of merge.
Using checkout instead of merge is likely the most critical piece to this puzzle. What Erik and I found the first time when using merge is that Git treats both versions of the code as equal and tries to find the middle ground between them. Instead, we want to update all of the files in the Subversion repository with their most recent counterparts from GitHub. Checkout gives us exactly this power.
Because I was working on this Monday night with the Assignment Desk, I’ll go step by step with those links as an example. This tutorial assumes you’re doing all of your development with Git, and need to occasionally push to Subversion with releases.
First, clone your WordPress.org Subversion into your local Git repository:
git svn clone -s -r274218 https://svn.wp-plugins.org/assignment-desk
Notice two important flags: -s and -r. The ’s’ flag tells Git the code you’re importing follows the normal Subversion folder structure, or /trunk/, /tags/, and /branches/. The ‘r’ flag tells Git to import after the specified revision number; when pulling from a large Subversion repository like WordPress.org, this can save you days of time. You can find the ID for your first commit in your revision log (Assignment Desk example).
Change into your newly-created directory and pull in your Subversion history (could take a bit of time):
git svn fetch
Once all commits have downloaded, add your working GitHub repository as a branch to your local Git repository:
git remote add -f github git@github.com:studio20nyu/Assignment-Desk.git
What’s next is the magic part. We’re going to checkout the code from the ‘github’ branch to the ‘master’ branch (our Subversion checkout), instead of merging the two:
git checkout github/master *
If you use ‘git status’ at this stage, you’ll notice all of the files you’ve changed since your last release have nice little M’s next to them. If you had merged, there would be a nasty mess of conflicts you’d have to resolve.
Add all of the files you want to save in the next commit:
git add *
And make your commit:
git commit -m "Updated from GitHub"
Aside: at this point, I tried to push back to WordPress.org and received an error of “Merge conflict during commit: File or directory ‘assignment_desk.php’ is out of date; try updating: resource out of date; try updating at /usr/local/git/libexec/git-core/git-svn line 572,” also known as nonsensical gibberish. Thankfully, the Google pointed me to this Stack Overflow thread.
Before you celebrate, you must practice one last piece of magical foo: rebasing. For reasons we don’t fully understand, rebase holds the key to resyncing your Git commit history with Subversion. Make it happen:
git svn rebase
Push all of your changes back to the original WordPress.org repository:
git svn dcommit
Congratulations! You’ve tamed the beast and progress to the next level.
]]>WebFaction is also significantly cheaper than Slicehost. Their basic plan starts at $9.50/month; I’ve been paying $32.50 for a 384 MB slice I hardly used.
For now, I look forward to having a super fast publishing platform where I can focus on the words and images instead of the technology.
]]>
I’ve been producing CUNY creatives for a month or so now, but this one is my favorite yet. It’s the right combination of design and message.
]]>If you aren’t migrating content into your new WordPress Multisite instance, a common fix to this problem is a plugin called Unfiltered MU. Unfortunately, it wasn’t a solution for me. It doesn’t work reliably, takes a roundabout approach to the problem by temporarily adding user permissions, and limits the fix to administrators and editors.
Because the J-School network is a controlled environment, I’m fine with giving authors and contributors the ability to embed videos. I put together a quick plugin called Unfiltered HTML which disables the kses filters when activated and declared mission accomplished.
Whoops, not entirely. Thanks to Andrew Nacin, last night I discovered that there’s actually a hard-coded call to the kses filter when importing into Multisite. This means all of your glorious embedded videos will be stripped out unless you comment out that line. Andrew committed a fix, though, which adds a method for disabling the filter.
Today’s project? Going through all of the content I imported into a couple dozen sites and manually adding the missing embeds by hand.
]]>Few days go by.
Long-time climbing friend from high school contacts me out of the blue today via SMS. Haven’t talked to him in four years or more. Knows I’m living in Brooklyn. He’s living in Brooklyn too. Tells me story of how one of his friends purchased chairs on Craigslist. Is asked whether, off chance, he knows Daniel Bachhuber.
Boom, small world.
Head upstairs into my apartment.
Another friend txts and asks whether I want to get roommate birthday pizza in West Village and then hit the bars. Feeling social again. Take subway back into the city. Arrive at Numero 28 before others and request a table for five. “Oh no, six,” my friend clarifies, “one other dude is going to join.”
Wait at the table 10 minutes.
Boom, up walks long-time climbing friend. “Oh, no way. Do you know Tyler?”
Even smaller world.
]]>In house, we’ll offer blogs for student and classroom use from a WordPress 3.0 multisite instance. On the main website, we’ll have a customized version of BuddyPress with groups, profiles, status updates, and activity streams to start, and courses, assignments, etc. later on. We also have a pretty extensive PBwiki site, and might possibly offer a hosted version of Etherpad.
The guide will offer a concise introduction to these tools, as there’s no use in reinventing the wheel. What I think is more important, though, is offering ideas of how the tools might be used and examples of related experiments at other universities.
For instance, students might use Etherpad to collaboratively take notes and share links during a class, and then publish those notes to the class blog at the end so that everyone has access to them for studying. Once published, those notes could be automatically pulled into the wiki page acting as the living course syllabus.
Other ideas that came to mind this morning:
Being able to point to examples, however, will be the secret sauce.
Howard Rheingold has a wiki for his Comm 182/183 classes that includes learning expectations, information on assignments, pages for each class session, and group project pages (behind an authentication wall).
Suzi Steffen’s J361 class uses a WordPress.com blog for posting assignment requirements, posting story ideas, posting updates on stories in progress (especially valuable: things learned along the way), posting completed assignments, and media analysis. They also use Twitter as a light-weight backchannel for the class:
Related to this, Clay Shirky held a public brainstorming session at the beginning of the year on designing college from scratch that generated several useful suggestions and is worth reading through for inspiration.
What ideas and examples are we missing?
]]>Alas, this is a project yet to be completed. The long-awaited iPhone 4 arrived a couple of weeks ago, and I wanted a functional solution right away. Thankfully, Flickr holds the same libertarian data portability views as I do. They also have a slick iPhone application where I can add metadata to my heart’s content.
Feel free to track my world in pictures.
]]>Even more exciting is that, with the new gig I started yesterday, I’ll be able to eat my own dog food and have a laboratory to play in to boot.
]]>


It feels wonderful to have my camera out again.
]]>If you know of anyone looking for home furniture in very good condition, I’d be willing to make a deal.
One thing I’ve observed: the market is absolutely flooded with second-hand furniture right now. I imagine this happens every June. I also know that it was nearly impossible to find the things I needed when I moved down here last August or September. This smells like a market opportunity to me.
The idea that came to mind immediately was a centralized solution: the enterprising entrepreneur would rent an empty house or storage unit, pick up all of the furniture on the market at depressed prices, store it for a couple of months, and then resell when the demand picks up again. I’d imagine that most items listed on Craigslist or on display at garage sales in June are discounted at least 50%, if not more. The biggest issue with this model, although, is that there are serious costs associated with moving the furniture twice, first to storage and then to the buyer’s home, that might well cancel out any margins.
There’s got to be a cleverer solution.
]]>Google News search result for “Apple”
New Orleans police action after Katrina
What are the best methods for visualizing information over time, and how do you measure its effectiveness in telling a more complete story to the reader? To what degree should these tools be used for navigation versus presentation?
]]>We’re rolling out Publish2 News Exchange to existing Publish2 users this week and, as always, journalists can register for free accounts.
]]>Right off the bat, I’d like to say that the most awesome bit about the conversion script is its ease of use. Granted, you do have to run it on the command line and it does often throw mythical, unintelligible errors if your data is screwy, but it’s about 100 to 1,000 times easier than what Sean Blanda or Brian Schlansky had to go through. Furthermore, it spits out WordPress eXtended RSS files that WordPress imports natively. Depending on the size of your archives, you could even do the entire migration in less than a half hour.
There are detailed instructions in the README I encourage you to read thoroughly but, in screenshots, here’s how you’d migrate your site.

Backup your database using Sequel Pro. This is a critically important step, as you’ll definitely want a clean version to revert to if the import goes awry.

Place the conversion script and your archives in a folder you can access from the command line. Both College Publisher 4 and College Publisher 5 migrants should receive an articles file that will need to be renamed “stories.csv.” Publications migrating from the former will have all of their image references stored in a file that will need to be renamed “media.csv.” Navigate to that directory from your terminal prompt and run “python CoPress-Convert.py.”

Once the script is running, you’ll be asked a series of questions to configure the conversion process. Most options are self-explanatory, and all are explained fully in the README file packaged with the script. The most important thing I’d like to note in this post is that, unless you have less than 500 authors in your archives, I’d highly, highly recommend importing your authors as custom fields instead of users. WordPress is not optimized to add a large number of new users through its import process. We learned this the hard way migrating CM Life’s database last summer.

When the script is done, you’ll have a series of WordPress eXtended RSS files you can easily upload into WordPress.
Mad props go to Miles Skorpen for the long hours he spent on the conversion script, and to Albert Sun, Will Davis, and Max Cutler for their later contributions.
Feel free to send along any suggestions for improvement, bugs, fixes or general comments. I intend to maintain it for the indefinite future, it’s good Python practice when everything else I’m working on is PHP, but code contributions are always welcome. There is a short list of upgrades under consideration in the top of the script.
]]>For the past year, I’ve been using the most basic WebFaction plan for a few of my personal sites as well as several projects. WebFaction is known for its one-click installers, which make it super simple to get an instance of WordPress, Django, Trac/SVN, and a number of other web applications running in a matter of minutes. The downside and upside is that it’s managed hosting, however. WebFaction served my prior needs well but, about a month ago, I decided to make the switch to Slicehost to offer two opportunities: continuing practice with server administration and greater control over the entire stack when I need it.
Another awesome advantage to Slicehost is that their documentation is absolutely superb. I started out with a vanilla Ubuntu Karmic Koala instance, ran through all of the basic configuration and necessities, and installed Nginx in front of Apache in less than an hour. It’s not the first time I’ve set one up, but whomever writes their articles would make landing a space shuttle a walk in the park. The biggest hassle, and this is why it’s taken me a month to finish up, is just ensuring each site migration goes smoothly. Now that this is complete, though, I can go back to building out my website as my personal hub and, eventually, personal data repository.
If you’d like to purchase a sturdy yet flexible virtual private server, tell Slicehost I sent you.
]]>Two more notes. First, on the subject of journalism, it’d be fascinating to see beat reporters regularly post their current questions of interest. This may even be a sellable asset. In addition to benefiting from the information they produce, I as a reader could also learn tremendously from their research process.
Second, I literally can not wait until I have a tool that allows me to manage my learning process. Specifically, I’d love to be able to articulate questions that inspire movement towards knowledge, map my answers when I find them, and then computationally mine the activity data for insights.
How many hours a day are wasted trying to solve a problem that has either already been solved or just needs existing data to generate a solution? Which industries spend the greatest amount of time solving information problems, and what would be the economic gains if you could provide the “just-in-time” data needed to solve the problems? What tools do you need to actively monitor and provide for these information needs?
How does the nature of work change when the efficiencies of technology rule an increasing number of jobs obsolete? How is the nature of local business and commerce shifting because of the web and supply chain efficiencies?
What percentage of students have to take out loans for tuition, and how has that number changed over the years? How has the payback period changed in total and by course of study? Does higher education make more or less economic sense? This data repository may hold answers.
What is the breakdown of information provided by a traditional newspaper (how much and of what topics)? What other local information providers overlap with this information, and how much of it is unique to the newspaper? What are the overall information needs of the community, and how do you surface and visualize this?
What percentage of vehicles drive down I-5 with solely a single occupant? How could you incentivize these drivers to self-report their “flight plans”? What systems have attempted to solve this, and what have been their successes and failures?
In what ways can you produce, structure and save a lot of personal data in such a fashion that it can become useful in the aggregate? How do you bake this into your workflow so that it isn’t extra work? What bits of data would be useful on a personal level, a community level, and/or a societal level? Related: absolutely fascinating RadioLab episode explores how the mining of Agatha Christie’s written works led to a surprising insight.
]]>Specifically, by doing the rebuild, they want to: share more insights, offer better tools for sharing, enable sources to update their profile within the system, offer sources more granular privacy controls, instantly publish insights, create credibility systems for sources, offer a better user experience, and integrate with existing sites.
The prototype dashboard for the reporter-facing Audience Insight Repository is project-based and focused on collaboration.
Journalists can search through a huge database of sources based on demographic metadata.
Once they’ve found a worthwhile lead, the journalist can click through and get contact information, background on the source, and a record of prior interactions.
The project also has plans for a user-facing site tentatively called MyPIN where they’d be able to engage more fully with the news organization’s reporting process or update their profile information.
There’s a certain amount of friction, however, in requiring sources to manually update their profiles every time a bit of their personal data changes. As the system exists now, American Public Media requires readers to submit full contact information every time they fill out a form. If the contact information on the form is different than what is in the database, then that discrepancy is flagged and an analyst has to manually address that conflict. In the future, in addition to enabling users to update their profiles on their own, it might also be worthwhile to explore integrating with LinkedIn, Facebook or Twitter. With LinkedIn or Facebook, the user could update their resume, contact information, etc. and have it automatically pulled into the Public Insight Network. By integrating Twitter, for example, journalists could easily find sources for a given story by having search localized to updates from users within the network.
We also discussed user privacy, which getting correct is of significant interest to American Public Media. More importantly, what control users have over their privacy and how to make policy changes without surprising or alienating them. An idea I suggested is that, rather than presenting just a list of options for the user to choose from, they should instead try a Hunch-style approach. With this, they’d be presented a series of questions detailing scenarios about their data and how it might be used. The decisions the user made responding to each scenario could then guide their privacy options. At some point, American Public Media would like to start sharing source information amongst all of their media partners using the software, but it will be critical for them to execute that move right the first time.
]]>Started by Pierre Omidyar, this news startup in Honolulu will be an online-only, subscription-only approach to covering political news. Online-only means no legacy costs or issues and, at this time, they have no plans for taking advertising. In addition, one of the insights Pierre made while thinking about this is that local civic government news is an elite niche with a capacity for “hyper-efficiency.”
If you’re starting a subscription model, Howard asks, why is this going to be worth more than a free beer on Facebook? [edit] For this operation, the compelling argument is the opportunity for a close relationship with a skilled journalist in a valuable local niche. By becoming a member of the site, the user has equal opportunity to posting their opinion and joining the discussion.
Peer News be charging $20/month because that’s what the competition charges for home delivery. There are five reporters, two web developers, an assistant editor, and an editor. By having the technology capacity internal, they hope to be able to innovate with how they package and deliver information. For instance, they hope to emulate Google Living Stories to provide contextual, canonical pages for ongoing stories and issues.
One question from the audience: how do you reconcile the fact that, by charging a subscription fee, you’re excluding some percentage of the population from access to information and democratic debate? There was also a spirited debate, albeit lacking much data, about paywalls and whether this would work well at a local level. Howard argues, however, that they’re selling the experience and not the goods.
Two reasons they think this news startup can work. First, the entire operation requires a lot less financial resources than running a print newspaper. Peer News provide high-quality journalism and break even with operating revenues of a couple million dollars a year. Second, they’ve identified a local niche whose information is high value to a certain part of the community.
]]>But they have underestimated the textual productivity of organizations that are incentivized to connect, not protect, their words. A single piece of information designed to flow through the entire ecosystem of news will create more value than a piece of information sealed up in a glass box. And ProPublica, of course, is just the tip of the iceberg. There are thousands of organizations – some of the focused on journalism, some of the government-based, some of them new creatures indigenous to the web – that create information that can be freely recombined into private commonplace books or Pulitzer-prize winning investigative journalism. A journalist today can get the idea for an investigation from a document on Wikileaks, get background information from Wikipedia, download government statistics or transcripts from open.gov or the Sunlight Foundation. You cannot measure the health of journalism simply by looking at the number of editors and reporters on the payroll of newspapers. There are undoubtedly going to be fewer of them. The question is whether that loss is going to be offset by the tremendous increase in textual productivity we get from a connected web. Presuming, of course, that we don’t replace that web with glass boxes.
Whoa, wait a second… how do we measure the health of journalism then? If we were to develop this system, would we be able to track information density of text content or derive the quality of the information produced? Could we then mash this against topical and location metadata to see how well particular communities are being served?
This is one of the things I’d like to discuss at tomorrow’s BarCamp NewsInnovation.
]]>The [Monday] Papers An epic laundry list of everything that needs to be said about the newspaper industry.
A Public Can Talk To Itself: Why The Future of News is Actually Pretty Clear
Perhaps the biggest challenge in media criticism this year has been making discussions on ‘Future of News’ more than a debate between New and Old Media. Just because a news organization established itself and started publishing recently doesn’t mean that the way they are publishing is any different than in the past. Many of the biggest news organizations to spring up in the last few years that are largely considered to be ‘new media’ — The Huffington Post, Gawker, Politico, Tech Crunch — are fundamentally similar to the NYT. That is to say, they are trustee media, they stake a claim on a certain beat and a handful of editors ultimately control everything that is published.
Open memo on how to right a sinking ship A synthesis of all the advice I would give newspapers struggling to reinvent themselves: experiment with business models, improve your relationship with your community, and invest in your technology.
Objectivity isn’t truthful — it’s pathological
When the good-intentioned pursuit of truth leads the truth-seekers to lie (to themselves, to readers; by inclusion or omission) rather than break their code, there’s probably something wrong with the code.
How the Web and the Weblog have changed Writing Superb essay on the web and writing formats.
A fundamental way newspaper sites need to change Holovaty’s testimony for structured data.
The “Lack of Vision” thing? Well, here’s a hopeful vision for you
This isn’t copyright advice: What I’m really saying is we have to begin learning how to add value to the information we collect, and then put that information into a thoughtful structure to retain and expand that value.
Idea for the future of journalism: newspapers as providers of structured information for any given community. The scarcity is having that data in the aggregate.
Attention Is the Real Resource Gruber prices advertisements in his full RSS feed at a premium because his readers are more engaged than one-off webpage visits.
A breakthrough for the Times? Possibly. Content producers would bid to have their articles, images, videos, etc. appear next to related NY Times articles. Smart, intriguing subsidization idea.
Eleven Things I’d Do If I Ran a News Organization Numbers two and three would be my top choices. Transparency by default, and leverage that to build intelligent conversation.
My advice to the New York Times? Copy Foursquare. All of these ideas are smart. Specifically, Sean offers clever ways to use reader engagement with a website to build a profile of their interests and areas of expertise.
10 Ideas I Want to Try at the Newspaper Where I Work I dig the ideas Will has for community relationship management, as well as using data and APIs well.
This is a mock-up for a news site that I think should exist Users go to the site with journalistic questions they want answered, “Why is corn still subsidized?” as an example, and journalists answer them. Smart, but execution is the hardest part.
Most of all, however, I think this tweet depicts the entire horizon.
]]>
A few days on the beach was exactly what I needed to finish up decompressing. In addition to a few long, hot, and dehydrating runs, I had the chance to get a bit of reading in. The best part is that it has significantly renewed my interests in science and engineering.
Steward Brand on the fear of genetic engineering and genetically modified organisms, from Whole Earth Discipline:
What “nature” are we talking about, exactly? You can’t do anything against nature, if your idea of nature includes physics, chemistry, and mechanics. Abominations can be imagined but cannot be performed. Anything you can do you can only do because nature allows it. Nuclear fission is so natural it occurs geogically. Horizontal gene flow is so natural it is the norm among microbes. Apparently what people mean when they say “against Nature” is “against my understanding of Darwinian inheritance and traditional breedline agriculture.” Or maybe it’s not so cosmic, and what people mean by “against Nature” is “something I’m not used to yet.”
We’ve always been engineering our agriculture, and microbes swap genes continuously. If we permit, encourage and respect engineered pharmaceuticals on the open market, why not nutritionally improved food?
]]>Combined with a points system for quantifying my activity, I’d be able to track progress on my personal education. In a two-fold manner, this tool would inform me of the topics I’m consuming a lot of while at the same time alerting me to what I’m lacking.
On the same note, the application could track the intellectual material I produce during the day and, using the judgement of my peers, use it as the basis of a metric that illustrates how I absorbed my readings. If it were to look at how I referenced prior readings and writings, it’d be able to assess my retention of a given subject over time.
This might be similar in some ways to Sean Blanda’s abstraction of Foursquare for the New York Times.
]]>“All Taliban are Pashtuns, but not all Pashtuns are Taliban.” Musharraf argues that the resurgence of Taliban activity since 2003 is because the coalition forces have not included the Pashtuns in the political process. The Pashtuns comprise over 40% of the Afghani population. Not being involved in the political process means that they’ve been driven to the city and hills; to effectively rebuild the prior national covenant, the Pashtuns must also be engaged in the political process.
On why Pakistan has nuclear arms: 80% of India’s military force is reportedly oriented towards the country. Pakistan has an “existential threat” to its existence.
On relations with Afghanistan: “They have always been bad.”
Why hasn’t Osama Bin Laden been captured? “I think he’s smarter than us […] Operations are going well, let’s see if we can get him.”
On the practice of stoning women to death, and what a recent act might do: “If you think by enacting laws you can change mindsets, that doesn’t happen. Not in developing countries.” It is not in all of Pakistan that people stone their neighbors, just in the backward wilds of some areas. Musharraf argues that misunderstandings forwarded by the media make this more of an issue than it is.
What kept surfacing in my mind was this: how does minimum viable democracy change from country to country and context to context? I feel that, all to often, we unfairly judge a country’s politics in comparison to our own standards of success and failure. Musharraf notes that when he came to power at the end of 1999, through a non-violent coup, the country was considered a failed state and that by 2006 the World Bank was praising the country for its economic progress.
The recording of the lecture, if made available, will be recommended.
]]>
It took way too long, but I finally had my sweet Kilowatts mounted with G3 Onyx AT bindings. The setup is complete with a pair of Dynafit ZZero boots with heat-molded liners which, if you’ve never experienced, I would highly recommend trying at least once in your life. I can’t wait to see how they ski. With CoPress closing down, more on that shortly, my goal is to make it happen more than the once a month I’ve been averaging.
A quick memo for the future: I’ve been able to sneak by the Amtrak baggage czar with a single pair of skis multiple times, but if they catch you with two pairs of skis and boots, they’re probably going to make you check them. Considering I wasn’t schlepping a ski bag, I have my fingers crossed that they don’t get mangled.
]]>Collaborative learning redefines the information presentation model from that of broadcast, or one-way transmission from transmitter to receiver, to that of many to many. As discussed in the article, it defines how the culture of education process flattens and shifts. Given proper access to intellectual resources, also known as a wireless connection to the internet, students can assist in the role of teaching. More often than not, there are students who pick up any given material quicker than the others. With the established pedagogy, there is no advantage to being a quicker learner; with collaborative learning, being the quicker learner means that other opportunities arise to take a more active role in the teaching process and practice leadership skills. The responsibility of the professor is to be a curator, or act as a master guide to the learning process.
Collaborative learning also implies learning through practical application of knowledge, as opposed to simply being a static vassal to be filled. Choice quote:
As Seymour Papert, one of the world’s foremost experts on how technology can provide new ways to learn, put it: “The scandal of education is that every time you teach something, you deprive a [student] of the pleasure and benefit of discovery.” Students need to integrate new information with the information they already have — to “construct” new knowledge structures and meaning.
Collaborative knowledge production, however, articulates how the dynamics of the web can alter the traditional content production role of the university. Instead of an emphasis on scarcity, it would instead focus on abundance and universal access, and it describes how this might affect intellectual content from course material to academic research. To achieve this goal, however, you need effective tools for distributed collaboration:
What higher education desperately needs is a social network — a Facebook for faculty. But it shouldn’t be a standalone application; it should be integral to the Global Network for Higher Learning. One such project, part of the Portuguese education system, is creating an online community of teachers across the country. The system will use collaborative methods for creating, managing, sharing, and deploying curricula and for tracking the results via a sophisticated learning management system. There are many benefits, including much greater collaboration among teachers and a more consistent measurement of students’ progress.
The real world gives professors collaboration opportunities in their department and with whom they meet, but just think of the potential serendipities a people-indexer like Aardvark could produce.
Most importantly, however, is that all of these ideas are business opportunities, and innovations the efficiencies of the market will be able to capitalize upon a lot quicker than those invested in the ivory towers.
Thanks to Suzi Steffen for sharing this with me.
]]>Plug two: Marshall Kirkpatrick floated a related idea the other day that Facebook is now the world’s leading news reader. There are at least a few reasons: Facebook has the largest, most active user base on the planet, Facebook gives you control over who has access to your content which leads to a greater willingness to share, and Facebook wraps the whole creation/consumption experience into a nice, easy to use interface.
That last point is the most critical, in my opinion. As average Joe, it’s much, much easier to publish with Facebook (or Twitter) because there is tremendous attention paid to the experience of how content is consumed on a regular basis. Both Facebook and Twitter have dedicated dashboards for your subscriptions where you get visual reinforcement that other people are coming across your content. With my blog, I have a home page which my dad or mom might read occasionally, and X number of faceless RSS subscribers who may or may not “Mark All As Read” on a daily basis. Figuring out how to use Google Reader to read other blogs almost requires the scientific method, which could be a good thing if you consider yourself a geek but is almost certainly a bad thing if you’re a Normal just wanting to read the national news and your friends’ writing.
Moral of the story: Always take studies with a grain of salt. I suspect The Youth are publishing more than ever, but it’s coming in the form of Facebooking and Tumblring instead of maintaining a blog because the proprietary tools, unfortunately, have better readers right now than the open source ones.
Related to this, I’m hoping to take Ryan Sholin’s lead and write more on my original home space. It’s a muscle I think I need to exercise. I’m also going to take Gruber’s lead and turn off comments because I get way too many comment notifications like, “Hi, cool blog, just curious what spam system you use for cleaning up comments because I am getting so many spammers on my blog.”
?!
]]>$config['mail']['backend'] = 'smtp'; $config['mail']['params'] = array( 'host' => 'smtp.gmail.com', 'port' => 587, 'auth' => true, 'username' => 'username@domain.com', 'password' => 'your_secret_password' );
Adding these settings to your config.php file will allow your StatusNet instance to send email notifications over SMTP when your web host doesn’t support sending mail from the server (ahem, WebFaction). The trick is to use the proper port, 587 instead of 25, and to enable authentication.
I’m still trying to configure Google Apps as the XMPP provider for StatusNet too; I’ll put together another post if I can figure that out.
]]>AFG85: @cshirky Classes would create wikis for specific topics and students would be graded on the quality of their contributions.
AFG85: @cshirky And the same wikis would be used year after year, so new students would have to add to the contributions of last year’s students.
digiphile: @cshirky Fund multidisciplinary labs for applied innovation & incubation. And learn from the example of PCU & “Accepted” http://j.mp/4LHTkG
sewsueme: @cshirky instead of having a college counselor you would have a concierge/ curator who would help you make sense of your education journey
sewsueme: @cshirky as @ccoletta & I were debating earlier in the evening: there would need to be a new accred system. Employer or performance based?
sewsueme: @cshirky learners cld collect “credits” (learnings) from anyplace–Apple store, a uni course, an apprenticeship as long as they cld prove
sewsueme: @cshirky there might be some new course creation but aggregation from multiple places wld be important
ricetopher: @cshirky Why build anything? College as aggregator, filter set, facilitator of networked learning better model in an age of ubiquitous info.
AFG85: @cshirky for professors, have a small full time staff supplemented with practitioners from different fields teaching for one semester
AFG85: @cshirky for students, go YCombinator style–systematic applications, then one weekend of ten minute interviews.
ekstasis: @cshirky single biggest failure of education is the focus on grades as a proxy for learning. they don’t always track. #CollegeFromScratch
I still think that accreditation is going to be the toughest nut to crack. All of the other pieces, distributed collaboration, access to learning materials, etc., are falling into place thanks to the disruptive tendencies of the web. People are learning, by golly, but the record of their learnings is all over the map. For any of these zany ideas for new universities to fly, the students will need to have an equally new method for articulating their accomplishments. Right now, this legitimacy comes from the accreditation board.
If you can convince employers that your new mechanism for accreditation is more accurate and effective than the standard college degree then, well, I think you might have a new college worth starting from scratch.
]]>There are nuggets I was able to suss out, however. If you’ve indexed your feeds, there are search capabilities that will also give you the frequency of any given term. The mapping functionality is also very slick. You can get all of the recent stories on a map, or stories limited to a specific term. It’s misleading to have the initial view of the map be the entire world, though, because the most useful view to an end user will be whatever region they’re interested in.
This brings me to my biggest observation: a tool like this would be most useful for managing feeds of raw data, not feeds of news articles. News articles are products where the data has already been through the rock tumbler. Where Managing News wants to be headed, I think, is towards building a tool that allows you to map and visualize all manners of data.
The difficulty then is both building the visualization tools and finding, or even brainstorming, properly geo-coded RSS feeds of the data you’re interested in.
]]>One: when everyone you follow on Twitter shares the same link over and over again. There should be a version of the word for when it’s a dumb post I’d rather never had read, and another version for when it’s a smart post I’d like to share too but don’t want to join the crowd of oversharers.
Two: the act of subconciously comparing your writing with that of the best authors on the web. The difference between paper and pixels is that your production, your mind babies, are public by default. Knowledge of this, from my perspective, drives a much stronger awareness of how other people interpret your communication skills. Offered just in paper form, pieces of Andrew Spittle’s senior thesis would gather a readership of his professors, close friends and family. On the web, his potential readership grows exponentially and is far more likely to gather critique and feedback. I believe it’s this underlying awareness that drives more people to write more things that are worthwhile.
This is a new frontier. We need to actively create the words that best articulate the web’s nuances.
]]>
After a couple month trial, I’ve decided to move back to Google Reader from Shaun Inman’s Fever. Originally, I made the migration on the allure of several shiny gems: a gorgeous interface, code that I could host on my own server, a refresh rate I could dictate with cron, and an innovative approach to filtering the signal from the noise. With each feed you add, either as Kindling you read on a regular basis or Sparks to feed the fever, the links count towards “what’s hot”, a visualization of the most popular stories for any given time period based on the information flow you’ve curated.
The deal breaker, however, is the mobile interface. In terms of reading experience the two RSS readers are comparable but sharing from Fever is a multi-step pain. Google Reader is at most a two-step process: open the item in a new Mobile Safari tab and hit the Tweetie bookmarklet. Because Fever is a standalone web application on the iPhone, I have to copy the link, close the application, open Tweetie, and then paste the link. I do a significant percentage of reading on the go, so it’s back to Google Reader.
It’s also a golden opportunity to again rethink how I structure my information flow. The art of how people organize their RSS readers is fascinating and writing about it offers tremendous learning potential; consider this a nudge to reflect and articulate how you’re managing your information flow.
My approach is to organize feeds by both priority and topic. I originally started with three priorities, A, B and C, and slimmed that down to A and B when I moved to Fever. If it’s a relatively low traffic feed with content I’m very interested in, then I’ll drop it in the “A-List” bucket. Publications that fit in this category include Daring Fireball, Nieman Journalism Lab, Publishing 2.0, Snarkmarket, and Open the Future. The “B-List” bucket acts as a second tier of importance and includes sites like … My Heart’s in Accra, /Message, and Oregon Media Central. Feeds I’d like to read/skim on the days I have the time to, or that I don’t mind marking all as read, fit into different topical buckets including Business & Economics, Education, International Development, Media & Journalism, and Technology.
This functions, but I’m ready for something new with a couple of goals in mind. First, I’d like to add more feeds to my stream. In the move from Google Reader to Fever, I culled my subscription list down to 262. This metric says “amateur web worker.” So, secondly, in the process of adding more feeds to my stream I need an approach that adds more nuance to my prioritization system. The filtering offered by Fever was this in parts, however I don’t believe I had the breadth of data to make it a useful daily tool. Whether using Google Reader’s system of folders can actually scale remains to be seen, but I shall experiment. And continue searching for other peoples’ approaches to structuring their information flow.
Later: There’s an additional piece to this puzzle. I’m obsessive compulsive about getting my RSS reader to zero nearly every day. This I am proud of. What it means to my method of parsing information is that I ideally want to weight everything in such a manner that I maximize the my efforts in relation to amount of time I have.
]]>I’m curious to see if there is a reputation system built into it. As they say, this works based on the participation of experts and non-experts. How do you gauge the expertise of a sweeper? And I don’t mean to imply as a journalist that I think that journalists are ‘experts’ by default. For instance, I know a lot about US politics but consider myself a novice when it comes to British politics.
To take a step back, Swift River is a project to “crowdsource the filter” for real-time crisis reporting. Ushahidi provides a platform for aggregating the information around a crisis but, when a crisis situation explodes metaphorically or literally, the information coming in can quickly overwhelm the people trying to make sense of it. Swift River will enable an observer to create a new instance for a given situation, add RSS feeds from various sources including news publications and Twitter, and then additional users will be able to come in as “sweepers” to curate those incoming bits of information and float the most important to the top.
In the comments, Jon mentions that the three “most critical aspects are the trust algorithm (veracity), predictive tagging and filtering out redundancies and inaccuracies.” The first, in my opinion, will be the most challenging, and hopefully most rewarding, piece of the riddle. They’ll be able to scale their ability to float accurate information if they focus on identifying the trustworthy people instead of the trustworthy information.
A couple of weeks ago on Twitter, I observed that the crowd is the least important part of crowdsourcing. More often than not, you could care less about the opinion of the crowd on a whole. What you really want is an authoritative answer, or field report, from the most knowledgeable person in that crowd.
]]>
Part one. Late last night, Jay Rosen published a small peek at an idea for a new type of news site. ExplainThis.org would be a platform to connect users with questions to journalists with research and communication skills. Jay’s perspective on this idea has a few notable features: users would be able to coalesce around questions by voting up the ones they have in common, the questions would be more complex that what could be answered through a simple search, and the answers would require “real journalism” to be marked off as complete. It’s also distinguished from Cody Brown’s next big idea in that it would limit the answering participation to “journalists”, although it’s not clear how Jay would define this term, and that the questions would focus more on issues of national interest.
Part two. Through a post by Charlie Stross, I learned from The Observer today that drug money is actually what saved banks in the liquidity crisis, according to the head of the UN Office on Drugs and Crime:
Speaking from his office in Vienna, [Antonio Maria] Costa said evidence that illegal money was being absorbed into the financial system was first drawn to his attention by intelligence agencies and prosecutors around 18 months ago. “In many instances, the money from drugs was the only liquid investment capital. In the second half of 2008, liquidity was the banking system’s main problem and hence liquid capital became an important factor,” he said.
Some of the evidence put before his office indicated that gang money was used to save some banks from collapse when lending seized up, he said.
British bankers want to see the evidence he has to back up those claims and, as a reader, I was left completely perplexed and boggled as to whether this is a significant story or not.
These two parts don’t need to be mutually exclusive. The starting point could be zero, “What questions do you have?” in Jay’s case, but the starting point can also be further along the continuum of discovering the truth for a particular topic. Adding the ability for the user to ask follow-up questions, with the expectation that the journalist will continue researching the most important of them, would be a powerful approach for more quickly getting at what the community needs to know. Pragmatically, this functionality could mimic work NewsMixer has already done: one type of user comment is a question. In the context of the drug money story, I’d like to ask what the implications are if the facts are true.
The story shouldn’t attempt to be a definitive account of what happened, but rather an entry point for deeper learning.
]]>
Last season’s Black Diamond Kilowatts, purchased on the recommendation of my friend Riley Peck. They’ll soon be outfitted with a new set of AT bindings. I haven’t skiied for almost two years, I sold off all my skis in preparation for a trip to India, and am quite stoked for the upcoming months of mayhem.
]]>
Google, in collaboration with The New York Times and The Washington Post, dropped a bombshell today in the battle for the future of news: Living Stories. The new project is described as “an experiment in presenting news, one designed specifically for the online environment,” and there are currently pages for eight different topics, including the climate change negotiations, the war in Afghanistan, and the healthcare debate.
There are four reasons why Living Stories are a Very Important Thing:
Topics are introduced with context. Each has an approachable, up-to-date summary at the top of the page that acts as a primer for the issue. The primer includes links, too; if the reader wants to learn more about a specific event presented in the summary, it’s just a click away. Let’s compare: The New York Times topic page for global warming and Google’s Living Story for climate change. In my opinion, Google’s information hierarchy wins.
Time is heavily leveraged for perspective. The clickable timeline with milestone headlines underneath the initial topic summary is a powerful method for understanding how the “living story” has unfolded to date. Stories are also presented in reverse-chronological order, making it easier to dive back into history for deeper understanding.
Filtering by the abstract components that make up an ongoing story is absolutely brilliant. For the Afghanistan page, this means “All coverage” can be filtered down to “The Global Response,” “Casualties,” and “The Afghan Elections,” among others.
“No updates since last visit.” The future of news is personalized. More importantly, personalized in the sense that the news knows what’s news to me.
A critical ethos of contextual journalism is to drive understanding. The goal should be to present a topic in such a way that the new information starts where the reader is at, and then lends the opportunity for the reader to learn as much as they have time for. The nut to crack is how you scale this method of presenting information across all of the topics a news organization may cover. That riddle involves what the information architecture looks like, how you incorporate production into the editorial workflow, and how you ensure the pages stay consistent and up-to-date.
In the Times article about the announcement, Josh Cohen of Google News said “if [Living Stories] worked well, Google would make the software available free to publishers to embed in their sites, much as those publishers can now use Google Maps and YouTube functions on their sites.” From the business perspective, it’s again unfortunate that Google is the one seriously innovating with the intersection of technology and journalism. Derek Willis notes that Living Stories was built “in collaboration with news organizations” using their APIs. Google Search was built in collaboration with content producers and their XML sitemaps.
Content doesn’t matter without the package. The package is how you make the money, and Google looks like it’s doing serious experimentation with one key component of a rebooted system of news: context.
]]>People do often come to Wikipedia when major news is breaking. This is not our primary intention, but of course it happens. The reason that it happens is that the traditional news organizations are not doing a good job of filling people in on background information. People come to us because we do a better job at meeting their informational needs.
Jason Fry adds further analysis today in a piece about rethinking sports reporting:
It’s a quietly devastating indictment of journalism. And Wales is absolutely right, for reasons explored very capably a couple of months back by Matt Thompson. Arrive at the latest newspaper story about, say, the health-care debate and you’ll be told what’s new at the top, then given various snippets of background that you’re supposed to use to orient yourself. Which is serviceable if you’ve been following the story (though in that case you’ll know the background and stop reading), but if you’re new you’ll be utterly lost — you’ll need, to quote Thompson, “a decoder ring, attainable only through years of reading news stories and looking for patterns”. On Wikipedia, breaking news gets put into context — and not in some upside-down format that tells you the very latest development that may or may not affect the larger narrative before it gives you the basics of that narrative so you can understand what that news means.
Along these lines, Wikipedia was the third place I looked for information after hearing about the swine flu outbreak last April; the first blog post I read and stories provided by the New York Times iPhone application proved inadequate.
How should a news wiki be executed? I have my ideas but the only real way to find out is to experiment.
]]>In it, we identify the historical context for the issues that a number of print publications are having today, and lay the groundwork for why innovation is critical for the transmogrification and survival of these organizations. Innovation, in our world, is about experimenting and taking risks. It’s “trying what’s radically new” with the hope that some ideas will be good learning experiences while others will be tremendous successes.
It’s critically important that journalism schools experiment as well, and I look forward to a productive conversation about approaches they can take to create an environment that fosters innovation.
]]>Informational interviews are a key part of finding stories, David says. He consumes a lot of coffee, talks with people about what they’re working on, and then also asks about what else they’re working on. That secondary information can lead to interesting pieces down the road.
Marshall has a detailed workflow for tracking down stories in the tech sector. He’s been working for ReadWriteWeb for the last year and a half, and is responsible for two to three posts a day. Most of the time, stories are “interrupt-driven” or dependent on the news of the day. The whole staff logs into a single Fever account to share RSS reading responsibilities.
One source of feeds is pretty ingenious. A research assistant dug up people who first linked popular web services such as Twitter, Facebook, etc. on Delicious. He did so for a number of startups over the last couple of years and put all of that information on a spreadsheet. Based on this aggregate information, he was able to identify 15 or so people who regularly link upcoming web services before anyone else. Subscribing to these Delicious accounts has multiple stories a week about hot new startups.
Most of the ReadWriteWeb writers use Tweetdeck for Twitter. Marshall has the 4,000+ people he’s following organized into different categories, including NY Times, analysts, augmented reality, etc. The team has a Skype chat they keep open 24 hours for coordinating on stories. They use hashtags within the conversation to enable people to find information of a specific type (i.e. which stories need editing with #edit).
For tracking reactions to pieces he’s written, Marshall searches for conversations based on a specific URL with Friendfeed, based on the ReadWriteWeb domain in Digg, and recently favorited tweets.
Libby Tucker notes that the differences between David and Marshall’s reporting styles. David flies to Urbana, Illinois to interview a scientist, whereas Marshall notes that if he has to put his pants on, it’s a big day.
]]>
The lunch session at SPJ’s Building a Better Journalist conference today was YAPOTFON, or Yet Another Panel On The Future Of News. Conversation was facilitated by President-elect Hagit Limor (@hlimor).
DJ Wilson is the President and General Manager of the KGW Media Group in Portland. “More than ever, people are consuming media.” Part of it is the 24/7, anytime, anywhere demand from consumers. KGW is a content business that works to meet that demand.
Rita Hibbard (@rthibbard) is the executive director and editor of InvestigateWest, a reporting non-profit in Seattle started by ex-Seattle Post-Intelligencer staffers. The bad news is the sheer number of journalists that have been laid off; the number of credentialed reporters in Olympia, Washington has gone from 25 to 6. [Ed note 10/25: This may also be due to waning interest in covering government] “Readers and news consumers are starting to wake up to what’s being lost out there.” We’re not replacing the investigative troops, but figuring out new ways to get the job done. InvestigateWest is brand new; incorporated in May, website launched in July, and first story will be out next month. It’s a piece on the misuse of public lands. They generate original, high-level investigative content. The business model is to syndicate it to as many media partners as possible, not build up their website. The first grant InvestigateWest received was from the Bullitt Foundation, which hasn’t traditionally funded journalism.
“Collaboration is a big part of this new media ecosystem.” InvestigateWest is working with a number of media partners in ways that would not have happened five or ten years ago. “The era of one dominant media source in a community is over.” News will now be an ecosystem of many parts.
Steve Woodward (@nozzlsteve) is CEO and a co-founder of Nozzl Media. Nozzl Media is a startup that builds tools for news organizations to provide real-time, personalized streams of information to their audience.
“A lot of people in newspapers thought the internet was a fad and wouldn’t go away. When it persisted, they didn’t understand why it persisted because they didn’t use it.” It’s important, Steve argues, to learn from the past. Newspapers have moved online, but they aren’t learning new tricks. Display advertising online is forecasted to peak this year and then decline. Newspapers need to think seriously about video ads, search ads, and other formats for helping businesses get their message out.
85% of all potential advertisers in any given market are never contacted by ads salesmen. Most are just going after the same 15% over and over again.
“Be the competition,” Steve argues. Sales staff should act as an ad network now. Sell ads for your competitors too, to allow the client diversify the platforms, and take a cut of that.
Abraham Hyatt (@abrahamhyatt) is the founder of Digital Journalism Portland, an award-winning journalist, and currently working on a year-long research project looking at innovation on mainstream media websites.
Abraham hates the phrase “the death of newspapers.” It’s a crutch, he says, that polarizes thinking and limits the realm of possibilities. The really interesting examples of innovation are the super-local shops. The one or two person news organizations that are experimenting and have a willingness to fail. “It’s the little guys that are weaving together a tapestry of innovative ideas.” They’re the ones that are going to shape the future of news.
DJ says that technology is driving the core of what they do. On a business side, they’re balancing revenues with expenses and using technology to keep up. Abraham mentions that small groups are the ones that are nimble enough to try experiments and DJ says there are multiple groups within KGW doing this. She also believes that there will always be money in producing content; it’s a matter of figuring out how to deliver it on all of the platforms.
What are media sites doing well? Abraham has been pleasantly surprised by the number of organizations that are making money on mobile. They aren’t making money on their content, rather they’re building different consumer applications. DJ says that KGW is doing a lot to optimize their video delivery on their website. They’re also generating revenue by working with many businesses to offer coupons, and then taking a cut from any sales generated. Steve hasn’t seen much innovation from newspaper websites. “They have a lot to learn from tech companies.” The Palm Pilot was very successful in the 1990’s because they spent a tremendous amount of time measuring shirt pockets. This is called “form factor” and is really important. Newspaper companies don’t think about form factor. “No one under the age of 40 likes broadsheets, they like tabs… Why aren’t there special coffee shop versions of the paper that are more tailored to the experience?” Newspapers, Steve argues, need to invest in significantly refining user experience, both on the web and in print. They redesign at a drop of the hat but nothing ever changes significantly.
]]>Jay Rosen, who you should follow on Twitter if you don’t already, lays an excellent foundation:
http://www.youtube.com/watch?v=RIMB9Kx18hw
Ryan Sholin breaks down the argument for linking into five parts. Basically, journalists should be responsible citizens of the web. They have responsibility to their readers to provide as much information as they can bring together, responsibility to build bridges between the different parts of their online community, and responsibility to point readers in the direction of the right information when the journalists don’t immediately have the answer.
One point I touched on and want to reiterate is linking is a process of showing your work. This is fundamentally a Good Thing. Both Sean Sullivan and Paul Balcerak agree. In the age of newspapers, buggies, and clapboard houses, the reader was forced to make the assumption that the publication fact-checked and caught all of their errors. Hyperlinking text inherently means that the reader can then go and check out what you’re linking to. If you’re writing a piece with facts you want to substantiate, you can link to the source of every one of those facts. In fact, I agree that it’s “suspect for journos not to link whenever possible.” Making the reporting process transparent builds trust between the publication and the reader, and trust builds brand.
Unfortunately, there are still a number of traditionally print publications that haven’t caught wind of this. A few days back, NYU Local, the upstart publication at NYU, accused the Washington Square News of pilfering their posts without attribution. They found five examples of where NYU Local originally reported the story, only to have Washington Square News rewrite the story and pass it off as their own. If you read through the comments, you’ll notice these examples aren’t necessarily where NYU Local had the scoop, but that shouldn’t get in the way of a critical point Lily is making:
Over the weekend, your former editor and current contributing writer Sergio Hernandez posted about “The Embittered Feud Between NYU’s Junior Journalists” on his personal blog. The post itself was worth reading, but part of Sergio’s response to the onslaught of NYU Local contributor comments was even more interesting and on-point. We complained about your shoddy linking and he dismissed it, saying that we are completely different beasts, and that your online presence is a mere formality. Because your primary medium is print, perhaps for you the web essentially serves as another vehicle to display that print content. Sergio was right in some ways: your paper and our blog are completely different beasts, but the fact remains that your website and NYU Local are not. When you translate content to the web, you need to adjust it to coincide with online ethics. And one basic tenet of those ethics is linking. As young, informed internet users, we assume you know all of this already, so why haven’t you acted on it?
I suppose this is more an argument of “shoulds” than realities. Because, in reality, it is all too easy for you to say that WSN behaves like a traditional newspaper, free of links, and leave it at that. The thing is, you spent the summer re-vamping your website (for the second time in less than two years). Why bother making your site more attractive if you couldn’t care less about advancing the level of your online content?
Not only that, but the “ethic of the link” is actually a more powerful tool, method, and ethos for journalism than anything that came before.
It’s a big, wild internets out there with many examples to illustrate my point. I’d like to share a few:
Ultimately, linking provides tremendous value to your readers because it allows you to highlight the most authoritative voices in a story. At Publish2, we build the tools, including the one I used to add links in this post, to make this happen.
]]>The topic for this BarCamp? Redefining J school. The news industry is going through epic change that most J schools are ill-equipped for. It’s time for a new style of learning. We brainstormed several possible sessions:
Granted, I’ve done a lot of punditry in the last year talking about how J school is obsolete and needs to be completely reinvented. It’s time to translate grand ideas into action.
We’re planning to meet at 6:00 pm PT in the EMU Fishbowl, next Tuesday the 6th. Join our Google Group to stay in touch, or leave a note in the comments.
]]>Page load time, however, determines whether people will stay on your site and do what you want them to do. Speed and performance affect can change perceived quality and credibility of the website. “You can have a great brand and your site is really slow and people will think you’re crap online.” It’s critically important that your application maintains the user’s flow and focus. Amazon says they lose $1 million for every extra second in their shopping cart experience. There’s also an environmental impact for slow site. The number of data centers in the last four years has doubled, and has an energy consumption equivalent to five 1,000 megawatt power plants or the entire state of Mississippi.
In short, build a site that is optimized and doesn’t use more resources than it needs to. Be proactive about it.
There are a few steps you can take to get started in optimizing your site. Firebug for Firefox, YSlow (a Firebug plugin), and Google Page Speed are tools to help you in your efforts. First, ask the question: Are you site load issues related to server performance or client performance? You can use Firebug to test how long it takes to download the HTML from the server. If it takes several seconds, then it’s most likely a server issues. Otherwise, it’s a client-side performance issue.
If it’s a server issue, SQL Monitor is a WordPress plugin that will look at how many SQL queries your site is making on each page request. When turned on, it will print all of the queries at the bottom of the page. During the demo, Cloud Four had 49 where Silicon Florist had over 1,000. This will cause a slow response time from the server.
WP Super Cache, when installed and activated, will show you at the bottom of the page whether it’s working or not. Many people install WP Super Cache, activate it, and expect that it will automatically make their sites faster. Sometimes it’s not as simple and doesn’t get configured properly.
Most of the time with site performance, however, it’s not the server. Yahoo found that, across a number of sites, only 5% of the performance was related to downloading HTML. When you’re doing performance work, you should make sure to do a benchmark test at the very beginning. Use that as a foundation for the work that you’re going to be doing.
First rule of improving WordPress performance: GZIP everything like your life depends on it. Case study showed 80% reduction in file size. Most servers will let you do this with an addition to your htaccess file:
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/x-javascript application/x-httpd-php application/rss+xml application/atom_xml </IfModule>
Second rule: Tell browsers to cache everything possible. Even if the file has been stored locally, the browser will still make a request for a new file. Yahoo solves this problem by naming files with the date they were created, and then telling the browser to never expire that file. Something like “logo.png” becomes “logo-20090919.png”. If you need to update the image, then it’s just a matter of uploading a new image with an updated file name. Not doing this will lead to massive HTTP requests on every page the user loads (which is bad). This can also be done through an htaccess change:
<IfModule mod_expires.c> ExpiresActive on ExpiresByType image/gif "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType text/css "access plus 1 month" ExpiresByType application/javascript "access plus 1 month" ExpiresByType application/x-javascript "access plus 1 month" ExpiresByType application/x-icon "access plus 1 year" </IfModule>
Third rule: Reduce the number of files on each page load. Combine all of the CSS or Javascript into as few as files as possible. WordPress creates this problem because of the number of plugins you can install. Each one wants to add its own CSS and Javascript. There are ways that you can combine them into one request.
Fourth rule: Make sure your images are of the correct size and format. For instance, with the WordCamp Portland logo, the PNG version was 4 kb and JPG version was 24 kb. The JPG image was uploaded to the site originally. Also, make sure images have been resized to what they will be displayed as. Don’t load a larger image than you need to.
Bonus rule: Use CSS sprites for your images and graphics. There’s a website called SpriteMe that will find all of the images on the site, suggest which can be made into a sprite, create the sprite for you, and even generate the new CSS for you to place in your stylesheet. Site optimization for the lazy folk.
]]>I’m a big fan of services that can reliably keep my data in sync across multiple computers. Dropbox is likely my all-time favorite, and allows me to effortlessly sync 50 GB of documents, code, and media between my laptop and my desktop (ahem, .Mac). CoPress has a folder we’ve shared amongst the entire team for making accessible meeting notes, documentation, legal information, etc. Evernote, even with a mediocre user interface, enables me to quickly have access to my notes across any device. My notes are organized in the way of the GTD and I can easily search or filter by tag to get what I need.
Trust, however, is a very critical component of any relationship with a cloud or syncing service, and transparency is one method for achieving it. Dropbox is a pro in this regard; every account has at least 30 days of version history for anything that’s being synced.
Early yesterday, I made the move to Adium and decided that I finally wanted my Address Book accessible across multiple computers. Spanning Sync was the most obvious choice, as I’ve been using it to bring my calendar from iCal to Google Calendar and then to another iCal for several months now with no serious complaints. It’s blind trust in the service, though. Spanning Sync has a sync log, but the only way to revert to prior versions is to make your own backups and brute force it. The same thing applies to Address Book information which, in my situation, isn’t all that great of a solution.
I did as clean of a sync process as I could think of to get it right the first time. The Address Book on my MacBook has the gold master of my contacts, so I backed up and did a one-way sync to Google (overwriting all of my contact data) and then a one-way sync down to my desktop.
The result? I have 794 contacts on my MacBook, 743 contacts in Gmail, and 742 contacts on my iMac. It almost worked. Kinda.
Spanning Sync presents two significant issues for me that also affect the amount of trust I have in relationships with cloud syncing services in general. First and foremost, the numbers don’t add up. Not all of my contacts were synced properly, while some were entirely deleted along the way, and I have no way of figuring this out until I unsuccessfully try to find a person’s contact information. Of the 10 or so numbers marked as “favorites” on my phone, 4 lost their corresponding address cards. For the convenience of having contacts synced across computers, I’m willing to deal with this to some degree. Secondly, version history needs to be more robust than a log file. Every cloud service should keep a changelog of a week or more where the user can go back and revert an object to a prior state.
Intuitively addressing these issues in any web product means a greater amount of trust in the relationship.
]]>
Not actually an unboxing because I ended up putting it together late last night. I’ve been long coveting a workstation that I can either stand or sit at. A couple of folks at Grist had them, and Drew Bernard at ONE/Northwest has one he hijacked from a drafting table such that it goes up and down. I was envious all last summer.
Yesterday, I finally convinced my mom to make an Ikea run with me. Originally, I was looking at either the Galant or Fredrik. The Galant is a table that can be raised as high as 35 inches. This isn’t enough to stand at, but conceivably you could stack something on top of it that would act as the workstation. Most attractively, it has a very wide surface area to work with.

The Fredrik is designed specifically to be a computer workstation. It has multiple shelves that you can manually adjust the position of such that it can work as a standing desk or a sitting desk. The downside was that it seemed really utilitarian and “office furniture”-like to me. I wasn’t absolutely set on either.
In the 11th hour of the decision-making, Andrew Jesaitis suggested I look at IKEA’s bar tables. It was there I came across the Leksvik, and I’ve been rocking it all morning. It offers the same large surface space I wanted out of the Galant while also being tall enough that I can perfectly stand and work. There’s even a matching stool I can use when I need to sit.

The question isn’t what are we going to build, but really what aren’t we going to build?
The Open Assignment Desk (formerly known as the Virtual Assignment Desk) is a tool for leveraging openness in the story creation process. Hat tip to Jay Rosen and Dave Winer for talking about the left side of the same idea in episode #12 and episode #18 of Rebooting the News.
It brings the funk in stages.
The first is to fulfill the needs of the newsroom in regards to managing story workflow. Stories can start as pitches, get approved and become drafts, and, once completed, go through the editing process to become published pieces. The Open Assignment Desk fills things in by tracking all of the meta data associated with this process, including when the story is due, whether there will be associated photography, the location of the story, etc. Each newsroom would be able to fine-tune their workflow as well. If the publication was going for speed, then their editing process might just be one stage. If the newsroom was more concerned about the accuracy of their content, then they might have a three stage editing process. This idea isn’t really that unique; Max has a product he’s working on for the Courant News CMS called Nando, and CoPress has a currently stalled project called Edit Flow that will soon be back on its feet.
Once the newsroom has adopted the tool, then you roll out stage two: the ability to make this editorial flow public. The newsroom has granular control over which parts of the editorial process are transparent. If they decide to be open about the decisions within the newsroom, the news organization can build engagement with their community and, ideally, the community develops a greater sense of ownership of its journalism as process.
The third act is to allow the community to contribute to the reporting flow in a meaningful way. There are two specific things I’m considering at this point:
News CRM acts as an open, participatory rolodex. The goal is to capture common knowledge about sources based both on what the journalists of a news organization know, as data generated by how the source interacts with the news organization.
The best way to describe this is by doing a mental fly-through. When a journalist is interviewing someone the system has never seen before, they create a new profile in the system. The profile contains fields for contact information, location, occupation, etc. and a free form wiki text area for notes about the person. The journalist doing the interview can also create an association between their text notes, audio file from the interview, and other content within the CMS to the source profile. By doing this, journalists who need to pull information about the source in the future will have access to the sum of news organization’s knowledge.
Assuming the source interacted digitally with the news organization on a regular basis, the CRM application would also be responsible for extending their profile by tracking those interactions. For instance, in step one the journalist would record any or all email addresses regularly used by the source. If the source comments on an article where they are quoted, then the comment could be flagged as a clarification in relationship to their profile. If the source comments on another article, then the tags of that article would be applied to the source profile as topics of interest. Based on how the community reacts to the comment, by voting it either up or down, the source’s authority on the topic would change dynamically.
The goal with this tool is really to structure information about a news organization’s community such that when the reporter needs to do interviews on, say, water, they have an entire database of the “right” people to seek out.
]]>
On Tuesday, July 21 around 11 pm Pacific, I stumbled across a serious information security flaw in DuckWeb, the University of Oregon’s student information portal. For some of the work I’ve been doing with Publish2, I’ve been paying close attention to the composition and beauty of URLs. When printing out my degree audit for a trip down to Eugene the next day, I realised that the print version of the degree audit had a unique string of digits at the end of the URL. Curious, I changed the last two, refreshed, and ended up with someone else’s degree audit.
Now, I believe this is what security experts might call a “really stupid programming error.” Better yet, I found out that I could log out of DuckWeb and, with the URL I had copied and pasted into a text file, still access the print view of my degree audit.
According to an article published today in the Daily Emerald:
The glitch originated in the system the University uses to upload degree audits. All degree audits for which information has changed on a given day are uploaded simultaneously that night and assigned what [University registrar Sue] Eveland said is a randomly-generated nine-digit number called a batch number. That number is at the end of the URL for the printer-friendly version of the audit and it is the one Bachhuber used to access the degree audits.
Eveland said only the first audit uploaded on a given night was accessible through the glitch. She also said the University removes the data tied to the batch numbers every 30 days, which she said means that only “15 to 20” audits would have been available to those who knew about the glitch at any given time during a 30-day period.
To correct the facts stated in the article, I originally emailed both the Registrar’s office and University IT Help late Tuesday night. I didn’t expect a prompt response during the summer, and was pleasantly surprised at how quickly they both responded to my email and acted on the flaw (by first disabling the print functionality and then later adding a patch). One of the people I corresponded with credited the screencast I originally made of the exploit as “very valuable in [their] initial testing.” Additionally, I did not look at the degree audits of three other students.
If I were doing the reporting on the story, I would also vet the claims of the University in regards to the number of student records you could access with the exploit. Only allowing “15 to 20” student records to be publicly accessible to anyone is still in violation of FERPA and, depending on how the system works, the exploit could have allowed access to different student records at different periods of time. I’m pretty sure that I’ve been able to print my degree audit the entire time I’ve been at the University of Oregon.
]]>This Week in Rebooting the Ecosystem for Reinventing J school
Writer’s note (because there ain’t no editor): In all seriousness, the three of us love, like serious humanly love, This Week in Tech, Rebooting the News, and all people, podcasts, and/or cities we tease at in this episode. It’s only out of love that we jest. We have better technical difficulties too.
To frame the solutions to the problem, we begin by establishing some of the ways in which J school is a broken model for the 21st century. In most other fields, Joey Baker points out, academia is the research space. If that’s not the case, then it’s the military. The news industry is the only one where the industry leads and academia is behind.
Greg Linch points out another issue in that J schools, as institutions, are really slow to change. They have a critical inability to adapt quickly. This is a bigger issue in the 21st century because some of the tools journalists need to know how to use are changing at an exponential rate. As both Joey Baker and I point out, many of the tools taught in a four year undergraduate program are obsolete or nearing such a stage by graduation. J schools aren’t going to get back ahead by teaching “social media.” The problem isn’t with what they’re teaching, but rather how they’re teaching it. Another fundamental that needs to change.
A third issue is that the core curriculum is one size fits all. The class structure and material of 200-level courses is generally designed for the perceived average of 200 hundred students. As such, it doesn’t match any of them well and at least some of them are in the extreme ends of the bell curve where the class is completely worthless.
The grading system is broken because there’s no system of rewards for those who try experiments and learn from their failures. The list goes on.
It’s not the end of the world for journalism schools, the university system, or newspapers. There are just fundamental ways in which each need to change.
On a related note, I thought of two more parallels between J school and newspapers in the past 24 hours. One: all of the university lectures around the world are pretty much rewrites of the same thing. Two: students have very little say in the content of what they get from the professor.
The solutions aren’t unique and won’t be easy to implement, but all of the ideas we discussed would make us excited to be back in school (bootcamps, barcamps, testing out of classes, and experiential education ftw).
Our picks of the week are:
Enjoy the podcast. It’s worth skipping the first nine minutes and then listening to the rest all of the way through. Greg has a brilliant point that we actually had to create an addendum for at the end.
Later: In my rush to get this post out, I missed two really great sets of ideas from earlier this year: “Remaking Journalism Education: Some Thoughts” from March and “Bring-a-Professor chat wrap-up” at CollegeJourn in February. Absorb those as well.
[audio:http://danielbachhuber.files.wordpress.com/audio/db20090802reinventjschool.mp3]
]]>
Arrived a few minutes late to Digital Journalism Camp, organized by Abraham Hyatt, and these are my notes from the first session about news entrepreneurship in Portland. Steve Woodward and Carolyn Duncan, of the Portland Ten, led the session.
Steve Woodward of Nozzl Media argues that the drop in newspaper revenue is a metrics problem. Newspapers need to work more with metrics and be able to prove their value such that they can reengage their advertisers. The tools for metrics in print are much less than the tools for metrics online.
Discussion about Perez Hilton. Carolyn Duncan asks “who the hell was this guy three years ago?” Chuckles from the audience as someone asks “who the hell is this guy now?” The same guy asking that question follows up with “if you want to be in this business, trust is the word. If you don’t have trust, you’re not going to make a dollar.”
Pete Forsyth on trust and citing sources on Wikipedia: “you want to have a clear, transparent editorial process.” The producer of the content has to adhere to a published set of standards that others can audit.
From Aaron Weiss, “TMZ adheres to a different set of ethics than CNN because it pays sources for information”. Reaction to that is that “it’s a mistake to think that all bloggers don’t follow a editorial process.” There’s a layer of news gathering right now that’s figuring itself out.
Nozzl Media is at the state of figuring out what the users want by asking them directly, instead of having conversations with other journalists about what the users might want (which is what is happening in this session). 100% of respondents didn’t want advertisements but did want to learn about deals offered by different businesses.
Kristin Wolff: “It’s an exchange. There’s an important element to this exchange and that is disclosure.” Transparency is the new objectivity. Bloggers offer this objectivity and are more open about who their advertisers are and how they are paid. The advertisements with the Sunday newspaper are just dumped into the recycling.
Steve Woodward argues that the local advertisers who don’t normally advertise in the newspaper (because it costs too much) are much more savvy about Google AdWords, etc.
Aaron Weiss asks why isn’t anyone at the bigger news websites in the Portland area trying to figure out the technology to sell more targeted ads? Carolyn Duncan argues that it’s because it’s not anyone on the business side’s core competency.
Ken Keiter says that it’s important to remember that large companies like KGW bring in outside companies to figure out the new advertising technologies. They don’t have the technical competency in-house to do the innovation that’s necessary to do more targeted advertising, invent new revenue streams, etc.
Question from the audience: what are the solutions you guys are thinking of? Some discussion about innovation at the Oregonian. Steve Woodward points out that this is one of the only rooms at The Oregonian with whiteboards in the newsroom. The Oregonian needs to invite more creative people into the building because “the business model has blown up like an IED.”
]]>
On Tuesday, I was quite pleased to announce the first formal release of the Publish2 WordPress plugin. With the 1.1 version, journalists on Publish2 can easily add their link journalism to the sidebar of their blog, add a reading list much like I have on my own website, or have simple, intuitive access to their curated links at the point when they’re most likely to need them the most: when writing a story.
Ok, enough with the public relations speak. That last bit is what I’m really excited about. We’re calling it Link Assist, and I’m itching to write about some of the the philosophy driving it.
I digress to set the scene. Link Assist is a widget-y bit of functionality that lives in the sidebar of your edit post page within WordPress (where you’d actually write a post). Getting it set up is a simple process of dropping your link journalism URL (this is mine) into “Your Profile” under “Users” and hitting the checkbox for Link Assist. Once you’ve done this, Link Assist will load automatically and in the background every time you set up to write a new post.
This is where the magic happens.
Link Assist is all about making your own curated web more useful. When saving a link to Publish2 with comments and tags, you’re making an implicit judgement that the link holds value. The immediate return on your effort is that you share the link with your readers, either via Twitter, “What We’re Reading” embedded on your publication’s website, etc. What you’re doing when you’re curating the web, however, is also creating a repository of information whose value is in relationship to you. The comments and tags you assign to a link define this relationship. Link Assist is another step in making that very repository much more accessible. When you have that thought of “Oh, I remember reading such and such which would make a good link to the graf I’m writing at the moment,” the link you’re thinking of should be at your metaphorical fingertips, instead of lost in one of the 50 tabs you have open.
With this first release, there two distinct navigational features to make this happen. The first is that clicking on the tags associated with every link will then filter your links by that tag. Personally, I have a deliberate approach to tagging my links. My strategy is intended to both serve as information descriptive to the reader and give them a broad sense of what the link is about, but also to serve as a navigational tool for me when I need to find that link again.
As an example, I often tag links with the type of link, the location the link is relevant to, and/or broad yet descriptive keywords for what the link is about. I’m also a big fan of using proper nouns. It isn’t an exact science, but I try and mimic my tagging taxonomy across platforms (Publish2, WordPress, Gmail, etc.).
Ultimately, the work building this mental framework for how all of my links fit together pays large dividends. When presented with the right tools, I have a whole set of breadcrumbs I can follow to find the link I’m thinking of. Link Assist takes advantage of this to make navigation, or getting at what you need to find, much more intuitive.
Link Assist also includes a second unique, experimental approach to navigation — as long as you’re not on IE 6. You can use the entire right and left side columns as buttons, as well as arrows at the top, to go back and forth through your links.
There are a number of services out in the interwebs that will automatically populate your posts with links, images, and videos. Link Assist is geared towards those who have a prejudice against a machine and algorithm adding dubious value that is then passed off as their own. It’s the human touch that adds the most value.
Link Assist meets you where you need it and offers a powerful way to better curate the web.
]]>Case in point: The Daily Emerald, I believe as a part of their magazine edition for IntroDUCKtion, created a campus directory. The directory includes dozens upon dozens of email addresses, URLs, and phone numbers for student organizations and sports at the University of Oregon. In the print magazine, which I don’t have access to because I’m in Portland, I’m sure this list of contact information is beautifully presented in an approachable, useful format. Unfortunately, this same list made its way into the website as a long, ugly, flat text file:
In my humble opinion, there’s a lot of room for improvement.
What if, instead, we approached this directory as the database that it really should be? This web-native directory would have profiles for every student organization much like students can have profiles on Facebook. I’d be able to search for organizations based on the name, the location on campus, people currently involved, the mission of the organization, tags, etc. If I found a organization I was interested in, I’d click through to their profile. The profile would then give me access to all of the contact information I might need in addition to the most recent or popular articles, images, videos, updates from the campus’ microblog, etc. There’d be a small wiki section for the organization or sport where I could read up on its history and know that the information I was getting was true because it had been curated by the beat reporter.
I see at least two advantages to this approach, in addition to making all of the information much more accessible (versus the flat text file). One, you’d only have to build this once. Two, you’d save the reporter or designer a lot of time having to search for the most up to date contact information because they could just pull the information from the database as they’re creating the print product.
Think of role of the student news organization less as a newspaper and more as a platform for impartial, accurate community information to be shared.
]]>I did my best to explain my understanding of how the business is changing, the forces driving the change, and what trends are solidifying for the future. Newspapers and journalism are under the influence of longer-term change because of more ubiquitous ICT, but the current cacophony of crisis is largely due to the biggest recession in half of a century and over-leveraged debt. A lot of the discussion has been centered around the lack of leadership in redefining newspaper business models, but I think Michael Nielsen deserves merit for saying that newspapers might also be failing because their institutional structures are too optimized for an old paradigm. They are too good at what they used to do, and the jump into experimental and uncertain territory is nigh impossible.
That was Nielsen’s most visible takeaway. More obscured, although equally important in my opinion, is his opinion the successful companies of today, Google, Apple, etc., have a foundation of “technological innovation, and most key decision-makers [are] people with deep technological expertise.”:
If you doubt this, look at where the profits are migrating in other media industries. In music, they’re migrating to organizations like Apple. In books, they’re migrating to organizations like Amazon, with the Kindle. In many other areas of media, they’re migrating to Google: Google is becoming the world’s largest media company. They don’t describe themselves that way (see also here), but the media industry’s profits are certainly moving to Google. All these organizations are run by people with deep technical expertise.
This is one of the paradigms we’re trying to instill in student newspapers at CoPress. It’s no longer acceptable to outsource your CMS to a third-party company who doesn’t care about innovation; technological innovation has to be at the core of your business. Granted, CoPress does offer competing hosting and support with WordPress, an open source publishing platform, but our ultimate goal is hold the hand of student newspapers as we help them develop their internal capacity to create.
Let’s take a 10,000 foot view at this, however. In my opinion, there’s a deeper technological shift happening that eventually will affect all industry and every facet of society. The internet is becoming a utility, much like electricity, and those who don’t have the utility at the core of this business operations will seem as backwards as businesses today that don’t use electricity. Simplistically, the disruption the internet is causing first hit the music industry, then the movie industry, and now the newspaper industry. I assume that it will also affect at least healthcare, politics, and education, industries that Andrew observed “have deeply entrenched positions of power.” I also assume that those with power don’t generally enjoy giving it up, instead preferring to try and manipulate public policy with the likes of France’s “three strikes” legislation and Connie Schultz’s attempt to make copyright even more restrictive and ban linking on the web in certain situations. Lastly, I assume that this type of reactive behavior is beneficial to the monopolists only and damages general society on a whole.
Given these assumptions, what general lessons can we learn from the music, movie and newspaper industries such that our society is less seriously disrupted when healthcare, politics, and education face the same type of deep transformational change? Keep in mind, too, that these are industries which will likely also shed thousands of jobs as they go through at least structural, and maybe even technological, unemployment. This is history in realtime.
]]>When navigation functionality like this becomes a part of the design, a website can become exponentially more useful to the reader.
]]>
I now live in the library ghetto. This means that, because of where I live within the City of Tualatin, I can reserve or check out books only from the Tualatin Public Library, and not any of the 13 other libraries that are a part of Washington County Cooperative Library Services. Thankfully, my local newspaper is all over it. Oh wait, they only publish once a week on the same day that the letter came out.
Later: I’ve started generating a list of questions I think it would be useful to have answered. Weigh in with your own by using the tip form.
]]>On Friday afternoon, I had the chance to connect with Susan Mernit of Many Hats, Inc. for the very first time and Cornelius Swart of the Portland Sentinel and Portland Media Lab. I’ve been invited to work with Cornelius on the Portland Media Lab; our very first meeting is tomorrow, Monday the 15th, and I thought it would be worthwhile to talk with Susan about what they’ve learned in the several months the Public Media Collaborative has been developing in the San Francisco Bay Area.
The goal of the Public Media Collaborative is to educate local communities, non-profits, and grassroots movements on how to use a lot of the social media and publishing tools that are now available to empower people and build democracy. In Susan’s opinion, this is a bit different than the mission of the Portland Media Lab, but both Cornelius and I agree that tools training is at least a half of what we’d like the media incubator to be.
Our conversation with Susan about both projects is the first thirty minutes or so of the audio. We cover the origins of the Public Media Collaborative, what type of training it has accomplished thus far, and Susan’s community news startup of the very new future, Oakland Local. After she leaves, Cornelius and I talk a bit about ideas for the Portland Media Lab and what the future of journalism might hold in general.
As a note, I started editing the first fifteen minutes of audio before I realised how much I want to be a production engineer. If you find any major kerfuffles, let me know and I’ll update the production value.
[audio:http://danielbachhuber.files.wordpress.com/audio/db20090612swartandmernit.mp3]
]]>
David Cohn pegs a newsroom as a cafe where people can hang out and, through food and drink purchase, provide an alternate source of revenue for reporting. Twenty percent of every coffee you bought might go to reporting in your local community, or something like that. For Steve Outing, the newsroom as a cafe is a place for your people to connect so that you can have greater access to your community. Both of these are pieces of a bigger picture that’s been stewing in me for a couple of months; dessert and beer at the Pied Cow on Belmont last night provided a photograph to illustrate my idea.
It’s not just about using a different industry to add to reporting revenue, but rather repositioning the news organization as the information hub for the community. The newsroom as a cafe should be an 18th century salon, or space for the leading discussions of the day to take place, ferment, and spawn action.
Mark this idea as incomplete until I can start working on it. At the moment, I think it would include:
Realtime data streams about the community on the walls. Twitter, Flickr, and every other service that expresses data against geography in some regard. The reporting work done by the news organization and stringers would come in realtime as well; see the reporting as it happens. You could build an app that visualized the trending topics of the aggregate of those services.
Editorial meetings that are open to the public. Highly-engaged members of the community can come in and participate in the process to decide what gets reported on each week. All of the possibilities are generated beforehand with a kickass web app where authenticated people help identify all of the things that need to be reported on in the community (i.e. information that needs to be generated).
Workshops for community youth on hacking new tools to mash up regional data. Part of the attendance requirement would be that they then have to give a presentation back to the community on how they did it.
Equipment rental. Members can check out audio recorders or digital SLRs to cover the local city council meeting.
Chai, but not the spiced kind. Just straight up black tea, milk, and sugar.
]]>Dave Winer and Jay Rosen in the 12th edition of Rebooting the News explore a concept Dave refers to as a “coral reef” for local information. The importance of a coral reef in the sea is that it is a habitat for many other species to prosper. His argument for starting In Berkeley, what he thinks is the first local blog for Berkley, is that it might provide a coral reef for a lot of tremendous local data to grow from. Given the right formats for information storage, it can become a repository for community knowledge that everyone within the community can both contribute to and benefit from. What got me thinking, though, was what these formats might be.
The obvious one is the article slash blog post. There really isn’t any distinction. The blog post is the big bucket in which you can drop any sort of community data. The unfortunate thing about the generic blog post, however, is that the data you put in the post generally isn’t structured in such a way that the aggregate of the posts offer value too. If I report on a crime, lost dog, or house for sale with a given location, a given time, and other common values, the information is presented to me as readable, but not enhanced.
A local blog as a coral reef, or many different types of data sets for information to hangout around, would offer a vibrant, growing, and evolving habitat for a community’s collective knowledge. For instance, an article about rent prices going up, something I used to be concerned about as a student, would be closely related to a database of community-contributed rent rates. This information would be a part of a larger, community-created housing data set that included rating of landlords, whether utilities were included or not, etc. The rental rates mashed with location, however, could generate a interactive heat map that offers timeless value.
I think the key point I’d like to make, however, is that the data shouldn’t get lost within its framework. In a blog post, there’s much information that, if presented in a hybrid structured/readable format, could be be useful as an aggregate as well. Projects like OpenCalais do this by taking a brute force approach to deriving data and relationships from unstructured, block text. Posts could be published as semi-structured information however, in a manner I’ll write about when the idea is better fleshed out.
Building off this coral reef concept, Dave and Jay started talking about the virtual assignment desk for the NY Times hyperlocal blogging experiments. It’s a blog post and an email address right now, nothing better than what could’ve been done, had newspapers been this forward-thinking, with GeoCities in the 90’s.
We’ve started a project called Edit Flow [PDF because the wiki is currently down] under the CoPress umbrella that might create a nice intersection between the coral reef of information and distributed assignment desk. The goal the project is to enhance the editorial workflow capabilities of WordPress in five stages: custom post statuses, meta data for posts, workflows and user groups, a pitch system, and then windows for visualizing the aggregate of the information. Each stage provides a nice foundation for the next. The pitch system is how you’d enter all of the information, or assignments, into the system, and it would be just as easy to build a public interface to that data as it would a private one. In fact, easier because you’d be free of the WordPress admin. It’s a coral reef because it’s a whole bunch of editorial hooks you can hang information from, and it’s an assignment desk because, well, that’s exactly what we intend to build.
]]>Note: this memo is open in the sense than anyone can read it, but also in the sense that you damn well better steal these ideas.
As Ryan Sholin says, the business model is the elephant in the room. Let’s take this one step further: the value proposition is the elephant in the room. A basic rule of economics is that if you create something of value, you can monetize it. To paraphrase Douglas Rushkoff, money doesn’t make good journalism, good journalism makes money. Let’s take a look at the past. In the era of the print product, it was acceptable for a reporter to rewrite an article off the wire because their audience generally had access to that content in one place: the paper. In the era of an increasingly ubiquitous internet, these duplication efforts can actually diminish a news brand. Link to it instead of rewriting it. Add value first.
Once you’ve started eliminating redundancies in your product, understand that there is a forward direction for news organization business models and there is a backwards direction. Forwards is experimentation, uncertainty, and hard work. Backwards is trying to impose old business models into a new marketplace. Forwards is creating legitimate value for communities that both the community and the news organization understand. Backwards is attempting to devalue the internet in favor of the physical print product. Forwards is educating your clients of web advertising’s inherent advantages. Backwards is not letting your clients buy an online ad unless they buy a print ad. Forwards is increasing your quantitative data about all different segments of your market, and selling your services against that information. Backwards is trying to justify the value of “one size fits all.”
We’re entering the age of quicker and quicker innovation. To remain competitive, most traditional newspapers will have to completely redesign their newsrooms. The past was hierarchy and bureaucracy whereas the future is flat and distributed. I’ve heard stories where content to be published on the website has to be emailed to one or two Online Editors for placement. In 2009, that’s called a bottleneck. Instead, the editing and publishing process should be a frictionless digital flow. The newsroom should be space in which bottlenecks aren’t tolerated and where efficiencies can happen organically.
Nimble can be incremental. In addition to flattening the architecture of the newsroom, get your staff to expect constant change and have them be on the lookout for new trends and ideas. Encourage them to experiment, and have them report on successes and challenges with a blog dedicated to the changing newsroom. Critically discuss those ideas during regular meetings. Do not be the news organization that forces its employees to talk about innovation off company time. Do be the organization that invites local thought-leaders from different sectors to come in and give presentations during lunch to introduce new ways of thinking. Talks@Google offers a good example of this approach. Within the reporting process, have reporters save links to supporting documents, articles, and content, and publish those links as such when the story goes online. Make information curation on the web a part of their workflow to lower the friction in adopting this approach.
In my opinion, the Cedar Rapids Gazette appears to be an organization that is taking the right approach. I still haven’t had the change to read the entirety of Steve Buttry’s epic Complete Community Connection and am wary of plans to create local portal websites, but I believe they understand the need to be nimble and platform independent.
Embrace your community, they are core to what you do. Flatten your organization and make it a hub for innovation, creativity, and intelligent conversation.
Pragmatically, this can take a number of different shapes. Online, social networking websites, with Twitter and Facebook being the most popular and relevant at the moment, allow your reporters and editors the opportunity to increase the breadth of conversations they have with their community. Translate that breadth into depth. Even if they don’t have much of a following, reporters can use Twitter as an open, participatory notebook. I’ve personally found that I’m much more attentive to an event if I’m trying to synthesize the major points into 140 character summaries than if I’m just trying to take notes freeform. Twitter can also be a tool for distributed critical thinking; pitch a fact to the crowd to get a sense of the different perspectives on the issue. Most Facebook users add information to their profiles that can make the service a granular, self-managing rolodex. On the news organization’s website, journalists should engage in discussion on their articles and other articles within their beat. Think of your newsroom as a cafe, or an 18th century salon where the important conversations of the day take place. Make components of your news brand, online and off, the central hub around which this discussion takes place.
Remember that the strength of your relationship with your community helps defines your value in any business model.
Your platform for content delivery, let it be the print product, your website, or mobile applications, is the engine for your business. News organizations need to treat all platforms with respect. Moreover, your web presence is as important as if not more than your print product now. It may not be the platform that receives the most readership at the moment, but most newspapers got themselves into the backward positions they’re in now because they were being reactive. They need to be proactive on the web. News organizations should run, maintain, and develop their own websites in house.
There are two ways to do this that go in hand. First, hire a few web developers to regularly develop against your website. Of the things going unmentioned in this “newspapers are dying” conversation, one is that newspapers have consistently shot themselves in the foot with is not applying enough talent, resources, or creativity to the web. Some are just now beginning. The staff required to build, maintain, and develop new features for your website is as important if not more than your production staff. Most newspapers don’t act like this right now, and that’s why they’re newspapers and not legit news organizations. In fact, the local paper in my area, The Oregonian, created an entire second company under a different name for their online product. In addition to the technology and workflow problems, it has completely fragmented their brand. You need to hire developers, and those developers need to be included in the newsroom. This can be done incrementally, too. Hire a developer to set up blogs for your newsroom using the open source blogging platform WordPress, or similar project and expand from there.
Second, go open source. The problem with proprietary vendor platforms is that they get to choose the core characteristics of how your web platform runs and operates. A print analogy: outsourcing your newspaper design to an independent company that doesn’t really understand or care about delivering information to your community. Functionality is a product of design. All the vendor cares about is beating you over the head with their crappy content management system and stealing your money (or advertising revenue in the case of college media). Take control back. Furthermore, open source offers another distinct advantage: you now have access to hundreds, if not thousands, of innovative minds working to improve the software. Proprietary can’t match the explosive innovation offered by open source.
And with that, best of luck. Let’s get hacking.
]]>If you’re thinking about moving to Web Faction and are feeling generous, add “?affiliate=dbachhuber” to the end of the signup URL. It’s guaranteed to help a starving innovator out.
]]>DJ has an idea for augmenting the traditional textbook or, as Max puts it, adding an “onion skin” on top of the text. Meta data and meta conversations to make studying a collaborative exercise. If you think of the textbook as a platform from which learning can take place, then there are digital tools that can be built to make information flow happen more organically (think commenting, videos of professor explanations, quizzes, etc.).
The physical, analog textbook has a specific information flow which offers design constraints. We started the conversation with the assumption the content was digital, and therefore flexible, but the hacking DJ would like to do would work under the consideration of augmenting the existing textbook. His solution would be a web service or application to co-exist with the physical book.
Many existing textbooks, or at least the ones in my experience, offer crappy websites with supplemental information. With DJ’s idea, the service would offer an iPhone application that would complement the analog book. We talked about specific deliverables and the consensus was that a collaborative sticky note application could offer immediate value. I think a company like Flat World Knowledge might even take the project under it’s wing. Students would use their existing social graph to identify the people in their class and, when they launched the application, they would have access to existing notes left by their classmates or teacher as well as the ability to leave their own. These notes would be specific to the page, which the student could either “flip” to or have it automatically progress by specific reading page. The class doesn’t just need to meet in the classroom.
We started the conversation, however, with a higher level discussion about the difference between analog and digital content, and opportunities that might present themselves five or ten years out. With a traditional textbook, there is what I’m calling a “flow of learning” that is defined by the author. There are a certain number of chapters with a certain number of pages and, overall, it sets a foundation for the learning experience. When that content is digital, however, the “flow of learning” doesn’t need to be defined (necessarily) by the author. They’re just bits that could be defined by the teacher or aggregate voting by the previous class. If the content is malleable, then the textbook can change from student to student.
]]>Fred [Wilson] is suggesting that the education industry may soon face the same challenges that currently confront the music industry and the newspaper industry. Like those industries, education can be peer produced, delivered as bits, and curated by a community. Like the music and newspaper industries, the cost structures embedded in the education industry’s current business models may be very difficult to support in the face of competition from hyper-efficient, web native businesses.
As I’m reading this, a parallel between newspapers and the university system came to mind. Newspapers, as institutions with a business model rooted in a specific project, started uploading their content onto websites in the 1990’s without much concern as to how the Internet would fundamentally change their businesses. They treated their websites as side projects at the very most and minor annoyances most commonly. I think this is very much the case with universities. Progressive schools like MIT have started uploading their courseware, one critical component of their “business model”, to the web for anyone to download free of charge. At the moment, they still have natural monopolies on accreditation and physical space although part of me suspects that those too could change. Considering the newspaper industry isn’t failing gracefully right now, I’d like to think that there are lessons universities can learn from how newspapers dealt with the fundamentally transformative technology known as the Internet.
On a related note, David Wiley argues that OpenCourseWare initiatives are going to have to find a sustainable business model by 2012 or many will fail. To me this says that traditional educational structures that are attempting change will have to show signs of being able to successfully do so in the next few years, or else they will be destined to a downward spiral similar to many newspapers today. This timeframe seems a bit short to me, but I support the assumption.
Conversation from the entire day is up in four parts of video that I’m planning on listening to the entire way through. As someone said in the first hour, the value of the degree is becoming less and less while the cost is becoming more and more. There is a lot of space for this issue to be fixed.
]]>It is highly unlikely that newspapers will reclaim the monopoly they had on classified advertising pre-internet. They controlled the platform before the internet, and were able to dictate what information used their print pages to gain readers and audience. Some newspapers have lost control of the platform completely and the ones that haven’t will follow suit. Newspapers won’t be able to reclaim the classified advertising space by using the old mental framework for thinking about classifieds, by pretending they might be able to own the platform and charge access to it. Instead, it’s imperative to take the approach of hacking the platform and adding functionality, value, and convenience.
Remember Friendster? I don’t. I never had an account. It was upstaged by MySpace, where I had an account for a few months before it became uncool to do so. MySpace was then upstaged by Facebook. Yes, I’ll concede that MySpace has a large userbase, but its value in the mindspace of the users is rapidly diminishing and there’s a big need for creativity. Fortunately for everyone involved, there’s a low barrier to disruption on the internet.
The real way local news organizations can upset Craigslist and build a better classifieds is simple: create a micro-currency. In addition to providing a more user-friendly interface and the ability to add better meta data, news organizations with a specific geographic community should establish a currency to “monetize” the local marketplace. As Douglas Rushkoff says, the web, and web 2.0 especially, is breaking existing institutions because it allows people to create value on the periphery again. Local news organizations are in a unique, and therefore advantageous, position to provide the platform with which to capture the value of local transactions.
First, you must remember that what you’re trying to is facilitate a marketplace for your meatspace community in the digital realm. Classifieds aren’t just about selling stuff. They can also provide a platform for loaning material not currently in use. A micro-currency would be crucial for those minor exchanges that don’t necessitate the use of a global currency. For instance, I’ve got a paddle that I haven’t used in the last six months because I sold my kayak just over a year ago to raise travel funds. I don’t necessarily want to sell it because I intend to start kayaking again this summer but, in the interim, it’s sitting in the corner of my room. With a well-designed and executed classifieds system, I could be loaning out the paddle. The classifieds system would facilitate the exchange by allowing me to publish that I have a paddle available to loan, my location, my trustworthiness, and other metrics to increase the likelihood of a successful loan. Adding a micro-currency to the exchange would allow both the loaner and loanee to capture the value, and then allow me to use it for something else (like my friend Ben’s 70-200 f2.8 lens). Having a local currency backed by the local news organization, along with a better way to manage transactions digitally, would increase the likelihood of local economic activity taking place.
In order to make the platform trustworthy, the social graph would be a key factor as well. You’d be able to review the exchanges in an open and honest manner, and only lend to trusted friends and friends-of-friends. The news organization would act as the moderator to make sure both parties were satisfied with the transactions. You’d be able to buy into the local currency or do valuable work within the local marketplace that would earn you credit. For instance, volunteering a certain number of hours for a local non-profit or library, something that provides value almost exclusively for the local community, could give you currency to borrow items, gain access to exclusive events sponsored by the news organization, etc. A micro-currency powering a geographically-bound marketplace could also incentivize better crowdsourcing of local data, news, and information. The news organization could “pay” people to report the current milk prices from all of the local groceries, or ask specific questions of local politicians.
“Hyper-local” is the future of the institutions that currently think of themselves as newspapers. Hyper-local isn’t just content, however, and establishing a trusted currency to power a local marketplace is one critical idea for reinventing classifieds.
]]>Upgrading newsroom culture is one part of it, I believe, but the right tools have to be in place first so that participants in this new culture shift doesn’t run into barriers of frustration. I think strides can be made on both the frontend and backend of a news organization website. As a part of the user experience, comments shouldn’t require user registration but rather should be able to “sign in” with Facebook Connect or OpenID, or leave a comment with an email address to be verified once. If someone wants to add information to the discussion anonymously, I think that should be a submission form separate from the comment thread. The web is a global commons where news organizations should be facilitating intelligent conversations.
News Mixer has taken radical steps in regards to how the format of the comment, or contribution more accurately, shapes conversation. “Quips” encourage commenters to keep conversation sweet and concise, and “Questions” and “Answers” help define the quality of the article. I think it would be valuable if the community also could build on top of the information presented in an article by clarifying with their own perspective or submitting links to related context. News Mixer offers the ability to respond with questions and answers to specific paragraphs within an article; it would be sweet if someone writing a blog post could link to unique grafs within an article too as a way of building a more specific map of conversation. I also appreciate how the New York Times has “Editor’s Picks” which help distinguish signal from noise. Reporters and editors on a news website should be empowered to curate comments as a way of facilitating conversation.
Part of improving commenting will come from better tools on the administration side too. Comment moderation should be more granular, meaning that, instead of having an “Online Editor” who manages all conversations on the website, each reporter should be responsible for owning the full spectrum of discussion about their beat. WordPress, a publishing platform I’m quite familiar with, only one email notification option. Instead, reporters should be the ones approving new comments. In addition, it would be sweet to have a commenting system that recorded and presented more information about the respondent, including the number of times they had already left a comment, the topics they most commonly leave comments on, and any profile or background information either from what they’ve entered in the system or their Facebook Profile. Reporters and editors would be able to leave private notes about the commenters for future discussion moderation, and privately rate the perceived “quality” of the contribution. All of this information about the community’s contributions would be stored in a CRM database to provide value to the reporting process too.
There’s a lot of space for cool improvements in commenting systems. It’s just about building it in iterations and then experimenting.
]]>Cornelius Swart, Publisher of the Portland Sentinel, talks about the takeaways from this morning’s journalism sessions at BarCamp Portland, introduces the ideas behind the Portland Media Lab, and presents one reason why he’s optimistic for the future of news and journalism in Portland. Learning about the Portland Media Lab on Thursday personally made my day. The skeleton of what Cornelius is proposing seems very similar to the type of community empowerment work Jackie Hai and Richard Caesar are doing with the Amherst Wire, and I can very easily see the Portland Media Lab becoming an incubator for the type of journalism Portland needs.
]]>This data generated by ranking the freshness of information would immediately begin to build profiles of what the reader knows. If they’re logged in, the news organization could put this information on what they’re indicating they know and don’t know in a database, start aggregating it, and then feed the reader related links and stories on similar topics. Related information, however, would now be determined by both topical metadata and a virtual profile of their knowledge base. On the front end, the data that the readership is contributing could go towards a rating of how “fresh” the article is. If the organization were really forward-thinking, the content of the article could then depend on this profile of how much the reader knew.
Voilà. Another new format for news.
]]>It’s the biggest story of the weekend, no doubt, but there’s a meta-discussion to be had too. I first caught wind of the story late Friday night while waiting for Sean Blanda to pick me up from PHL. Processing through Google Reader, I briefly skimmed Xark!’s “Flu: Don’t panic, but pay attention.” The honest truth, however, is that I didn’t pay attention and it didn’t stick. The next morning as we drove to Temple University for #bcniphilly I was skimming through Google Reader on my iPhone again. This time I came across a post from Vinay Gupta on how you should take action if it becomes a pandemic flu (i.e. what steps you should take to be proactive). His perspective is what perked my interest to learn more.
Although at the top of Vinay’s post was a link to the Wikipedia article in progress, my first intuition was to “confirm” the facts and download the NY Times iPhone application. After three or four minutes, I was able to launch and see their coverage. The only story on the front page of the mobile app, however, was a short article about the outbreak at a school in Queens, New York. Not getting the context I wanted, I went to the Google Mobile app to see what search results it would give me. The top link was the Wikipedia article in progress which gave me the background to the previous three articles and posts.
Notice: only one of the four sources of information I accessed to learn more about a news event (i.e. “pull journalism”) was an established news media brand. I’ll refrain from putting that phrase in metaphorical quotes. This fact, based on a self-observation of news consumption, led me to believe that one of the most important conversations we could have at BCNI Philly would be on the role of the traditional news organization in an ecosystem of news.
Based on a thought-provoking conversation with Ryan Sholin, Eric Ulken, and a few others, I’d like to offer perspective. First, the formats for news need to evolve further. I mean, I went to Wikipedia because I wasn’t satisfied with how the New York Times presented information to me. If they launched a true news wiki with similar or superior accessibility, I think they could steal my attention back for one reason: the New York Time has a brand of accuracy and accountability that is backed by real people. Wikipedia has a brand of accuracy and accountability in my mindspace, but it’s not visibly backed by public faces. Extra points to the Times if they can build a wiki where authoritative figures can suggest edits, and then there’s some way to visualize which contributions came from reporters and which from scientists.
Two, be a curator. I started following @CDCemergency because Tim O’Reilly tweeted about it, not because the New York Times did. In fact, I don’t even follow the Times on Twitter because their profile isn’t any better than an RSS feed. I decide who I follow on Twitter based on whether they create value by curating the web. If I were working at the Times now, I’d create an account like @nytswineflu, which includes both brand and topic, and use it to publish new updates, tease both New York Times articles and others, and answer followers’ questions. Curation is journalism too.
On this topic of #swineflu, there’s another conversation being had about Twitter’s power to misinform:
That aside, the “swine flu” Twitter-scare has once again proved the importance of context – and how badly most Twitter conversations are hurt by the lack of it. The problem with Twitter is that there is very little context you can fit into 140 characters, even less so if all you are doing is watching a stream of messages that mention “swine flu.” Now, the lack of context is probably not a problem in 99% of discussions happening on Twitter – or, at least, it’s not a problem with devastating global consequences.
To me, though, this underscores the need for media literacy and critical thinking skills. Lack of context can be countered by one simple thing: the link. The value of the news organization in this new news ecology is to be a part of the conversation, and provide an easily accessible repository for vetted information, let it be a tweet, an article, or a continuously revised wiki. Reclaim that brand.
]]>
In Rajasthan, two boys in the 8th standard fill their father’s cart with water from the village naadi, or pond. It takes around an hour and a half for them to complete this task daily, and provides just enough water for the eight family members, 10 to 15 goat, a cow, and a bullock. The quality of their water becomes less important when quantity is a concern.
I’ve been working frantically for just over a week on putting together a piece for this year’s edition of Flux Magazine, only to learn at the last minute that my story was cut because I’m not an active student. If I have time next week, I’ll finish up what I was writing and publish it.
]]>I had the opportunity to get lunch today with Ryan Knutson (@UOknutson), a former colleague at the Daily Emerald that I respect and consider a friend. He’s several weeks away from graduating with a double major at the University of Oregon’s School of Journalism and Communication. Given the current state of the newspaper industry, and thus the education industry that feeds it, I thought it might be interesting to ask him about his perspective on the situation, where his felt his J school was successful and where it needs to improve, and why he’s optimistic about the future of news.
When he discusses the journalism school, I think there’s an important note to be made: most of the value in the education he obtained was from the skills he learned, not necessarily the academic side of journalism. As the tools and methods needed to do journalism change at a greater and greater pace, the four year approach of the university becomes an inappropriate and ineffective mechanism for delivering knowledge. I think this is a large root cause reason for why J schools are having such difficulty in trying to figure out what to teach. They have an idea of what will be applicable today, but not four years down the road. On the plus side, though, there will be more and more demand for weekend or short-term workshops to learn special skills such as Flash, database design, Final Cut Pro, and the basics of editing audio.
]]>The goal would be to rapidly prototype what a news organization of the future might look like by walking the hypothetical startup from concept to a year after launch and covering things such as:
This would be a very proactive activity for those in newsrooms currently, and might even bootstrap a few projects from people in the room.
In regards to journalism education, much of the discussion has been focused on whether or not J schools are adequately preparing their students for the reality of the newspaper industry and, from this, how they might change their curriculum incrementally to address the needs of today. This isn’t good enough. Instead of playing catchup, as the New York Time states the obvious, I think it would be far more powerful to apply the concept of scenario planning to the future of journalism education, and the university system as well. The education industry should be learning from the newspaper industry.
From my view, there are three roles of the university in the 21st century. One, provide the basic foundation in any subject matter for a person to be able to then grow from. In journalism, this might be ethics, media, etc. I wouldn’t teach any tools in these core classes, but the classes would be evening supplements to internships and work experience. Two, teach how to learn. In a world changing at an exponential pace, the ability to quickly understand and act upon information is paramount. The kicker to approaching this in the university setting? The subject material would be completely random and change from term to term. Three, be a sandbox. Be the place where people of any age can go to learn more about the world and their role within it. Let them experiment and play with reality, but let the university be the place where learners can experiment and fail gracefully. The university system almost does the first of these three at the moment. That’s not good enough.
Discussion in this session would lead to actionable takeaways. If I were the Dean of a J school right now, these are several of the things I would consider doing:
I’m also planning on bringing audio and video recording equipment. Hopefully not a moment of this weekend will go uncaptured. Also, if anyone is down for a run around Philly on Sunday morning, ping me up.
]]>America’s colleges and universities, says Wiley, have been acting as if what they offer — access to educational materials, a venue for socializing, the awarding of a credential — can’t be obtained anywhere else. By and large, campus-based universities haven’t been innovative, he says, because they’ve been a monopoly.
If you’d wanted to be really disruptive, you’d design the rapid accreditation system that offers more variable certification.
]]>In Mark’s scenario (borrowed from Stack Overflow), the reputation system would be used to identify the good comments from the cruft. If you post a good comment other people think adds to the conversation, then they might vote you up. You’d earn reputation points from that transaction. If you were trolling to derail the conversation or intentionally trying to provoke, then the community could vote you down and you’d lose reputation points. The author of the post, furthermore, could use his or her super reputation to bestow blessings upon really intelligent feedback. All of this information about the quality of content would be useful to the CMS and webmaster, and editor I suppose, in trying to determine what gets placement where.
The kicker is when you tie this reputation system into the database that’s tracking people in your community. This is where things could get really interesting. By adding semantic information to the reputation system (i.e. recording the topic that the commenter is writing on and saving structured data about the nature of their response), you could build a super useful for finding the diamonds in the rough. For instance, if Marcus Doe (a fake name to protect his identity) commented often on articles about climate change and water access issues, and his fellow commenters rated his insights highly, then Marcus’ profile in the database would indicate that the crowd seems to think he makes fair arguments. The news organization would then invite Marcus to contribute a guest article. If the readers then found that contribution valuable, it would increase Marcus’ profile as a source of knowledge about climate change and water access within the community. This would only work with real, verifiable commenters, of course.
This reputation system would be the engine to empower the community to evaluate information and sources for merit.
]]>To provide fodder for this discussion, listen to the most recent installment of Dave Winer and Jay Rosen’s Rebooting the News. One of the ideas that I think will “save journalism” is the digital assignment desk Jay starts talking about near the end. His part of the idea is this: a tool to map out all of the particulars that might need to be reported on in the coverage of any given issue. Once the editorial team has this laid out, they can then decide what resources they want to apply and where.
I’d like to take this two steps further.
Let’s both open this up, and allow the community to get involved. Opening this up would mean that all of the information in the database would be transparent, accessible, and machine-readable (by marking information up with meta data). There would be an API so that others could build applications on top of the digital news assignment database (or hack the information into a legacy CMS). A J student could build a visualization comparing the number hours spent covering sports versus ASUO as an independent study project. The list goes on.
The community should be involved with the journalism requirements of a city through two means: contributing to the database of things that need to be reported on, and taking on assignments as they fit their expertise. For instance, and I may have used this story before, my dad considers himself a photographer and enjoys capturing local high school sports games. He’s not the only parent in this geographic community or in the community of the high school that would fit this bill. Using this digital news assignment system, my dad could indicate that he’s wants to go to the game and make images. He’d submit 10 of what he thinks are the best at the end of the night, and the professional photographer on staff at the news organization would select the top two or three to run with the blog post or paper article, while at the same time giving feedback to my dad on what he liked about the images and what needed to be improved. Visitor participation and voting on the website would tell the CRM side of the database that they liked my dad’s work, thus making him more eligible to be the one covering the state playoffs.
If the community had access to what the news organization was planning to assign, they could give feedback and further suggestions. With Spot.us, the community has power to decide what is reported on with their dollars. This community news assignment open platform thing, beautiful name I know, would empower members to suggest assignments, vote on them, and then brainstorm all of the different variables that needed to be reported on.
This just needs to be built, and I’d much rather have the discussion at BarCamp Portland focused on how to experiment with ideas like these.
]]>Here’s the idea in a graf: the core classes students would take focus exclusively on how to learn. Ferriss’ video spoke to me on the importance of this, if nothing else. Whether it’s one class or series of three, the professor in this new university would educate on a completely random subject with the explicit understanding it wasn’t about the material you were learning, but rather how you were learning it. The meat of the curriculum would be tips, styles, and strategies for being a successful independent and networked learner. Once this foundation was in place, it would just be a matter of putting the student on material for whichever subject they wanted to tackle. There’s plenty of that on the web.
]]>Such a fund would offer a extraordinary advantage over printing day-old national news that people can get instantly online.
The innovation required for newspapers to reinvent themselves isn’t generally coming from within. There are institutional and cultural reasons for this. For instance, a friend who took an early retirement from The Oregonian said that his group of friends who wanted to discuss how to change the newspaper had to do so off company time. They brainstormed ideas over pizza and beer that were rarely implemented once they got back into the office. Google has the 20% rule. This is a significant difference in workplace, but a seed fund for news startups would promote the type of creativity and tenacity needed to survive in this new environment that corporate culture typically squashes.
Newspapers could benefit in a couple of ways. One, the contract with the startup might structured in such a way as to guarantee content to the newspaper’s print product at mutually agreeable rates. Two, if the startup pulled something particularly innovative, the newspaper could just buy the company. This is what Google does because it knows that disruptive thinking has a lower barrier to implementation on the ’net.
]]>Isaac Holeman chats with Deo, the Executive Director of Village Health Works in Burundi, about his clinic in Kigutu supported by Partners In Health, what the need is (Burundi is the poorest country in the world according to a 2006 World Bank report), and where he hopes to take the project in the future. If it isn’t conveyed in the interview, Deo has had a tremendously lucky life that he’s taken full advantage of. At the conference Isaac and I attended last week, we were fortunate to hear Deo speak on two occasions, a panel on “How Poverty Enters the Body” and a Saturday keynote. The PIH bio on Deo is another good source of information on his experiences and current work.
A couple of notes on from my end. First, apologies for the shakiness. I’ve learned that, for Flip interviews over 5 minutes, tripods are a must. Second, I didn’t realise at the time how distracting the background noise would be. We’ll make sure to find a quiet place next time.
]]>View more presentations from danielbachhuber.
I’m giving this presentation today as a part of a panel at a global health weekend my friend Alex Goodell spent a significant amount of time putting together. The conference is “You Can’t Crush a Louse with Only One Thumb: Integrating Biomedical & Sociocultural Approaches to HIV/AIDS in Africa” and my panel focuses on student experiences in these issues.
To make this interesting, I’ll be arguing that both the university system and standard practices in international development are broken, and that, more importantly, there are ways to fix each which will create more desirable future. It’s not about who should be to blame, but rather how the methods for each can be improved. One of these days, I’ll start producing second version of my presentations that include more narrative text too (I’m too much of a minimalist to include extensive text on my slides). Because the Oregon Direct Action project ended before implementation, I also hope to do a retrospect post on what worked and what didn’t work in the effort.
Whitman Direct Action has been active recently, first posting an update about their most recent project, The Transnational Community Development, and then reporting on meetings with a couple of the NGOs they’re supporting.
I’ve also uploaded a PDF of the report we produced last spring, titled “Developing Water.” Through a series of surveys, focus groups, and interviews, we took a look at the socio-cultural constraints to clean water access in the Kolwan Valley. It isn’t necessarily anything groundbreaking if you’ve been working in the sector, but it does serve as a pretty legit primer to water access issues in India.
]]>One of the arguments he had as a lament for the death of newspaper journalism was reference to reporting done by the Miami Herald after the 2000 elections. According to Baron, The Herald did its own count of the Florida results and that, in reference to restructuring in Chicago, there’s no way a newsroom of 26 could do similar work.
If you get creative, I think there is. It’s called BOINC and we could apply it to journalism. The Berkley project is a distributed computing platform where ordinary people volunteer computer time to process data from a number of scientific projects. The results are verified because some “projects,” as the data sets are called, are repeated across multiple machines. Journalism related to data verification can be massively distributed in this method; it’s just a matter of experimenting with the correct means and tools of doing so. For more information on BOINC, Leo Laporte did a thorough interview for FLOSS Weekly recently.
At the end of the lecture, Bryan Murley prompted me to ask Baron what he’s doing to restore credibility, citing the 2009 State of the News Media report. I interpreted this as: “What steps is The Boston Globe taking to restore credibility in itself as a news organization? What have been the successes and challenges of these steps?”
Marty Baron, however, argued that The Globe hasn’t suffered a loss of credibility, and that he doesn’t like to use the term “restored.” Instead, Baron says that they have a “long, very detailed” ethics policy, and that they make sure their reporting is “fair, honest, and accurate.”
He’s missing the point, in my opinion. Credibility isn’t what you think of yourself, but rather how your community thinks of its information relationship with you. His response dealt too much with “I, I, and We, We,” instead of exploring ways to increase the ownership Boston has in The Globe.
After the Q&A session was over, I decided to follow up with him to see if he could clarify from the community perspective (there are also a couple of questions about The Globe’s web presence):
Again, though, he didn’t answer the question I was asking. If I had thought of it, I would’ve asked these questions as well:
Last, but not least, kudos to Suzi Steffen’s Reporting 1 class for live-tweeting the entire thing. They did a thorough and excellent job (and their tweets were certainly useful to me for compiling my thoughts).
Later: The full text and audio of the lecture are available online on the J school website.
]]>
In Savurgaon, a small village in the Kolwan Valley, Maharashtra, India, a broken pipeline in March 2009 means no water for at least five days. The community shares its local government, the Gram Panchayat, with two other villages, a unique situation to the area which ultimately means that issues aren’t often addressed as quickly as they should be. In the interim, many of the families are dependent on the generosity of a wealthier farmer with his own private bore well. When water does come again, though, the way the pots are ordered will signify who gets their fill first.
]]>
at the bottom of an article about bottled water and greenwash advertising. In my opinion, Lighter Footstep is now sending two contradictory messages: bottled water is killing our environment, and that I should pay a premium to have bottled water shipped from the South Pacific. This juxtaposition is broken because the misleading advertising has the opportunity to negate the value of the journalism.
Later: Dave Winer speculates on a “Digg for ads” which falls under this same idea of vetting advertisements (although crowdsourcing this time).
]]>I sat down with Steve Woodward this evening (@oregoniansteve on Twitter) at Bailey’s Taproom in Portland to discuss a whole myriad of topics, including the supposed “death of journalism,” how and why the internet is disrupting other industries, and why now is a great time to be alive. In the interview I did at the end of our conversation, I ask him what he thinks journalism is and about the project he’s currently working on, a mashup between InfoLiberator and OpenMicroBlogging. Their goal is to build a “Costco for data,” aggregating local information from a number of sources and then feeding it to you based on keywords, location, and other meta criteria. Watch all of the way though for a coincidental appearance by a drunk, and how he too applies to the project Steve is working on. I’ll work for better audio next time.
Of the many significant takeaways from the conversation, I’d like to record one: we are so done with the “newspapers are dying” conversation.
This video is the first in what I hope to be a series of interviews, discussions, and arguments with various people I find interesting. I’m posting them to Vimeo right now, but might be switching/cross-posting to Blip.tv if I can convince it to upload my content. Blip is pretty cool, in my opinion, because it offers an instant video podcast but Vimeo has better HD. It’s definitely a first-world dilemma.
]]>
A woman from Nanegaon in the Kolwan Valley west of Pune carries water home past the heavily-fertilized sugarcane fields near her community’s open well. Sugarcane requires copious amounts of water and heavy fertilization, most commonly with a nitrate-based urea. Although not fully understood, excess amounts of nitrates have been associated with methaemoglobinaemia, a potentially life-threatening condition of depleted blood-oxygen levels, especially serious in bottle-fed infants.
According to Mr. Shyam Divan, a Senior Advocate for the Supreme Court of India, there are no legal frameworks in India with which to prosecute those releasing industrial contaminants (agro or otherwise) to a public water supply.
]]>Twitter wasn’t effective at all, as it only sent less than 1% of their overall numbers. In the comments, I mention that his assessment is almost there. Twitter is a really valuable tool, but that value only applies if you can reach your community on it. The Whitman campus isn’t there yet in terms of adoption, and might never be, but there is the possibility that it will become more effective for discussion in the near future. The Pioneer leading the charge, pardon the pun, by actively advertising discussion like this might be one way to increase the number of users, or that number might grow once the campus learns the value of Twitter via SMS for finding the best parties on Friday night. I wouldn’t discount entirely, it’s just a matter of engaging in conversation where your community is.
At Whitman, the email list servs and Facebook are the best method of reaching the rest of the student body. Andrew’s emails drove 10% of the traffic, and Facebook organically drove 2%. Considering the amount of time most college students spend on Facebook, there is a lot of room for growth in this medium. Facebook recently released an update to their Pages application, giving brands and organizations a presence that looks and works more like a normal Facebook profile. One critical component to this announcement is the fact that updates you post to your Page will now show up in the News Feed of your Fans. This wasn’t possible before, and it now lends an excellent opportunity for your content to spread “virally.” I, for instance, watched a video from the NY Times about the recession the other day simply because the News Feed is how it came to my attention.
When they land on the site, I also think there is room for improvement on how the discussion is fostered by using a forum and a wiki. As I mentioned in my comment, blog posts are a great way to synthesize and distribute content. I wouldn’t necessarily try to have all of the conversation in the comments, however. For a controversial topic like this, II might post several of the broad questions raised in the administration’s decision to cut funding to the team with the intent of having them either write or video record a response. This would offer a venue for people to weigh in with that they think the answer should be. The daily blog posts would then be useful for synthesizing the discussion had in the forum, as well as bringing in the additional facts and context your reporters are finding. A wiki dedicated specifically to this topic, much like the topical wiki I’ve described before, could provide the background information necessary to bring people up to speed, including how many people are on the ski team, what percentage of the overall athletic budget the administration is talking about, and how this decision fits into the greater scheme of things.
With these critiques being said, I think the Pioneer team did a stellar job breaking out of a weekly print mindset and adopting web tools to enhance conversation.
]]>
Just below the Dapka Ghat in Kanpur, a “nhala” or drainage ditch, pours raw sewage into the Ganges River. The pollution is 80% domestic and 20% industrial. Waste treatment should have been addressed by the Ganga Action Plan of 1985 but, like many of India’s environmental programs, it didn’t bear fruit because of the size of the issue and complexity of the political action required to solve it. In the meantime, the number of leather factories has jumped from 175 to over 400, substantially increasing the amount of waste disposed in the river.
]]>That is what real revolutions are like. The old stuff gets broken faster than the new stuff is put in its place. The importance of any given experiment isn’t apparent at the moment it appears; big changes stall, small changes spread. Even the revolutionaries can’t predict what will happen. Agreements on all sides that core institutions must be protected are rendered meaningless by the very people doing the agreeing. (Luther and the Church both insisted, for years, that whatever else happened, no one was talking about a schism.) Ancient social bargains, once disrupted, can neither be mended nor quickly replaced, since any such bargain takes decades to solidify.
And so it is today. When someone demands to know how we are going to replace newspapers, they are really demanding to be told that we are not living through a revolution. They are demanding to be told that old systems won’t break before new systems are in place. They are demanding to be told that ancient social bargains aren’t in peril, that core institutions will be spared, that new methods of spreading information will improve previous practice rather than upending it. They are demanding to be lied to.
There are fewer and fewer people who can convincingly tell such a lie.
He describes the situation well, and I’m ready to move on from the discussion of whether the newspaper is obsolete or not. In most markets it is, in some it isn’t, and a large majority of the conversation on the web (news organizations included) is based more on opinion than actual data.
The trend in news production and distribution, handily covered in Steven B. Johnson’s “Old Growth Media and The Future of News,” is towards the web:
I think it’s much more instructive to anticipate the future of investigative journalism by looking at the past of technology journalism. When ecologists go into the field to research natural ecosystems, they seek out the old-growth forests, the places where nature has had the longest amount of time to evolve and diversify and interconnect. They don’t study the Brazilian rain forest by looking at a field that was clear cut two years ago.
That’s why the ecosystem of technology news is so crucial. It is the old-growth forest of the web. It is the sub-genre of news that has had the longest time to evolve. The Web doesn’t have some kind intrinsic aptitude for covering technology better than other fields. It just has an intrinsic tendency to cover technology first, because the first people that used the web were far more interested in technology than they were in, say, school board meetings or the NFL. But that has changed, and is continuing to change. The transformation from the desert of Macworld to the rich diversity of today’s tech coverage is happening in all areas of news.
One characteristic of the traction both of these posts have gathered is that they put poignant context to the entire “newspapers are dying” conversation. They take a long now view that is refreshing, to say the least.
For adaptation and survival, it is also critical newspapers reframe the conversation about their futures. This comes from the language one uses in discussion. For instance, if you talk about the “newspaper industry,” then of course newspapers are dying. They are a terribly outdated form of information distribution. If we’re talking about “news organizations,” however, it’s an entirely different conversation.
The same thing applies to journalism. News organizations need to start by asking “what is journalism?” and then identify ways in which the technology can make their work relevant again. The terminology you use can define your perspective on an issue and influence how your approach its solution. Choose them wisely.
]]>The Ganges, according to Rakesh Jaiswal of Eco Friends, is forecast to “die” in 30 to 50 years, meaning all available water flow will be allocated to different agricultural and industrial uses. This analysis doesn’t factor in the potentially negative effects of climate change on water sources in the Himalaya.
This is the first in a series of images titled “India, Water, and Sustainable Development” that was first published in Consilience: The Journal of Sustainable Development in Spring 2008. Over the next few weeks, I’ll be highlighting the best of these photos.
]]>Then I read the editorial.
The argument is that people in the newsroom are concerned about the manner in which a new Publisher, Steve Smith, has been chosen for the paper. According to the article, the “editors felt that the Emerald cannot afford the salary Smith proposed, […] were extremely concerned that allowing Smith to work as an adjunct instructor at the journalism school while serving as publisher was an obvious conflict of interest, for multiple reasons, [and] were also concerned that Smith would be at the Emerald for only one year and if things didn’t go how he planned, if the Emerald actually ended up losing money, he would not be held accountable.”
Ryan Knutson’s comment on Steve’s initial post, though, really says it the best (emphasis mine):
And while I disagree with some of the fumbling steps taken by the board, I would only expect a strike of the staff to occur if the board tried to appoint J-School dean Tim Gleason, Dave Frohnmayer or any other administrator or permanent faculty member, but not a champion of integrity in journalism and ODE alumnus like Steve Smith. To assume Steve, who has worked in the newspaper business for decades, would suddenly drop all respect for the ethics of watchdog journalism and prevent the Emerald from criticizing the UO just because he might also teach journalism students in the classroom is naive.
[…]
When I was on the board during fall term of this year, I pushed strongly to try and involve Steve into our operations, knowing that his experience and his integrity would be a tremendous asset to the Emerald as it tries to find itself in these changing times.
In short, the Daily Emerald reached out to Steve because they thought he would be the right person to turn the news organization around. The discussion shouldn’t be about the editorial integrity of the student newsroom, but rather how the Emerald is going to completely reinvent itself. I had the opportunity to sit in on a Society of Professional Journalists session with Steve this past fall, and also had several conversations with Ryan about the paper and the future of news. I believe Steve’s own explanation of the situation, instead of the sensationalism that this has grown to be (it has now been covered in the Eugene Weekly, the Oregonian, the Chronicle of Higher Education, College Media Matters, and other publications).
Granted, I fully sympathize with the newsroom staff and their concerns that their voices weren’t being heard. I had to try and fight through the same institutional inertia this fall.
This is a critical juncture for the Daily Emerald, however, both as a newspaper and a news organization. The real dilemma isn’t the potential conflict of interest between the Publisher and editorial content of the paper, but rather how to bring the organization from the red into the black. In fact, there was argument made that the Publisher could indirectly control the voice of the paper by dictating how many pages were to be printed. To my knowledge, you just don’t have this problem if you have a website (or Twitter, or a blog, or anything digital for that matter). With declining revenues from print, what they really need is strong leadership to right the ship and figure out how to effectively “innovate” and monetize online.
I’m not entirely sure that the organization has the capacity to pull an IBM. Only time will tell.
]]>Alexis Madrigal and Sarah Rich have started a wiki to design the next San Francisco Post-Chronicle, after hearing news that the Hearst Company could be shutting down the newspaper within weeks. With a potentially serious gap opening in Bay Area news production, they’ve begun brainstorming ways in which to bring the newspaper up to speed with the 21st century. The planning is broken into three arenas, two of which I have time to cover before my own flight to SF:
Let’s go digital. It’s all about the internet, especially in early adopter central (i.e. San Francisco). Reporting should be web first, and the print edition could be cut to once a week. Publish a news magazine-style edition on Fridays and make it a compilation of the best content from all around town. I’d bet there’s a number of blogs that would like to see print readers for a cut of the revenue.
The focus needs to be on innovating with digital distribution and engagement, however. Alexis has ideas for an iPhone application, and there’s even a discussion about what the application should do. The critical point is that is has to be more than what Google Reader Mobile already offers me. I’d like to be able to comment on stories, see what my friends are reading and think interesting, and be able to interact with real world extensions of journalism. If I’m reading the weekly print edition, then I’d enjoy being able to take my phone out and see how other people have reacted to the information. It should support pull journalism too, allowing me to look up the ecological impact of restaurant choices, etc.
Let the homepage mimic an aggregator site like iGoogle, Netvibes, or the Facebook Newsfeed. I’d like it to take peripheral observations of what I’ve read, commented on, or shared, so that it can tune distribution based on my interests. If the site could store what I’ve read so I don’t have to skip through parallel reporting on Venture Beat, ReadWriteWeb, and TechCrunch, then I would visit it every day. Innovate with the formats of journalism too; start a topical wiki that aggregates and synthesizes information on any given subject. If you create an account on the site, or sign in via OpenID, allows users to roll their own RSS feed (a la Yahoo Pipes but with a simpler interface) and customize it without resubscribing as time goes on.
Another elephant in the room, but there are plenty of areas to innovate because there are oh so many ideas. It’s just a matter of making sure revenues exceed costs.
The “freemium” model has many legs, in my opinion. With a strong enough feature set, the iPhone application could easily be sold in the App Store. On the web side, users might also be able to buy their way out of advertising on the site. Content would be freely accessible (don’t want to destroy your Google Juice) but there would be functionality that you would up sell.
One marketable skill of the journalist is the ability to synthesize information into varying degrees of presentable formats. News organizations should need to get into the business of selling this skill set as business consulting. If they’re covering their beats well, they should have the best market research into that community. Sell that service to local startup businesses, etc.
Last thought: Advertising, as much as I hate it, still has room for a lot more innovation. Build highly valuable information tools like the ideas above to empower communities to make decisions, and there will be opportunities to monetize against them.
]]>The future of news isn’t newspapers. The newspaper is an inefficient, uneconomic, and environmentally-troubling method of moving data. In my opinion, Steve Rhodes laid out an epic laundry list of everything that’s broken in the newspaper industry a few days ago. There isn’t any need to repeat that, thanks to the internet. The key takeaway is that, instead of trying to figure out how to financially support newspaper-style journalism on the web, we should be active in conversation about what journalism is, and how the internet will enable us to do it better.
To me, journalism is the act of providing impartial, accurate information to empower a community to make decisions. I had “independent” in the definition earlier, but I don’t believe that independence is entirely necessary if you partake in the art of full disclosure. The process of journalism need not be limited to newspapers, and the format need not be tied to an article measured in column inches. As Suzanne Yada rightfully noted just over a month ago, “Twitter isn’t journalism, just like television isn’t journalism, but you can find journalism ON Twitter and ON television.” Our information needs have changed from a hundred years ago, and the internet lends news organizations greater ability to fulfill this responsibility.
Two premises for the near future (that you’re welcome to dispute):
The “Future of News” is going to be a competition to see who can create the most innovative and engaging ways to deliver information which empowers communities to make decisions.
]]>What is journalism? Every conversation starts with a foundation, or core premises, and I don’t believe we’ve gotten to that point yet in this shindig about newspapers dying. Considering it’s a fundamental paradigm shift we’re going though, I think it’s going to be important to start at square one and build up.
The model for the ideal digital news organization. There’s a lot of ideas bouncing around as to how newsrooms should change, what the business models are, and what their websites should look like. It would be really sweet to come up with a master list of all of these ideas (and then have someone experiment with them…)
Transparency for building trust. The first group to take the concept of an “open source organization” and apply it to journalism wins five dollars. I’d enjoy covering strategies and techniques (a la the CoPress Team Blog) for completely opening a news organization.
If you can’t make it, we’ll be livestreaming and liveblogging the whole day long. It will be epic.
]]>First, the assumption is incorrect. There’s no way professors are going to be able to “catch up,” but this isn’t necessarily a bad thing. It’s just another characteristic of the indicative paradigm shift that’s happening right now. We’ve got to move from a “one-to-many” style of top-down education to a “many-to-many” style of networked education. What we’re doing right now, having a lateral conversation that is independent of geography, is just one example of this transition happening organically. If anything, it’s going to be us (i.e. the students) getting professors caught up. In doing so, however, the question will be raised of what exactly the role of journalism professors is. I don’t necessarily have an answer.
Journalism schools, furthermore, need to become catalysts for innovation. “Innovation” is becoming a buzzword these days, but there has been less discussion on what is needed to inspire it. I’m of the opinion, though, that schools are excellent ground for experimentation. Students should be afforded the opportunity and encouraged to test new things out because the school can be an environment where it doesn’t hurt to fail, pick up the pieces, and try again.
It’s critical to drop multiple choice testing. Standardized tests and rote memorization are one of the worst excuses for learning, and do even less in an era of rapid technological transformation. One of my classes this fall was J204 Visual Communications. In my opinion, 90% of the tests we took were based on how well you could memorize the book. I did quite well but honestly couldn’t tell you what I learned four months later. Grading is subjective, and should instead be based on an interpretation of merit.
Furthermore, there need to be multiple tracks of learning. Classes now are held for the lowest common denominator, but the gradient of skill aptitude is increasing. There needs to be better rapid certification for “self-learners,” and the class needs to be better structured such that those who learn at a quicker pace are incentivized to teach their fellow students.
What if class was an unconference? What if, at the beginning of every semester, the students came together and collaborated on their syllabus for the next semester? Instead of the professor teaching what he or she thinks the students should learn, the educational process needs to be driven by what students want to learn and, more importantly, by the questions they want to answer. Education through creation instead of education through systemization.
I challenge any school to be this radical. It might even motivate me to re-enroll.
]]>I’m not entirely sure how to collect my thoughts on this, but the presentation struck me as profound. Most importantly, it’s heartening to know that there are other crazies out there working their minds through the same observations of a fundamental change taking place. There’s tremendous room for intellectual growth, largely because it’s such uncharted territory. A couple memorable quotes from the presentation:
Talking about crises in the banking sector, Rushkoff says, “decentralizing technologies fundamentally undermine the corporate-capital structure.” The traditional corporate-capital structure, to my understanding, mandates that the wealth of a corporation is dependent on the scarcity of its product.
He goes on to explain that “‘digital economy’ is in itself an oxymoron […] Things digital are best understood as an ecology, not as an economy. Economies are based in […] rational actors, maximizing their value, through the acquisition and distribution of scarce resources, whereas on the internet what we have are irrational people having fun engaging in sharing what feels, at least to them, like limitless resources.” In short, the foundation of the economy is taking a 180, thanks to the internet.
The takeaway, as I realized in a conversation over lunch, is that it’s an amazing time to be alive because, depending on which side of the bed you work up on, there is so much potential for high impact creativity and innovation.
]]>

The kicker at the moment is that the lady who owns the land for one of the tanks (most immediately above) now doesn’t want water being taken off her land for the community’s use. Her husband signed an agreement 14 years ago supposedly, but the widow was reportedly never aware of the contract. A bit of the disagreement:
My reason for being in Cajamarca this month is to solidify Oregon Direct Action’s (ODA) project for the month of July. ODA is a student organization I started last May with Shane Lofgren and a few others. It’s based off of my experiences with Whitman Direct Action and concepts around an open source organization. Our goal is to bridge the gaps between education and international development, and use 12 months of effort from ambitious undergraduates to help solve some of the world’s most basic issues. In my opinion, though, it shouldn’t require a month of groundwork to figure out how we can contribute to efforts in San Pablo.
On Thursday, I had the chance to speak for an hour with Mark and Vinay of an innovative organization called Akvo. It’s goal is to open and simplify the reporting around water and sanitation projects and, in the process, improve the capacity of development organizations to achieve their goals. In my opinion, open source means transparency but it also means, and more importantly, open collaboration. By actively publishing what you’re working on, both the successes and challenges, you’re lending the opportunity for others to take part of the project too.
The first thing to address, however, is the paradigm shift from closed to open. In many sectors, it’s a scary thought to go from only publishing information through a communications manager (or some sort of filter) to making as much data available as possible. My opinion is, and I’ll get to this more in a later piece, that transparency is actually a competitive advantage, and that the first organizations to be as transparent as possible will gain an edge. Funders will become addicted to the wealth of information they have to make their decisions, and organizations that open up an order of magnitude more information for the funder to manipulate will be more desirable. Openness builds trust. The way that Akvo is going to be able to “sell” this, however, is by being able to attach some sort of economic benefit to their really simple, open reporting, both in the ability of the organization to generate more funding and also the value in open collaboration with peers, “pro-ams”, and other interested parties.
It’s also my opinion that Akvo needs to be able to sell their service in terms of being explicit about problem(s) they solve. This could be a 30 second video or two paragraphs, but I wasn’t able to find anything satisfactory on the website.
The second issue in opening up information, and making project data transparent, is determining the best format and means for doing so. I would start iterative reporting with the tool that comes most naturally: mobile (SMS, images, and video). Once you have a stream of information coming from a project, then you’ve got to figure out the context filters. When we started thinking about this at ODA, we broke down our data into four tiers: team, partners, community, and world. Of course, all of the information would be open and accessible, but there would be different delivery mechanisms (email, RSS, etc.) for ensuring you only received the information you needed.
It would be wonderful if Akvo could be the open database for synthesizing project information; and as a part of the workflow and processes, structure the project information such that it’s in a digestible, relevant format. It would be a project wiki that has: background information on the area (size of the community, primary livelihoods, average income, etc.), where the project currently stands (most recent updates via a blog and wiki), relevant budget and financial documents, podcast stream of reports from the field, and images and video which are geographically connected to the project. The important thing is that this database would be built on open standards. It should be the engine that connects you with the information you need, based on your context.
The advantages to open in reporting are many. Most significant to my situation is the ability for potential collaborators to contribute to development work. I still consider myself a student, I’m only 21, but I would like to break tradition and continue to learn in higher impact settings through experiential education. Just think of all of the essays that get printed and then go into the trash. Instead, that productive capacity should be put towards the really big problems we have in the world. If we could lower barriers for students to get involved with projects like Green Empowerment’s and others, the consequences could be tremendous. I think open sourcing development organizations one step in the right direction.
]]>On another note, I believe we interviewed Rich Gordon for tomorrow’s edition of This Week in CoPress. I was out in the field doing research, but am definitely looking forward to hearing about his future plans for the project.
]]>John asks, “Is there still room for a professor to teach wisdom?”, to which I reply (emphasis added):
I think professors can teach wisdom, but so can students. The current model, to take a journalism analogy, is broadcast, whereas the technology is quickly allowing many to many communication (or education). There’s still room for professional news organizations (or traditional universities), but they are now facing the crunch to evolve in order to maintain their relevance. The one thing that the universities still hold as a competitive, monopolistic advantage is certification, in my opinion. A substantial alternative, a system for rapidly certifying you in certain areas if you already hold the knowledge or can pick it up at a greater rate, will be a huge disruptor.
I don’t think the “current college system” will remain relevant. Instead of thinking about textbooks and lectures, which in some arenas are becoming obsolete faster than they can be printed (i.e. journalism, where the “Web” was discussed in only one part of one chapter of my J201 textbook), I think universities need to be thinking a lot further forward.
This [many to many communications technology] presents a huge flaw in the “top-down” model, too. For universities to function as it stands, the professors must “learn” the material before the students do, hold a monopoly on that information, and then present that information. The problem is that the information they need to teach will be changing at an increasingly greater rate. That’s why the evolutionary, “network-based” model is appropriate.
I’d like to continue that evolutionary learning, where knowledge grows from the ground up, is likely the only way that universities (or any other education system) can “keep up with the times” and not teach 5 year old material. The real issue is that we’re amidst a fundamental paradigm shift on top of accelerating change, and that most institutions that have dealt information in the past aren’t adequately forward-thinking to survive the transition.
]]>Step one: hold a transparent weekend (or weeklong) jam session to develop a strategic plan. Invite as many intelligent stakeholders as you can to a retreat, and put together a website for that retreat with the agenda, list of everyone involved, and goals. It might also be useful to have a open community forum in the week preceding to hear strengths and weaknesses from the perspective of the audience, or launch a website where the community and submit and vote on ideas for the news organization. When retreat happens, however, make it open and participatory. Make sure everyone at the retreat is documenting the discussion on Twitter, and livestream as much of the discussion as you can. Have a designated “community manager” for the retreat who looks for suggestions from watchers and brings those to the meeting. Tap the intelligence of the digital crowd, especially because you’ll be able to bring even more smart brains from afar.
Step two: campaign over summer 2009 amongst the Daily Emerald alums to raise the funds necessary to implement the strategic plan. Shop the plan out to them to get their feedback and insights, and use CRM (or customer relationship management) software to track these interactions. When I left, they were using a FileMaker database system and analog mail. I would ditch this system immediately, and my first investment would be software like Salesforce.com (which a news organization could also use to sell advertising more effectively). Using the new CRM, it would be wise to fundraise amongst the alums who want to see their old newspaper experiment with this platform called the internet. Including them in the process, by sending them the strategic plan and a link to the website with an archive of all the video, will make them more invested in the process (if they like what you’re doing at least).
Step three: implement the strategic plan starting in Fall 2009. If I were the publisher of the Daily Emerald, these three are of many things I would attempt to drastically right the direction of the news organization:
Right now at the Daily Emerald, though, they’re going about it the API emergency meeting way, and this is just one of the many reasons I think startups make more sense in this climate. I mean, look at all of the effort it’s going to take to turn this ship around, let alone reinvent it.
There’s also been discussion that student news will be largely unaffected by the tornado ripping through regional newspapers right now. Even if that is the case, I would like to propose an analogy: if you’re driving towards the cliff of irrelevance, your direction is what is most important. It doesn’t matter that your car’s engine hasn’t seized up yet.
]]>On the 21st of February, 2009, we’re bringing a regional edition to Portland. The Daily Vanguard has generously provided space at Portland State, but we’ve still got a lot of planning to do between now and then. If you’ll be in the area and are interested in helping out, please leave your name on the wiki and sign up for the Google Group. Personally, I’ll be satisfied if I get to spend a day jamming with like-minded entrepreneurs on these ideas:
Being back in the States on the 21st also means I’m ending my work in Peru prematurely, but CoPress has really taken off and I’m stoked to get back and be able to take it to the next level.
]]>Brain and note taking dump ahead.
The clinic has an EMR at the moment which is very limited. It was developed by a local programmer they still have good relations with and, every time they want expanded functionality, they just ask he (or she) to build it. Furthermore, the clinic staff has been talking over the last year about different ways to expand the tools. At the moment, it captures data about the patient, vital signs, and has a free text area for diagnoses. Continuing development on this software will require significant money, of course, which is why OpenMRS is probably a better long term option. Writing software for a pretty common use case doesn’t make much sense when there are customizable open source options available. Thanks to a relatively fast internet connection today, I was able to upload a HD walkthrough of their current EMR:
Tour of the clinic’s custom EMR from Daniel Bachhuber on Vimeo.
One fairly significant problem we faced Thursday morning, however, was trying to convince the clinic staff of the merits of OpenMRS without a full featured online demo or video tutorials. I personally haven’t experimented with the software very much, nor do I know all of the useful components of a medical records system, so I couldn’t necessarily sell the software with my salesmanship.
Wayne, being proactive, took the conversation from step zero so that Lilia and Maris would be able to help assess the merits and demerits of their current system:
Basic needs of a Medical Records System from Daniel Bachhuber on Vimeo.
According to the doctor, the basic needs of a medical records system are three-fold:
Once we had these criteria established, we started talking about the pros and cons of using their current system.
The pros of their system are:
The cons of their system are:
The unfortunate thing is that their current system doesn’t match up to the needs of an EMR very well. As it stands, it’s not much more than a data storage tool. They use it to house basic information about the patient, symptoms, and diagnosis, but it isn’t very useful as a tool to manipulate the information. On top of that, the networking support (connecting computers in the reception with those in the doctor’s rooms and farmacia), has yet to be built and decision support is cost ineffective.
The clinic is interested in OpenMRS, however. On Monday or Tuesday, Wayne will be showing Lilia and Maris a demonstration of the EMR he uses back in the States. This will ideally convince them of the practicality of having a robust EMR. We’d also like to get them to a clinic in Peru that has a working demo of OpenMRS soon. If this proves feasible, then we might be able to send the programmer they have to an implementer’s training with PIH.
A thought on bringing the programmer into the fold: this might actually be an economic enterprise for him or her. My thinking is that there are a number of clinics in Arequipa still using paper records, so if the clinic HBI works with becomes a local model for using OpenMRS, then that might get the other clinics interested in medical records and incentivize the developer to get to know OpenMRS better.
In the interim, though, the clinic will still put a bit more money into the system they already have.
On the note of SMS, we discussed the possibility of how mobile might be useful to increase clinic efficiency:
Day seven, Arequipa from Daniel Bachhuber on Vimeo.
The idea wasn’t very well received, though, because the assumption is that the demographic that the clinic serves most likely will not have cell phones, and the clinic staff couldn’t really understand how the technology could be useful. Anecdotally, however, a doctor said the penetration of mobiles in this market is near or over 90%, a statistic which doesn’t seem too unrealistic to me. Furthermore, I think that mobiles could play a significant role in improving the efficiency of the clinic.
We’ve got an experiment cooking too. Building upon the pediatric idea briefly outlined in my previous post, we’d like to have a control group, an experimental group which receives a reminder for their appointment, and another experiment where the group receives a unique code for a discount on their appointment. In preparation, the clinic will start collecting cellphone numbers at registration. Ideally, this experiment will be later this spring or early in the summer.
One last thought on efficiency: we’d also like to run a two week experiment (probably in February) where patients receive a time-stamp upon checking in to the clinic, and another one when the doctor takes them for their appointment. I think mobile could a tremendous impact on the clinic’s ability to efficiently deliver healthcare (the concept of being on-time for appointments is nearly zero), but baseline numbers will be really important to calculate impact.
]]>Ashoka’s Changemakers has a pretty cool competition called “The Power of Us: Re-imagine Media” that might help us out. The winner(s) will receive $50,000 towards their project. If you vote for us, which we very much hope you do, it might just be CoPress.
]]>
As the project has been a very, uh, organic process, I thought I might clarify on a few points Greg made.
First off, it is of my humble opinion that open source content management systems are philosophically better than proprietary. The key component to this argument is that you, as the developer or end user, are allowed to edit the source code with a platform such as Drupal, Wordpress, or Django, whereas with a proprietary system like College Publisher you are limited to their ideas and their development cycle. News organizations not only need to be online, but they need to be able to innovate online. On top of that, in choosing an open source CMS we’re actually hoping student news organizations will take the initiative and start experimenting with how “news” or “journalism” is delivered. We’re different at the core because of this.
This conversation is especially timely, too. I’m in the process of drafting documents to define what the specific vision of CoPress will be for the next couple of years. Really, we’re a lot more than hosting. CoPress Hosting is an attempt to get student news organizations to be on the same platform so that they can collaborate. The core of what CoPress stands for is the network of collaboration, and we’ll be experimenting with the best tools to make this possible. In the video, Greg mentions a conversation that arose organically in our Google Group. We want to create a platform, something I’m calling a social intelligence tool, that allows those types of conversations to happen more often and to create more value. The short goal is this: the tool will connect you with the person most likely to be able to answer your question (whether it’s troubleshooting a faulty plugin or install Apache). To my knowledge, this has never been done. We’re a pretty ambitious bunch, though, and I figure we’ll give it a shot.
Greg also discusses the long-haul for the team. Personally, I never expected the project to get this big (it was originally going to be a 20% project at the Daily Emerald), so we’ve largely been making this up as we go along. We’re currently in the process of establishing six month, more formal positions, and my hope is that, if we start generating some sort of revenue stream, the core team will all be part-time positions. This is a bit different than what Greg said, but my logic is that I don’t think any of us (no offense to the team) is really qualified to do what we want to do. Part of it will be a learning experience, which will be valuable on its own, and part of it will be work, which it would be nice to be reimbursed for.
On the plus side, we’ll be using the full genius of Joey Baker to put together a business plan and identify methods for long-term financial sustainability.
]]>A little background. The catchment area for the clinic in Alta Cayma includes 30,000 to 35,000 people. From this population, the clinic saw 22,000 visits in the past year, with between 15,000 and 17,000 unique patients. Recorded number of visits to the clinic is increasing at a rate of 4,000/year. The clinic is pretty well resourced, according to Wayne of HBI, with a team of physicians (rotating 5, not all full time), dentists (2), nurses (9, not all full time), pharmacy (4), management (2), and two specialists, a psychologist and opthamologist. Essential medications are provided through a Catholic charity program and they can get most others through donations. Where the clinic lacks is primarily in specialization, health education, and patient care advocates.
These needs tie into the intra-clinic collaboration. On Monday and Tuesday, Health Bridges International and Medical Ministry International will be holding a conference in downtown Arequipa to bring together as many players in private, public-sector health care as possible and hold a discussion on how to improve the efficacy of healthcare delivery by cooperation. According to Wayne, there is no central record keeping of healthcare in Arequipa. There are, however, four-ish different methods of delivery:
About 50 or so of these private clinics, along with government officials, have been invited to the conference at the beginning of the week. At the end of the first day, we’ll pass out a survey [Google Doc] asking questions to try and establish both the type of information to be shared and best medium to share the information through.
In any regard, this little project was the first reason I was destined to come to Arequipa. The second is a project Isaac Holeman and I are working on called MobilizeMRS. The concept is to bridge the gap between SMS (short message service, or text messages) and MRS (medical records system). The first step in the process, or in Peru at least, was going to be to introduce the clinic to FrontlineSMS and see if we could find an experiment to use it on. If they don’t already have one, getting the clinic on an electronic medical records system is a bit more difficult of a process.
Most immediate issue: this clinic implements primary care, unlike most of the use cases I’ve found for FrontlineSMS thus far.
This means that instead of focusing treatment on HIV/AIDS and Tuberculosis, they deal with “Western diseases,” or obesity, diabetes, etc. This also means that the only “community health worker” they have is Maria, who is more of a social worker than anything else. It’s not a huge hang-up, but has made the questions I came down here with (i.e. how many community health workers are there in the network, how far do they travel, etc.) mostly obsolete, and means we’ll have to experiment with how SMS might be useful.
We have an idea, however.
Peruvian patients are notoriously tardy. It’s just not really a cultural expectation to be “on time.” In a clinical setting, this means you have to run at less than optimal efficiency, because you really don’t know for sure who is going to show up when. You also don’t know when you’re using your resources to their fullest potential.
The idea is to change this by incentivizing “on time” behavior. We’re considering doing a trial run with pediatric patients because the clinic needs to do follow-up appointments with about 150 kids. To experiment with this, we could assign 50 kids to three different morning sessions. Session one is the control, meaning we would just tell the parents that they should bring in their children between hour X and hour Y on Tuesday morning. For session two on Wednesday morning, we would send a blast text message out to the parents on one of the days preceding that they could get 50% the consultation fee (which is 3 soles, or about a dollar), if they showed up within an hour of hour X. They would each have a unique confirmation code to reveal in order to get the discount. Session three might have the opportunity to receive priority treatment if they showed up promptly. In short, I think the plan is to create an experiment like this and see what the ROI of improved communication with patients might be.
An important note about establishing ROI: it’s really, really important to have baseline numbers. This is particularly hard to do in the Alta Cayma clinic, as I imagine in many clinics, because so much data is left untracked. On top of that, all of the records right now are paper, which makes tabulation a pain. There are a few simple data points I’d like to start tracking as soon as possible: average length of time spent in line to see the doctor, number of patients that leave before seeing a doctor, and number of patients per hour by the day. These should be as easy as marking the time the patient was checked in and was seen by a doctor on their chart.
A couple of final questions about using FrontlineSMS:
OpenMRS is going to be a whole other beast, I think. I’m heartened to learn that they’ve already been thinking about electronic medical records significantly, though, and plan on including me in a few hour meeting on Thursday to discuss potential options and ideas.
]]>
A view of the main street running down Alta Cayma. As the city grows, it expands outwards, and the distance from the center is a decent ruler for measuring socio-economic status. The houses, businesses, and infrastructure closer to the hub are significantly nicer than those in the periphery. Conversely, a view up the street running out of town (from a few blocks higher):
Rural poor come to the city looking for new livelihoods, and the easiest place to start is on the outskirts of town.
Also, a wee little video of the same area.
]]>The first destination is Arequipa, in southern Peru, to do research for Health Bridges International (HBI) on how the clinics serving the Alto Cayma catchment area can better coordinate efforts, share resources, and work together. The specialty I hope to bring is identifying ways in which communications technology (like a Google Group, Wordpress blog, or SMS) can enhance collaboration. Wayne and I worked on a questionnaire a while back that will be implemented at a healthcare providers conference on Monday and Tuesday. Here are some of the questions we’ll be asking:
We’ll be trying to keep it short, but I’d enjoy any and all feedback on the questions we’re asking, as well as ideas on how to connect clinics with limited resources.
Along with doing research for HBI, I’ll be doing interviews to gather information for MobilizeMRS, a project with Isaac Holeman and (hopefully) Lewis & Clark Direct Action. These interviews, which will probably be video too, will try to deduce:
Thanks to Josh Nesbit for feedback on the scope of this research.
At the end of January, I’ll be headed to Cajamarca to work on Oregon Direct Action’s water project in San Pablo, Peru.
More soon, I promise. Final boarding time now. If you’re going to down there at the same time, hit me up. I think I’d like to do a few weekend trips to get away from work. And an FYI for those of you that follow me on Twitter: I hope to tweet as I’m traveling around. Twitter no longer delivers international SMS, however, so the conversation might seem a bit one-sided at times. My apologies in advance.
Onward!
]]>20090114 Pcc Rock Creek Presentation
View SlideShare presentation or Upload your own.
It’s a longer, more in-depth version of the one I gave in November, which means I get to expand a bit on the times I slept on train station platforms and when I got ringworm. We’ve finally finished the report associated with the Appropriate Technology Study Group, too, and I’m excited to go over some of the findings.
Sidenote: SlideShare doesn’t seem to think Helvetica Neue Light is a legitimate font and instead replaces it with some medieval looking thing. This is especially fun to discover by trial and error at midnight when you have to wake up early the next morning. Yes, I know that the lettering is too big on the first slide.
]]>Dotters-Katz and Papailiou’s proposal would add two justices to the existing five-member court and require it to submit rules changes to the Senate for approval. It would also re-establish the Elections Board as an independent entity to avoid conflicts of interest that Papailiou said were endemic under previous administrations.
There’s something wrong with this picture. I’m not talking about the proposed changes, rather it’s in the way that the information is presented. Reporting in the “traditional” news brief format, the reader (me) is left more confused than informed. There is almost zero context associated with the article, and I haven’t the faintest idea what the information presented actually means.
Such is the old paradigm. Newspapers are dead; long live newspapers. I’m of the opinion however that the new paradigm, the one that everyone’s afraid of, is actually improving journalism. Go figure.
For instance, if the Daily Emerald had the innovation, talent, and tools, I would have been presented an array of options to expand my knowledge about Dotters-Katz, how the ASUO runs, and why he proposes a change to the Constitution. There would likely be a list of previous posts on this issue, a small topical wiki in the sidebar synthesizing the pulse of ASUO, and curation of student blogosphere reactions to the announcement (like this one and one from the Oregon Commentator), among other forms of information.
Instead, the readers get nothing better than a press release and I have to use Google, coincidentally, to educate myself further. Google is taking the place of the news organization largely because the newspapers are flailing. Get with the times, please, and use the infinitely useful and flexible platform the internet gives you to empower your community with information.
Oh wait, the Daily Emerald runs College Publisher. Make sure your CMS is open source, and then innovate.
]]>I’ve started an interesting conversation with Max Marmer about higher education, ways in which it is currently unsatisfactory, and what can be done to fix it. Here’s his idea:
Force For the Future is an action oriented youth network that uses the tools of foresight to augment its impact. One of our main goals is to accelerate the impact of young people by connecting them with like-minded peers, and seasoned professionals interested in mentoring the next generation. And aims to provide a tangible, action-oriented form of learning that most high schools, as of yet, do not.
Many young people are struck by an unbridled enthusiasm to “change the world”. The problem is this momentary enthusiasm is rarely converted into any kind of action. Very few actually to get to a stage where they are making a difference. Force For the Future aims to lower the barrier to entry by creating a support network comprised of mentors and organizations.
He argues that there are three primary reasons he’s forwarding the project: too many students love learning and hate school, there is very little correlation between success in school and success in life, and that students need to be more entrepreneurial with their knowledge.
I think he’s preaching to the choir.
The tenets are pretty well established: open, networked, and transparent. Now it’s time to start experimenting. Shane, DJ, and I have an idea for a social tool to enhance networked learning. The goal is to connect knowledge seekers to connect with knowledge holders, and build an economy which measures the capital of knowledge transferred. We should start doing this in small trial runs, and then scale up. Roughly, the tool would use profiles so that the seekers could search out the holders. For instance, if I wanted to learn how to install Wordpress, I could search and find a person who held that knowledge. It would allow me to find a time and location to meet with that person. To quantify the knowledge transfer, there would be a karma system to quantify the value of information transfer and allow both parties to exchange capital. Additionally, the tool would allow groups to coalesce for longer periods of project-based, experiential learning like the Sadhana Clean Water Project and ODA’s water project in San Pablo, Peru.
My favorite of all of this thus far? Max mentioned that he keeps his iPod regularly stocked with TEDTalks. Back when I was in high school, dialup at home forced me to download the two regular podcasts I could find, Adam Curry’s Daily Source Code and On The Media, at school. That was less than five years ago. Just think about what type of information transfer devices and bandwidth will allow five years from now. There’s huge potential, and others agree.
]]>Wow. So sweet. I’m not entirely sure what the next steps are, but this is a huge stride forward for bridging the gap between SMS and OpenMRS and empowering healthcare providers.
]]>My good friend Isaac Holeman and I entered an application on Friday to NetSquared/USAID’s Development 2.0 challenge. They’re looking to give $10,000 dollars to a project using mobile technology (like SMS or phone-based applications) that “[maximize] development impact in areas such as health, banking, education, agricultural trade, or other pressing development issues.” We think we’ve got just the idea.
We’d like to put together a bridge between mobile phones, potentially FrontlineSMS, and OpenMRS, a super neat medical records system that is beginning to gain a lot of traction in Africa because of Paul Farmer’s Partners In Health. Specifically, this would allow community health workers in the field to access and interact with the medical records database. This would, for instance, allow them to instantly query the last time a tuberculosis patient had reported taking their treatment medicine. Isaac and I are also very interested in sorting together an OpenMRS module that would “watch” the data going in and out of the database. If a bit of data passed through tagged with, say, “#emergency”, it would go to whomever the on-call doctor was. This type of functionality, as far as we can tell, doesn’t already exist. We think it would be sweet if it did.
Now, most of this project is in the very preliminary stages. With your help, though, and funding from NetSquared/USAID, we can take it to the next step. Here’s the details:
Our application is called “Mobilizing Medical Records In Resource Poor Settings”. We would be very much obliged if you took the time to vote for us and, if you do and leave a comment on this blog post, I’ll send you a personal thank you.
Also, if you don’t know who else to vote for, there were a few other projects which caught my eye:
Most importantly, I think these types of projects show that mobile connectivity has tremendous potential to empower positive change. We think our project can do the same for healthcare. Thanks for the support!
]]>The price of information has not only gone into free fall in the last few years, it is still in free fall now, it will continue to fall long before it hits bottom, and when it does whole categories of currently lucrative businesses will be either transfigured unrecognizably or completely wiped out, and there is nothing anyone can do about it.
What other industries “sell” information by supply and demand? Where else are there going to be opportunities for the innovators to step in?
]]>Dave Martinez, Photo Editor at the Daily Emerald, posted nice images on Up Close, and Isaac Viel uploaded a number to Flickr. Next time, we’re going to aggregate and visualize.
]]>Huge, huge thoughts here. It’s worth watching the entire 10 minute interview. First, he flips conventional wisdom on its head, arguing that large class sizes actually allow him to teach better. More nodes to the network means greater capacity of the network to achieve specific objectives. Michael also hints as using the classroom as a platform for the students to do what they’re best at, instead of a one-way broadcast medium.
I think he misses one critical point, however: the collaborative environment doesn’t need to happen in geographical proximity. Michael’s assumption rests on the competitive advantage traditionally held by universities; that you need all of the students in one place to learn from each other, and that’s where the university can make their profit. On the contrary, I would argue that, due to the increasing capabilities of the ’net to bridge physical distance, the community critical to collaborative education can exist digitally in the network.
]]>Actually, I have three reasons I outlined earlier today for Publish2’s December contest. They originally were born of an ad-hoc Qik livestream, but I felt I didn’t communicate myself as well as I had hoped. It drove me to explain myself further. I think there are three important components to the future of journalism:
First: innovation. Those who come before me were fortunate or unfortunate (depending on how you look at it) in that they were stuck with limited tools with which to be a journalist. Today, we’ve got a growing arsenal of technology to tell the important stories with, let it be livestreaming on Qik, microblogging with Twitter, or practicing link journalism with Facebook. Contrary to the popular paradigm that we’ll settle on one format, this is just the beginning of tool fragmentation. By playing and experimenting with the tools, I position myself to take advantage of what they offer.
Second: the untold stories. Using a combination of emerging tools and traditional formats, my goal is to cover the under reported, most troubling issues we face as a globally connected society. Examples include water access exploitation in India, deforestation and the climate in Haiti, and homelessness in the big cities of Latin America. Being a journalist of the future means using the tools to expand your capacity to tell the word’s most important stories.
Third: collaboration. I began this fall as the Online Editor for the Oregon Daily Emerald wanting to push the publication to innovate with technology. Given the limited resources at hand, I realised that the only way I could achieve anything significant would be to work collaboratively with my peers across the nation. From that vision, CoPress was formed. Contributing to the network is an increasingly successful method of innovation.
As much as I’m a futurist, I still think the core philosophies of journalism still play a significant role in how information is distributed across the net. The two continuing discussions will be what format news will take, let it be 140 characters, wiki article, or blog post, and how to monetize the abstract value it provides.
]]>It offers a service, information, just like electricity provides energy. We talk about the internet quite a bunch now because it is a new service, a novelty. As it becomes more pervasive in society, and thus deeper engrained in what we do, we will talk about it less so. It is fundamentally changing how we operate; because of this, I believe the electricity parallel is an apt one.
Those companies who understand how to put the internet at the core of what they do will prosper, while those who do not will likely not fair well. It is very rarely this days I come across a business that does not use electricity.
Just a thought.
]]>Let me begin with my first point: the traditional university system, just like newspapers and General Motors, is obsolete, ineffective, and outdated. It is a monopolistic institution designed for the 19th and 20th centuries, eras when information was a scarcity. In the networked world, access to information is ubiquitous. Of the five classes my friend DJ has at USC this fall term, he only goes to two lectures. One because he doesn’t have the textbook, and the other because it’s the only class he values. My other friend Shane feels most classes are just regurgitated from the textbooks, which I tend to agree with. Another friend, an honors student, is kept so busy that he doesn’t have enough time to do his homework. In the end, he copies it from cramster.com. Personally, I have to take school one term at a time because the things I’m learning in class are so far removed from the education I hold valuable outside of the university. Case in point: this term I am taking Physics 201 for my Environmental Sciences major. Unfortunately, most of the information covered in the course I already learned in my junior year of high school IB Physics. More than any other course I’ve taken, this one is just for the grade.
To work with the key issues, one needs to understand what the core strengths of universities are and how these traditional strengths are eroding. The why is ubiquitous access to the network. According to Jarvis, universities serve four functions: teaching, testing, research, and socializing. Teaching is imparting knowledge upon students, generally a one-way flow. Testing is ensuring the students memorize the information well enough to pass the final exam. Academic research is still a monopoly universities can hold, but does little to add to their business model. A parallel could be journalism to newspapers. Journalism is crucial service newspapers have provided in the past, but hasn’t been what pays the salaries of the reporters. Socializing is synonymous to both networking and group learning. Three of these four roles, in my opinion, are almost lost to the network already. Testing, the fourth, will be lost to the network as soon as a suitable ISO-esque certification for education is established.
It is not as though education is becoming any less important, however. Part two of my argument is that one type of learning, what I call “peripheral education”, is becoming increasingly valuable. There are three types of education relevant now: technical, experiential, and peripheral.
Technical education is the knowledge you learn to fulfill a specific role or position. Let’s talk metaphors. If I wanted to be a mechanic, learning the different car parts, how they work together, and what to fix when they didn’t work together would be my technical education. If I were a developer, this education is technical knowledge to prove my skill in Python, databases, etc. For journalists, technical education is learning the tools of the trade. When Pat Thornton went through J school, the tool was Quark. In my case, the tool is InDesign. These tools don’t need to be imparted in class, however. Greg Linch taught himself InDesign in high school, and I’d like to say I’ve taught myself 99% of what I need to know based on previous experience with Photoshop (which I learned on my own in high school). With exponential change in the tools, it is more efficient to teach technical education via tools like Lynda than in the classroom environment. It is simple economics of scale.
Experiential education is learning through the hands-on application of knowledge. Whitman Direct Action, and our Sadhana Clean Water Project of last spring, is one approach. Students give themselves specific goals, and learn on their feet how to achieve those objectives. In our case, it was compiling a book on water development issues in India, hosting a conference in Mumbai, and researching the socio-political constraints to clean water access. This type of education serves two purposes: the students learn leadership, planning, and implementation skills through the process, and the project results in valuable contributions towards whatever issues it is trying to address. Institutions need to make the transition from squandering student creativity and brainpower, to applying those characteristics to solving some of the world’s most pressing issues. Taking this to journalism, many newspapers and news organizations are shutting down their bureaus as cost-cutting measures. If universities were innovative, they would launch foreign bureaus staffed by J school students to steal that market back. To date, I haven’t ever heard this happening.
Peripheral education is learning through continuous exposure to the increasing quantity of quality information. It is the hidden pearl of networked education, the process culling information you push yourself to absorb, letting it change the way you think, and then understanding the connections between the information. In an increasingly digital world, understanding how information works together is critical. One key part of this philosophy is that the information you absorb at any given point isn’t necessarily related to what you are working on at that given moment. Instead, peripheral education is about exposure to a wide variety of information types. Podcasts are one enabling tool of peripheral education. In Our Time, TED Talks, and Social Innovation Conversations are all information sources I consider as valuable, if not more, than classes in the traditional university system.
In addition to the types, the tools for education changing too. Blog posts are the new social essays. The traditional format, obviously, is to write an essay, submit it to the professor, have the teacher’s aide grade the work, and then recycle the paper. The essay served a single, cradle-to-grave purpose. Blogging, however, is the art of cultivating conversation. When I write a post, I can be quite certain to get organic feedback on both the content of what I write, and the format it takes, by more than one person. Twitter is the new class discussion. Saturday night’s conversation about the future of J schools was far more enriching than most any other class I’ve had this term. Twitter offers somewhat organized, niche conversation about a wide range of topics. In the “traditional” classroom setting this is almost unmanageable, but on Twitter it can happen organically. I think having this type of valuable, enriching, and constructive conversation via Twitter, and not in the classroom, only strengthens the argument that real education can easily happen outside of the university system. Furthermore, I completely disagree with Kevin on podcasts. Podcasts, audio and otherwise, are the new lectures. It’s about sourcing your information correctly, just like picking the right university or the right professor.
Schooling has traditionally been a top-down approach. We are quickly moving to a networked paradigm. For universities to survive the changes, they need to transition to an approach which fosters creative action. To take a newspaper parallel, this is early 2001. The internet has been around for several years, but doesn’t pose a serious threat to their core business. Yet. What happens to the paid teaching positions, though, when the students can educate one another?
Correction: I inappropriately attributed the Twitter conversation transcription to @gmarkham when it was really @greglinch. My sincere apologies for the error.
]]>Howard Bloom on “The Global Brain” - IT Conversations
Howard talks with Jon Udell about collective consciousness and self-organizing species, and why the mass collaboration we think is emerging right now isn’t really all that unique. Shane, DJ, and I did discuss the episode on a Fertile Ambition call a month or so ago, but we ran into a headlock about the multi-tasking theory Howard presents.
“Is Aid to Africa Doing More Harm Than Good?” - Intelligence Squared U.S.
Brilliant arguments both for and against, and listening to the entire debate lends a better understanding of what the difficulties are in helping to bring basic needs to Africa.
Daniel Suarez on bot-mediated reality - Long Now Foundation/ FORA.tv
So thought-provoking I’ve listened to it twice. The first time put me in a trance for part of a train ride back down from Seattle. In short, the premise is this: we’re creating untold numbers of automated bots, or narrow artificial intelligence, on the web for specific purposes. When left unchecked, as many are, these bots have the potential to cause very messy situations which could have negative real world implications. One of the author’s proposals is to build a second, secure network of only verifiably human entities.
]]>Slides, as always, are far more rich with the stories and explanation. In any regard, it’s been fun to flip back through the memories. On top of that, I figured out this morning how to go through my tweets from the trip and find my favorite.

My quick analysis is two words: too big. While I commend the transparency, I think most observers are interested in getting involved with the project beyond simply donating. Those running the project, or at least the component of the project involved with getting information online, should view themselves as community managers, and not just information providers. The transparency underlying the project creates amazing potential for the project website to be a platform for collaboration. There’s still a lot of work that can be done.
]]>They were, as it turns out. In the most recent issue, E/The Environmental Magazine uses the image above in an article titled, “Activism: Environmental Education.” Quite sweet to have at least one be used, and I now have another clip for my portfolio.
]]>Which beats would you cover right off the bat? Would you cover club sports and campus sustainability, or the common news the student newspaper already covers?
What form would your content take? Would you focus on text, images, audio, or video? For video, would you put together technically high quality multimedia pieces, or stream via Qik? How can you balance quality and quantity?
How quickly would you try to scale? What benchmarks do you have for your organization at one month, three months, and six months? What would you do to advertise and get the community involved?
What would the business side look like? Where would your funding come from? Would you sell advertising and/or have premium features? How much would you pay your staff?
How would your platform compliment the stories you’re trying to tell? Would you start off simple with Wordpress, or launch with something Django-based? What type of features would you want in your site to increase engagement with your product? Would you offer RSS, email newsletters, or content through social media?
Most importantly, what type of people do you look for to help you build your vision?
]]>
Fun evening shooting with Kathrine instead of the studying I should be doing.
]]>My decision comes after two months of frustration trying to get the Daily Emerald off of College Publisher. College Publisher, for those who are unaware, is a proprietary, locked, and nearly obsolete content management system (CMS). In my opinion, the first step student newspapers must take to survive in this “digital era” is to invest significantly in adopting an open source platform for their web presence. Open source allows a student newspaper to truly evolve into a student news organization. It offers the ability for you to have the final say in how, where, and why you publish your content. In proprietary systems, you leave this technological innovation up to the company to whom you’ve contracted out the work.
A metaphor for the people who have grown up with print: open source means your newspaper design and layout can be just whatever the heck you want them to be. Proprietary code means that you only have a certain number of colors, fonts, and article lengths to work with. Your sections always stay in the same location, and you can only adjust the placement of the stories to the smallest degree. All of those innovative front page newspaper designs from last Wednesday? Those wouldn’t be possible with proprietary code.
At the Daily Emerald, however, I was told we must first hire a publisher before we can consider any changes to our CMS. On top of that, we have a contract with College Publisher for at least the next six months (although we receive very little money from the deal so I’m not exactly sure what the Daily Emerald would lose by breaking the contract). Furthermore, the board meetings are closed. This means that I, the guy with Google Doc upon Google Doc of ideas, have to be invited to participate in the decision making process. To me, this sounds completely illogical. Instead, I have to pester the already overworked EIC with the things I’d like to do, and then have those suggestions go up the “chain of command.” It’s not a functional system for the real change which needs to happen.
Although I completely understand how busy the Daily Emerald newsroom is in producing a daily paper, it is busy work distracting the organization from what really needs to be built: a strategic vision for what student news is in the coming years. If I were in charge, I’d call an emergency board weekend retreat that anyone with expertise would be invited to. Student newspapers, just like the traditional media giants, need to completely rethink themselves because, by not innovating on the web, they’re is making themselves completely vulnerable to one potentially huge problem:
Competition from the people who get it.
]]>Threat one: Monetary. Advertising revenue dries up on the print side, print costs go up, and your online product isn’t compelling enough to generate the same type of revenue. That, or your online product is College Publisher and you can’t even boost the advertising revenue if you wanted to. One counter argument is that student newspapers could just go to student government to up their funding, a “bailout” of sorts, but I don’t think that could ever be a long term solution.
Threat two: Staff disappearance. Students no longer want to work at their student newspaper because their industry of choice has a bleak future. Jessica DaSilva is already facing this challenge at the Independent Florida Alligator and, as I commented, this could be the greatest short term threat, especially if your paper isn’t perceived as all that digitally progressive.
Threat three: Dearth of talent. Publishing and monetizing news online is quite different than print, and requires a skill set that potentially isn’t represented by current staff. The further a newspaper gets behind, the more it will have to invest when it does decide to make the gigantic leap in the future. This financing to buy talent might have to come out of its investments or from a significant fundraising drive.
At the moment, this is threat identification and analysis. I don’t have exact solutions to any of these issues right now. My hope, though, is that by studying and mapping out the specifics of each threat we can develop strategic plans to make the transition and keep campus journalism alive.
]]>Why, adopt the technologies that are changing the media organization, of course.
Disclaimer: I’m no formal contributor to this October’s Carnival of Journalism but, y’arr matey, I be boarding the ship anyway.
Online publishing mediums are in flux and will continue to be as time progresses. This is a truth. At the moment, you’ve got RSS, a website, Twitter, blogs, etc. to deal with, all of which have distinct cultural assumptions as to content form. Were all of these distribution mechanisms around five years ago? For the most part, no. What mediums will be added in the next five? It’ll be interesting to see.
There won’t be a stable “e-newspaper” product which parallels its predecessor, the print product. To my understanding, this is largely due to inherent qualities of the internet as a technology. It’s more of a paradigm shift than anything else. Journalism now has to contend with ever evolving distribution mediums. Websites, the mobile web, SMS, and the Kindle are all, ironically, examples of nearly the same thing, but not the same thing. There are different cultural expectations for content delivery depending on the type of device.
In any regard, while going through Jeff Jarvis’s “New business models for news” slides, a few small to medium-size content/distribution projects relevant to the student media arena came to me. First, student news organizations should be compiling community blog round-ups. Synthesize the local discussions. There are surely at least a few students blogging on campus about various popular topics of the day. The recent political debates come to mind at the moment. News stories without links are static, but think of what would happen if you started quoting student blogs and encouraging participation. Bam, community. Furthermore, this organizing power increases if you do two things: have an email address where your audience can send in leads or links, and read regularly as many campus blogs as you can.
Second, Twitter-source coverage of hot topics, especially politics. Obviously it shouldn’t be all of your converge, especially because Twitter only covers a certain demographic, but Twitter is certainly an interesting source of content. In Eugene, the Weekly Enema has almost scooped the Daily Emerald on this one.
Lastly, build up your email newsletter product. Include a big image or two at the top, summaries of the leading stories, and a list of the most popular blog posts. Craft the newsletter just like you craft the paper, and get people to sign up for it. For some odd reason, I’ve heard more about this recently than our website (might it be that people haven’t discovered the wonders of RSS?). Tying your email edition to a CRM product and use the wealth of click data to create tailored, personalized emails.
The business model, of course, is the elephant in the room. There are plenty of innovative minds working on this issue, however, and, with money to be made, I’m not too worried. Monetize as you evolve in tune with the changing formats.
]]>Men and boys from the non-institutionalized slums of Mumbai (the ones on the periphery of the city without public taps) wake at 4 AM every morning to buy water from those who do have formal connections.
The cost of water is two rupees per 35 L jerry can when the lines start at 5 AM, but jumps up to around six rupees per can when the water from the city stops flowing. Most families need between eight and ten cans per day.
In short, those who have to buy their water each morning can spend up to 900 rupees per month. The deed holders (i.e. those who own land and have a house) have pipes from the Bombay Municipal Corporation (BMC) at a cost of only 125 rupees per month.
Unfortunately, this appalling situation is in equilibrium, as house owners can make upwards of 3,000 rupees per day selling water to those who have to spend a significant amount of their income to get the bare minimum.
To make matters worse, the BMC would like to privatize water in the future, arguing they “lose too much money in the business.”
Here, in the slums next to Govandi and Mankhuted, “Do you get the water?” is asked each morning in place of “Hello” or “How are you?”
Images and text released under Creative Commons for Blog Action Day 08: Poverty
The Daily Emerald is working hard on moving its web presence forward. Largely, it’s me setting up the technology and implementing design, but the rest of the newsroom understands imperative to innovate quickly and start transitioning to a better digital product. The result of about five hours hacking a WordPress template yesterday is ODE Blogs, an aggregator for the current four Daily Emerald blogs launched at the moment: Press Pass from the sports desk, Pizazz from Pulse, Our Words from Opinion, and Up Close from the photo team.
As always, open source technology is at the heart of these cool updates. We’re using separate instances of WordPress for each blog, which makes user administration a lot easier and the ability to sandbox the layouts. The aggregator serving as the blog landing page is a semi-custom WordPress theme with a slightly hacked SimplePie plugin that allows us to merge the RSS feeds and order them by publish date (hat tip to Jenn Vargas for that lead).
This design isn’t stay static, though. What you see now will change in the coming weeks as we work to unify the user experience of the paper, the WordPress blogs, and (keep your fingers crossed) the main College Publisher 4 site. Our hope is to have visual cues across all products which make navigation common, intuitive, and simple.
]]>My very first multimedia piece for the Oregon Daily Emerald (and audio slideshow ever).
]]>Personally, I think this makes a lot of sense. Daily Emerald photographers, including myself, shoot hundreds of images each week. Many of the good ones don’t make it to print, as we obviously have limited space to run content. Having a team photo blog, however, will be an excellent forum for all of us to showcase our work, as well as highlight some of the challenges we face making excellent images. As a kicker, the images will be a full, gorgeous 900 pixels wide.
Furthermore, this is the first of many upgrades I hope we’ll be making this fall. Everyone in the newsroom is already in love with Google Apps, and I hope the other digital upgrades I’ve got in mind are just as well received (although I got the classic, “Twitter is so stupid,” comment a few days back).
]]>This first survey is to gauge the current state of the ecosystem. We want to know how what CMS you’re running, how many developers you have, and what languages they know, among other things. The survey will be open until 5 PM PST on 10 October. After we’ve spent time creating bar graphs and geo-mashups, we’ll release our first report. It should answer questions such as, “What is the average satisfaction with College Publisher 4 versus Drupal?” As far as we can tell, this hasn’t ever been done in our sector.
Along with the release of the report, we’ll be announcing our second CoPress survey. Our intent with this follow up survey will be to have a better understanding of what people want from a digital distribution platform. We truly value your input.
Also, props to Bryan Murley of Innovation in College Media for pointing out that it is not, in fact, September 2009. Not to be too stuck in the future, we’ve updated the survey title and links accordingly.
]]>We hope to change things up.
Together we have strength. I think I can speak for everyone involved when I say that the collective vision of CoPress emphasizes the community, and how the community can work in harmony. Innovative, standards-compliant software is one immediate issue we’re trying to solve, but it isn’t the only one. Brian Murley, of the Center for Innovation in College Media, forwards that hosting is also an issue. From that discussion, we’ve also learned that supporting a piece of software with the technical expertise to keep it updated is critical. These problems will have to be addressed in order for any student newspaper to survive. It’s more powerful to work together than individually. We’re not profit driven, although the consortium will need to be financially sustainable. We’re driven by a genuine interest to work together because, when we do, we can create beautiful ways for student newspapers to flourish in the digital age.
In the interest of radical collaborative openness, we’re doing as many things as transparently as possible. The motivation for this comes from a concept I call an “open source organization,” although I’m well aware “open source” has become a buzzword for many recent projects. It started with Whitman Direct Action, I’m evolving it with Oregon Direct Action, and I think is applicable here, too. The idea is simple: put all of the data about what you’re doing online, and structure the data such that your audience, let it be the team, the partners, or the community, can follow along to the degree they would like to participate. Clay Shirky says we have a lot of cognitive surplus floating around. It’s time we put it to use.
Our conference calls are recorded and available as a MP3 download, with near future plans to create a podcast that will make listening in even easier. We synthesize research and coordinate efforts on our wiki. Information is also expressed with Twitter, delicious, and Flickr. We connect via a Google Group and, if you don’t find a piece of information you need, you’re more than welcome to contact CoPress.
At the moment, we’re working on a few things. First, we’re beginning to research the software options we’re most interested in: Wordpress, Drupal, and the Populous Project (built on Django). CoPress would love to support the Populous Project, another student project, and eagerly awaits their alpha release in the coming weeks. Wordpress and Drupal, however, have deployability and hackability characteristics that will be hard to match. Second, we’re compiling the names of online editors, webmasters, and internet geeks at student newspapers around the country who might have interest in what CoPress will have to offer. From this, our hope is to do a series of surveys gauging the technical expertise in today’s newsroom. We want to make sure as best we can that we’re serving the needs of everyone, not just ourselves. Last but not least, we’re continually evolving our web presence as a tool to help better achieve our aims.
And this is just the beginning. Thanks to Adam Hemphill, Greg Linch, Kevin Koehler, Joey Baker, Bryan Murley, Jared Silfies, Albert Sun, the Populous Team, and anyone I’ve missed. I look forward to working closely with you and others in the coming months to make all of these ideas and more our collective reality.
]]>and India:
]]>
“5. In case the guest does not sleep during late hours and remains out of the room during the day times his activities should be kept under watch. In the night-time there is a possibility of making explosive device after collecting necessary equipment/articles during the daytime.”
Found in Paharganj, Dehli.
]]>First, I think student newspapers should actively work on developing 1 or 2 alternatives to CP. This may not mean collaboratively building a CMS from scratch, rather it’s more likely to be facilitating a developer ecosystem specific to our needs around common platforms. For anyone familiar with Wordpress, which I’ve helped implement for the Whitman Pioneer and most recently, Oregon Direct Action (which is a work in progress), it’s strength is an abundance of plugins and themes you can add to your install. A developer ecosystem is important for continued innovation and, as far as I can tell, CP doesn’t have one.
Cost is certainly an issue. Both CP and Wordpress, Django, or Drupal are “free,” but the critical difference is that CP comes working out of the box for student newspapers and the others require a developer. One stated goal is to have an open source alternative that can be quickly up and running with full functionality. If the paper has resources to develop their platform beyond point, they would be able to do so with the support of other developers across the country. This platform would also be available to local papers, although that is not the intended market. Furthermore, I do see a business model in this, in a very Ubuntu and Wordpress-esque fashion.
Quoting Brad,
There are some rather innovative and creative things which the CP4.0 system does offer. I would not say it limits creativity, rather it is the students you have on staff who know what to do with the tools that limits your creativity more than CP4.0. The Daily Pennsylvanian has done some very creative stuff in the LAMP environment, which is open source. The Daily Tar Heel has also figured out an interesting work around for blogs, granted done via WordPress but the 4.0 system and the students figured out how to “fit” it in.
Personally, I think arguing that College Publisher allows for innovation is completely erroneous. LAMP, which means Linux, Apache, MySQL, and PHP, is an open source stack and doesn’t stand for anything specific. I don’t mean to discount your example, I’m just not sure how you mean to imply CP is innovative by allowing hacking outside the platform. Furthermore, any server environment should allow working with and around the software running on it. Allowing Wordpress to be installed as a blogging platform is not a sellable strength of College Publisher
Brian also mentions that CP does provide backups of your site for the scenario in which it disappears. Unfortunately, these, I imagine, are only backups of your data, not the content management system your data is living in. If your site were to go down, you would have to install and develop an alternative CMS, as well as port your database, before you have a live site. You shouldn’t have to completely rebuild your website if College Publisher disappears. When the web presence becomes the only presence, having your site suddenly not exist would have very real consequences.
]]>In the school news industry, College Publisher, now branded as the College Media Network, desperately needs a competitor. Owned by MTV, a subsidiary of Viacom, College Publisher provides a content management system now used by “550 going on 600” student newspapers across the country. It offers under-staffed and under-funded newsrooms an easy way to get their content online at a price that can’t be beat.
Why is Viacom interested in managing the online platforms for as many college newspapers as possible? To deliver advertising, of course. As a part of the contract for a cheap, if not free, way to get your stories and images online, College Publisher reserves the top placements on your site for their own use. This allows an even bigger media giant (Viacom) to directly make money off a school newspaper’s content, either by selling advertising slots to big corporations like T-Mobile and Bank of America or by running advertisements for their other properties. Student newspapers are especially valuable to Viacom because they largely produce for its key demographic: the college student. Most, too, are held captive to this partnership because there isn’t the motivation, manpower, or vision for more innovative options.
Should any independent student newspaper want in a part of this? No.
College Publisher, unfortunately, is not the innovation aspiring journalists and reporters should depend on in this changing media environment. Claiming RateMyProfessors.com and a CMN Facebook app are “national media outlets” is not creativity. Rather than outsourcing the heavy-lifting to College Publisher, student newspapers need to allocate resources internally to running and developing their own platform. This can seem somewhat paradoxical, adding to your staff when you’re losing more and more revenue, but it is a necessity for survival. The future isn’t all that bleak, we’re just in a time of transition.
At Publishing 2.0, Scott Karp argues that newspapers need to take a hint from General Motors and learn how to innovate. Most newspapers have had roughly the same business model since the 1950’s which they’re now largely attempting to reapply to the internet. It’s not the same medium, though. Advertising and classifieds were king in past years, but the playing field is now open to the most ambitious entrepreneurs. Maybe a model like Spot.us will succeed, maybe it won’t. Without trying new things, there’s no way to find out.
Part of the innovation that has to happen, I would like to add, is how you manage, display, and distribute your content online. For student newspapers, the solution isn’t College Publisher. It’s too restrictive, poorly developed, and proprietary, locking innovative students to a platform that limits creativity. Page load times are atrocious because of far too much Javascript, and if they go out of business, your website goes down. The answer, instead, is open source.
One component of a strategy for student newspapers to move forward is a consortium dedicated to collaboratively building an open source content management system which best fits everyone’s needs. We need a robust, free to use platform that thrives under many of the same values which the open source movement holds dear. The growth of such a community around the publishing software used by student newspapers would be of tremendous value to everyone, especially because most papers aren’t in competing markets. Collaborative innovation is a win-win for these types of organizations, a fact I think few have realized.
As the start for a transition I hope to begin with the Oregon Daily Emerald in the winter, I’m taking steps forward. At this point, my work involves researching mature platforms already in the ecosystem, such as WordPress, Drupal, and Django, contacting people at what I think are progressive school newspapers, and working to identify the crucial features for any online newsroom (like managing media assets and placing advertisements). While I recognize there are already many content management systems on the market, my paradoxical goal is for a platform as easy to use and install as WordPress, which also offers advanced management features. Software that any student newspaper can install, but also be able to develop further if they have the resources to do so.
I’m passionate about making this happen. Let’s do it.
Ironically, the College Media Network blog runs Wordpress. They obviously aren’t drinking their own Kool-Aid.
]]>
Colin’s stubble is the new look, kind of like sagging pants.
Collin Sherwood Elwyn is one of those friends I’ve had since at least middle school, if not elementary school. I think we played both soccer and basketball together at one point, but it’s fuzzy trying to think back that far.

Colin’s stubble is the new look, kind of like sagging pants.
For dinner that night, we had pizza from the grill, perfected after many years of trial and error. I can remember back to the good ol’ days when we tried to cook it over the fire and ended up making calzones. The secret, as it stands, is to coat the dough in olive oil to prevent burning. Just reminisce of all of the dinners we had, though, before we figured that out.

Forrest takes a bite out of some pretty stellar pizza cooked, of course, on a Weber bar-b-que.
I think Forrest would agree with me in that it was quite tasty.
]]>No particular rhyme or reason to what I’m putting up at the moment, just whatever catches my eye.
I think, when I’ve worked through the body of a few thousand images, I’ll compose more of a narrative to weave the story together. Until then, enjoy the visual tour.
]]>They are looking for ideas on “workshops, themes, keynote speakers, etc.” until July 3rd. Let’s make this conference worth attending!
]]>
I left for India young, naive, and partially unprepared for the extraordinary series of events I was about to experience. My bag wasn’t packed until late the night before I left, and it didn’t hit me that I was spending three months photographing in a completely foreign country until two weeks in to the journey. By not thinking too much about it, and being entirely focused on what I was trying achieve, I think it was better this way.
Nike has the motto, “Just do it.” Cliche, yes, but it is one which wholly encompasses every lesson I learned while traveling to capture a story on the cultural, social, and religious constraints to clean water access in India. Always do what you’re most in fear of. Feel uncomfortable shooting in the crowds of Magh Mela, the largest annual Hindu gathering on the banks of the Ganges? Just do it. Uneasy about experiencing poverty in the worst slums of south East Asia? Just do it. Worried about the security situation in Kashmir, the disputed territory between India and Pakistan? Just do it. The first situation I wimped out on, a hundred thousand people in one stretch of river sounds like a lot of bodies, but it’s been at the back of my mind ever since.
Of course, any advice I make should be taken with a grain of salt. Pushing boundaries just isn’t for some people. For all the others, though, keep doing it.
Being a networking madman also has its advantages in putting together a story. If you see an opportunity to shoot something you hadn’t thought of before, take it. Don’t hesitate. It’s difficult to do in an alien environment, especially when you would like everything to be normal, planned out, and calm, but certainly worth the effort. Furthermore, tying journalism with development also will score you a number of connections, particularly in India. The people behind the non-governmental organizations (NGOs) are generally more than happy to talk to you about the issues they are combating. The government, not so much.
With all of that being said, there are a number of things I’ll be making happen next time.
For one, rethinking my adoption of technology. Oddly enough, the trip journey was partially intended to give me a 90 day hiatus from being digitally connected at all hours of the day. I made a decision to leave my MP3 player at home, which lasted until two weeks from the end when I broke down and bought a Chinese knockoff, as well as to take time off Twitter, a micro-blogging service.
Next time, I’m twittering the whole trip.
Not only is it a cool way to report interesting things you come across hour by hour, but also a cheap way to keep in contact with friends and family. The price of telecommunications is dropping quickly; to send an SMS cost Rs. 3.75 (around 10 cents) and receiving messages is free. These astounding developments allowed me to even publish my experiences as I was in the middle of the Thar Desert, an arid expanse of land on the Pakistani border.
My goal was to go light and cheap. Pack my backpack with only the things I really need, and then just take half of that. Next time probably won’t be so light or cheap. Even though I had to sell two pairs of skis and my kayak to afford this one, I would sell even more to bring a few more items:
An audio recor****der. India is rich with sound. For the same reasons I brought earplugs, I need a device to archive the myriad of noise happening at all hours of the day. Every train station has a unique announcement tone unforgetable to any traveler who has spent a lengthy period of time in one, whether waiting for an afternoon city commuter or spending the night curled up on a freezing platform. Bus rides also offer the cacaphony, let it be a screech of tires as the vehicle races along a narrow, cliffside road or the horn which a driver can commonly lean upon for minutes at a time. It never ends. For this story, however, the sound of water is the most valuable component I missed. Each region has its own footprint, the tap empties in the pot to a different rhythm, the bucket clangs against the dug well to its special beat, and the conversations surrounding these activities are in their own local language. Sure, photography is rich as a visual medium, but audio definitely helps to complete the circle.
I could also have taken better interviews with a recorder by taping them instead of frantically trying to take notes.
A GPS. Also known as a global positioning system, such a device has the ability to track where you’ve been and when you were there. Of course, I can always do this manually by dropping images on the map, as I do with many of my Flickr photos, but automating the process would be a huge timesaver, as well as lowering the barrier to entry. Geo is the next big thing, and geo-aware news even more so. Tagging my images geographically would not only provide an interesting way to keep track of them, but also allow any story I create to be geographically interactive.
More memory. Duh. Sixteen gigabytes is enough to shoot for just few days tops. Stretch that over a month, and the photographer is struck with an inability to make images. I’d like to call it photographer’s block. When you have to edit on the fly, or at least while driving between locations, it makes you think twice about whether you’d like to shoot 20 or 60 frames on a particular scene. Furthermore, processing as you go doesn’t give much perspective on the set. Often when I’m in the States, I’ll go back to my images at a later point only to find I like best a photo I was close to deleting earlier. Considering I only kept a tenth of what I shot between February and March, I can only hope I didn’t kill too many Pulitzer winners. This problem of a memory shortage can easily be remedied in these ways: bringing more cards, bringing a laptop, or a combination of both. Unfortunately, these two solutions require funding. Students are often short of funding. My solution: sell more of the junk you don’t really need. Some call it minimalism; I like to call it keeping to my roots.
Quite possibly the strongest, most poignant lesson I learned was that, to last three months in a country, I need a constructive project to do. Building upon that, it is also wise to approach a country with multiple story ideas in hand. With the way my planning worked out, I was done shooting what I had outlined for the water story by the second week of April, leaving me with nearly three weeks free. I can’t stand the “tourist thing” for more than a few days. As a result, I came up with a cockeyed notion to photograph people under occupation in Kashmir and Ladakh, with the intent of comparing and contrasting the two regions. In Kashmir, there are reportedly 1.2 lakh (million) security forces for between 10 and 12 million people. On nearly every street corner, there are bunkers with intimidating soldiers, intimidating machine guns, and intimidating barbed wire. Needless to say, it has an effect on the local population.
Research beforehand might’ve helped me refine the second story enough to realise Ladakh is still covered in snowed at the time I wanted to hitchhike there by truck. For all of the regions I missed though because of access, Ladakh, the Kinnaur Valley, Pakistan, Tibet, and Bhutan, there’s always next year, right?
Onward and forward.
]]>Money is made by identifying and capitalizing on inefficiency. Inefficiency in the market, inefficiency in a business, and inefficiency in moving humans to where they want to go.
Here’s one solution: ad-hoc transportation. Capitalizing on the triple convergence between location-aware devices (iPhone 2 on June 9th, anyone?), social networking (Facebook, Twitter, et al), and an absurd number of nearly empty cars on the road (suburban America), the goal should be to connect people with people who are pointed in the same destination.
We’ll call it Me Drive We for the time being. It’s the most creative, available domain I could find in 30 seconds of searching.
Say, for instance, I have a ‘99 Subaru Outback Legacy, Forest Green, and want to go out to Hood River for the day to photograph a windsurfing competition. To get directions and a forecasted drive time on the day of the event, I’d most likely use my GPS-enabled device to search up the destination. After I’ve decided on a route, Me Drive We could give me a wee little pop-up asking if I would like to publish my trip to the public. Me Drive We would then send me a text message with the names and numbers of people either in my area or along the way who are interested in making a similar trip. Or it could send my contact information to them, it doesn’t matter how the connection is made so long as it is made and made effortlessly.
It shouldn’t need to be limited to one platform, either. If I had rock-solid information on what the wind conditions were going to be the week before (and we’re speaking a lot of hypotheticals here), I would be able to use a website to report where I’m going and when. The value in having at least one mobile tentacle, however, is that I’ve never seen something like this done, and I read a lot of tech news, and you can make it brain-dead simple with one device: the cellphone.
Apple’s new iPhone is highly likely to be released in the next month with these features:
It’s always going to know where I am, and I might just want it to also know where I’m going.
Wait, what if I don’t want to drive or ride with complete strangers who might axe me to steal my wallet?
This is where the social networking should poke its head. Leveraging a social graph already created with Facebook or, heaven forbid, MySpace, I could choose to ride or drive with people I already know who have shared where they want to go too. The service (ideally) would only reveal my location and travel plans to the circle of friends I’ve already identified. If someone I didn’t know wanted to get a ride with me, I could again capitalize on the social graph to see if we know anyone in common.
If I ended up riding with some I didn’t know, Me Drive We could even give me suggestions for ice-breakers, based on data culled from other social networks. For instance, 90 percent of the music I listen to is scrobbled to Last.fm, and leads to very interesting charts. This week, my top artist seems to be Gangstagrass, who released a stellar hip-hop/bluegrass album I would highly recommend downloading if you haven’t already. Me Drive We could take this information, or knowledge of the recent books I’ve enjoyed from Good Reads, and give me and my passenger quality cultural artifacts to discuss.
The most obvious constraints are usability and critical mass. By riding on the shoulders of two giants moving through the forest at the moment, Facebook, or Facebonk as I call it affectionately, and Apple’s iPhone, I think Me Drive We could easily overcome them. Integration with existing devices and sites would super necessary for successful adoption.
You build it for us lonely drivers and I will use it. It’s time to be more efficient with our energy.
]]>Moving some too. After Rajasthan, I continued north to Amritsar, holing up for two days with a fever, visiting the Golden Temple, and then, finally, trucking on to Jammu. I recuperated further and then took an amazing Jeep ride to Srinigar, the capital of Kashmir.
There I tried to launch another story comparing Kashmir and Ladakh, and how occupation in the 21st century by the Indian security forces affects the people’s daily lives. Snow in the pass killed the idea so, after a week based in a houseboat, I journeyed on to McLeod Ganj, location of the Tibetan government-in-exile.
Many stories, of course, and many experiences to share. One, from a few days back, had me drop everything to write it in my journal.
***
On the bank of the sacred Dal Lake, there is an chai and omlette stand. Well… not quite on the bank but on a road leading off the main and so close I can justify calling it the banks. I drop down to the basin after hiking some kilometers from McLeod Ganj. Having had no lunch, I spot the modest carton of eggs casually on the small sill and amble over.
“Omlette?,” I ask. “Yes,” he says, pointing to the eggs and a loaf of cheap white bread. “Two piece egg, two piece toast. How much?” “10 rupees.”
Wow, a steal I think, and readily agree to the deal.
As he cooks, I become lost in my thoughts, hastily scribbling down ideas which came to me during my walk. One page filled, I move on to the next. I am in lala land often, daydreaming about this and that, and what I might do in the near future. Impervious to the outside world, and distracted by a vivid desire to create concepts. Many people are, I believe, but I won’t personally draw judgement as to whether it is good or bad. It just is.
Yesterday, I met a man named Klaus at my “Tibetan cooking course.” An astrologer from Denmark, he seemed quite normal with his feet on the ground. For me, he became a person of interest, someone who occupied a number of brain cycles, because he had just finished a ten day mediation course. Conducted in complete silence. No talking, no conversation, just listening to your thoughts for hours on end. If you ask me, it sounds like a gnarly way to discover yourself. I would go insane after day two. And yet, shortly after our exchange about his experience, he pulls out a cell phone to see if he has any messages from family back home. The same addiction I left the States with. I think we only try to escape it, and can never succeed.
The omlette is ready. The chai man brings it out to me, I’m sitting on a simple wood bench, the type which would break if your weight is too much, and I’m struck by how generous of a portion it is. On a simple white plastic plate, the kind from my childhood, the omlette takes up so much space that the two small, square pieces of toast have to be piled on top. I cut the egg into two pieces, divy up my toast, and dig in. The meal is delish.
Watching me from his quilted stoop inside the telephone-sized stall, he asks, “Israeli?”
I’ve been getting more and more of this recently. It might be my stubble of a beard, but I can’t be sure.
“No, United States,” I reply. The chai man looks at me confused, obviously not understanding. “Amerika,” I add, emphasizing the “k” which seems to me the trick at the beginning of anyconversation.
“Oh, America.”
A couple of moment later, he asks another question. “Chai?”
It’s been my goal for the last few weeks to cut back to one cup a day. If I drink too much, I only sleep five or six hours each night and wake up at four AM. With my mind racing about where I’m going to go, what I’m going to photograph, and which emails I’m going to send, it’s nearly impossible to get back to sleep. Plus, it’s bad news for whomever has to be the recipient of those emails.
But heck, I’ve fallen in love with this guy’s stand so I think why not. “Yes, one cup,” I say, and see him move his pan off one single burner to make way for the pot.
The man’s business is the quintessential Indian chai/omlette/samosa shack. I can’t put it any better than that, as the beauty of the moment struck me like a lorry. It’s painted bright yellow, similar to an STD point, and the side is emblazoned with “Lay’s Potato Chips.” There is a sill in the front at chest height with forty or so eggs, that loaf of bread with flies buzzing around it, several samosas in a pan, and a small bottle of red-ish, ketchup-y sauce for whatever you’d like to put it on. Sure, the stands come in many shapes and sizes on the sub-continent, with different types of foods, drinks, plates, and cups, but at this moment I notice it in its entirety. To me, the stand is a profound statement of my travels. This is India, and this man sells omlettes and chai for a living.
As he’s heating the chai, I suddenly want to capture the process. I whip my camera out of the bag, spilling another set of notes in the process. As I peer through the viewfinder, though, I see I’ve been inspired at the end of his work. He pours the drink through a strainer to my cup. The chai is ready.
Near the end of my caffeine and sugar elixir, I talk with a man from Delhi. We cover the basics, and then I rattle off the whole list of places I’ve seen this trip. The businessman appears disinterested this development of the conversation, but the chai man speaks up. “Chamba?”
I repeat the question back at him, not understanding its nature.
Then I do realise and ask, “Chamba Valley?” “Yes,” he replies. “No, not his trip. From Jammu to McLeod Ganj.” “Oh…”
I finally understand why he asked. “Are you from Chamba Valley?”
Whatever connection we made when I first arrived at his humble stand is magnified, enhanced. He gives me a “yes” with a broad smile and proceeds to show me a picture, worn and weathered, of him on the bank of Dal Lake. He is standing in front of a sign, and looks quite proud in a blue and red vest.
“Dal Lake,” he points, indicating something in the picture. I obviously don’t understand why he’s mentioning this. Again he says, “Dal Lake. In Hindi.”
I look closer and can see he’s pointing at script on the sign. Ah, that makes sense. It says “Dal Lake” in Hindi.
Putting the photograph down, he rolls up his sleeve to show me something else: a tattoo on his forearm. I glance at the body art and the side of his stand he points to as well. Both say “Krishan Chana.”
Ah, his name. That make sense too. “I’m Daniel,” I forward while holding out my hand.
He has one last tattoo to show me, the holy Om on the back of his hand. I don’t recognize it at first, but then I do. I pull out my Om, the one Kip brought back two years ago, from under my shirt and show it to him. “Shiva,” he says, pointing at my neck.
“Yup.”
And that’s the magic. That’s who he is, or a part, and that’s who I am. Or a part. Our conversation is limited because of language, but we’re both eager to learn about one another. India, although rapidly “modernizing,” is still about people. It affects me, irrovorcably I hope, every day I’m in this country.
Having finished my chai, I pay the six rupees and wander on.
]]>Google Earth now has Street View. To many, it comes as no surprise; Google has many web properties which will work quite well in unison once they are integrated. With the addition of Street View, though, the company is well on its way to creating a static, visual representation of the physical Earth. Furthermore, as technology progresses, a human’s ability to interact with this digital “environment” will be greatly enhanced. At an intersection in the near future, the boundary between the “analog” and “digital” worlds will be seemless. A person will be able to transition from one to another, with no conscious observation of the technology in between.
To quote my friend Shane out of context, the seeds for this future are already sown. Barring a complete collapse of civilization, it will happen and it will happen soon. Communication is taking the same route too, coincidentally enough.
One big question, however, is this: how do you make the “digital” representation of the “analog” environment dynamic and live? Is it a matter of everyone having embedded video sensors and GPS receivers which broadcast realtime to a connected web? Will the future be in nano clusters, swarms of technology which capture the environment for us? Or will there even be a need or desire move around in an “analog” world if we can manipulate far more in its “digital” counterpart?
Now take one step back. Who else in the blogosphere has already “created” these worlds, this idea? When will I be able to be aware, to be conscious of that knowledge without having to search?
AI is soon.
]]>Manoranjan! (“Enjoy” for those non-Hindi speakers like myself…)
]]>To begin where I left off.
Traveling from Kodaikanal back to Pune for the Appropriate Technology Study Group (ATSG) ended up requiring two overnight bus rides, instead of a 28 hour train, because of the wonders of online rail booking. The first one I took dropped me on my head in Bangalore, where I was fortunate enough to spend only an hour and a half navigating the city for an 11 o’clock meeting with Vijay of Arghyam. His organization runs the India Water Portal, a project I am excited to see develop. After an hour long conversation about some of the technical aspects of our project, Daniel the masquerading altruist stuck again, first crashing their blog and then setting up syndicated subscription, RSS or email, via Feedburner. Productive afternoon for a tourist, eh?
A significant chocolate fudge chunk of the past weeks has been dedicated to achieving some sort of success with this study group. I partially documented this along the way in an update for the team and one for my faculty sponsor. It would be an understatement to say the project has been huge and there might not have been enough time planned for it; many times I would work seven to midnight one day and then do it again the next. For all of the effort involved, however, I’m immensely glad I did it. If the opportunity arises, I would surely go right back to the Kolwan Valley [Google Maps] and continue ours and everyone’s work in improving the region. The guiding research question has evolved since the beginning of the project but remains essentially the same: what are some of the socio-political constraints to clean water access in the Kolwan Valley? Following general conclusions from the 2006 UNDP Human Development Report, the water crisis around the world is not an issue of physical availability, but rather of “power, poverty, and inequality.” Our hope for the report is to document enough of these challenges for the next organization working on water access to achieve greater success.
My first week in the valley, but without the rest of the WDA team, started an hour after I arrived at Mahindra United World College of India with a quick drive back down the hill to Sadhana Village. It was time to debrief on the surveys and start thinking about how short time planned for research should pan out. I journeyed with two MUWCI (mew-key) students, Maya and Samir, and was fortunate to hear first-hand what they and others had gained from implementing the questionnaires. It, and other anecdotal information, began my crash course on the specifics of what we were working with. Hard data was also important for understanding what the study group needed to get out of the focus groups; Sunday consisted largely of sifting through 40+ surveys to gather some insight.
This specific project, and, well, any in a foreign country, requires an extraordinary deal of spontaneous optimism and naive steadfastness. There is only so much you can prepare for at home. The mold we created for the focus groups has to be broken completely and then quickly recast to different shapes. As it turns out, it is not quite as easy to go willy-nilly through a valley and have whomever you want participate in a discussion whenever you please. Especially in India. At one point, I was even dreaming of buses for transportation to a central location, microphones and speakers for communication to large crowds, and cater meals. Oh the ambition! If that’s how it actually ended up, I’m quite sure I would’ve had a mental breakdown. The trove of information we collected in the focus groups that did come together, including ones with scheduled caste (SC) women, village elders, and school children, is proving valuable enough.
When I did have time free, I was very fortunate to be able to spend it with some of the kindest people on Earth who just happen to live in a slice of Heaven. On a couple of nights, I was treated to Nandita’s wonderful home cooking. As the head of the Triveni office at MUWCI, the study group would not be where it is today without her generous assistance; without her food, I’m not sure I could’ve survived the week of caf fare. Anat, one of the student leaders of Community Development, was the best possible host and completely set me up when I arrived. Her company, as well as from a number of other students, was a welcome relief to countless hours of organizing, planning, and mind-numbing data entry. I must also give a shout out to Ben who has given me the inspiration for what I am considering doing near the end of my little foray into to this wee-tiny country. Hopefully an engaging photo essay will come out of that.
Now is where I really have to reconstruct from memory. There is a 10 day gap in my journal because of project overdrive. It’s unfortunate WDA didn’t get much of a spring break in terms of relaxation
On Monday, 11 March, Jessie, Yukta, and Raechelle, our faculty sponsor for the project, arrived in the afternoon looking frazzled. A couple hours later, we went down to visit Mr. Deshpande and Medhathai at Sadhana Village to give them a brief introduction to the valley and go over the plan for the week ahead. A large part of the days following consisted of surveying the villages for the specifics of each regarding water systems and availability, Tim and Joey arriving, testing the water of 15 points in 11 villages for basic indicators of quality, Yukta and Joey leaving to go work on the conference, conducting even more focus groups and interviews, and synthesizing the information for a presentation of preliminary results on Sunday. It may not seem like much condensed into one sentence, but the schedule kept us well-occupied. In some ways, though, this is where I wish we had more time. Every single day gathering data was a lesson in just how many complexities there are in the valley and with any social issue. We may be able to write in generalizations for the report, but the goal of understanding the dynamics of each village completely before implementing a water access project should be the goal of any organization following up.
I will be the first to admit there are times I can be a workaholic. The lines from Bob Marley’s “Catch a Fire” resonate in my head when I think about this statement of truth. Thankfully, Tim, Jessie, and company are better grounded in reality. The lulls while they were in India included frequent dips in the MUWCI pool and walks around the Biodiversity Preserve. On a side note, I rediscovered the sheer brilliance, literally, of putting a flashlight in a cell phone when Yukta and I became stuck in Paud after dinner one night and had to walk 6 to 7 km back in the dark. Over the weekend, or rather Friday and Sunday night because Saturday was spent preparing our presentation, we did us some cultural tourism to Pune to see what Bollywood (dancing) was like. As you may be able to see on the runaway YouTube hit titled “El Ostrich meets the Robot,” I am not a dancer and Tim could be a rising star.
Only after eight short, long days in the field were we then in Mumbai for the Safe and Sustainable Water Conference. Which went alright, in my opinion. There were a lot of good things which happened, but still many I wish had; my reflection essay will likely be tens of pages long. To keep it short this time, we had an all-star cast but a significant part of the “confirmed” audience didn’t show. Even some of those who had been granted travel scholarships didn’t make it. A learning experience, for sure.
Since the WDA team left last Thursday, I’ve been off and on by myself. Part of the time, I’ve slept at the Salvation Army Red Shield Guest House, which offers dorm rooms at Rs. 150/night, and have had the opportunity to meet some really cool people including Ravi, a philosophy teacher in the UK, Francis, a “dude I would not think is a web designer” from Australia, and Jana, a German girl working on her Masters thesis on soil conservation in Gujarat. Conversations with them have helped ward off missing the WDA crew and yearnings for home. Last Friday, I was fortunate to go to see an exhibit titled “The Photograph: Painted, Posed, and of the Moment” organized by India Photo Now at the NGMA in Colaba. It showcased work from the likes of Henri Cartier-Bresson, Pablo Bartholomew, and the Magnum Photos group. Can I say super inspiring? I was especially struck by an image from Raghu Rai, an Indian national who is doing amazing work of his country. His image of a ship worker against the Calcutta harbor is absolutely stunning when viewed large. While in Mumbai, I also snagged a connection with Apnalaya to get a better understanding of the water access issues in the slums. Tuesday morning found me up at 445 so I could make it to the suburbs, not in the American sense, to get some images.
For meals, I’ve stuck largely with paneer makhani and naan, and then resorting to dal fry and chapaati at a local stand when I only feel like paying Rs. 25. Mumbai is a really expensive city; I will be quite glad when I am able to branch out.
With that, I embark on stage two: the north.
]]>The Kolwan Valley [Google Maps], where we conducted our research, is an area an hour drive from Pune. It is comprised of 17 villages, or 19 if you count the larger Paud [Google Maps] and Kolwan [Google Maps]. The large majority of households earn their income through subsistence farming, with wheat and sugarcane being the primary crops, and everyone else through a small variety of other means. At this point in time, there is almost zero industry in the valley. This could soon change because of the proximity to a rapidly expanding urban center (Pune). Village size is generally between 70 and 400 households, which are then commonly split into between two and five “wadis” or pockets including the village proper. Composition of the wadis is, for the most part, determined by socio-economic background; for instance, in many of the villages we worked in, there was a “harijan vasti” scheduled caste (SC) families. Governance is done on a local level by the Gram Panchayat, a “democratically” elected body responsible for the basic issues of each village, and on a wider scale by the Gram Sevaks and regional Indian government. The structure of these villages, and of the valley, is as such to provide characteristics unique to the area and threaded throughout India.
Data collection done on the ground by participants in the study group consisted first of surveys coordinated by two partners, Mahindra United World College of India and Gomukh Environmental Trust, and implemented by high-school students of both MUWCI and the valley. Over two hundred responses from nearly all of the villages were collected. A second, preplanned component of the research was a series of focus groups and/or discussions with different types of groups from the valley, including scheduled caste women, school children, and the Block Development Officer (BDO), an official responsible for the government-sponsored water management projects. With one of our goals being to collect information on the same topics related to water availability, water quality, water quantity, and sanitation from different stakeholders, we found it was also wise to interview some member of the Gram Panchayat to get an “official” view of those aspects in each village. This detailed information on where certain wadis get their water, how much they get, and so on proved to be crucial in determining which water sources, or points of distribution, we should test.
Our guiding focus for the Water Quality and Quantity Addendum was originally to determine whether the water in the valley is generally safe to drink or not without further treatment, as well as to collect the supplementary data to establish a need for better water management. One reason for this is to partially substantiate the report produced by the study group; it will be important when we pen the paper to prove there are both socio-political constraints in the region and that the valley has a water problem to begin with. Although much of this type of information should be available from the Indian government, we decided, with more explanation later, to go ahead and do independent testing of the basic indicators of water quality:
The tests were done through a variety of means. Dissolved Oxygen, pH, and temperature were all done in the field, as well as total nitrate, nitrite, and chlorine when the Lifewater kits showed up, and we took samples for the rest. On returning to the lab, the water for fecal coliform tests was placed on a culture of McConkey’s Agar for 24 to 48 hours. They were then assessed for growth of lactose and peptone-producing colonies, indicative of E. Coli, Salmonella, and other bacteria potentially harmful to human health. The pros and cons of each testing method will be documented in the full report.
As with working in any foreign country, there were, and still are, many challenges to getting the necessary hard data required for such a report. A significant amount of time, anywhere between one and four hours per village depending on how many cups of chai forced upon the team, was required to do a Village Water Source Worksheet [HTML], the first step towards understanding where we should test. Another timesink was that each one of these worksheets required at least one and sometimes two or three translators. This can easily magnify the amount of time needed as a question must first bounce from person to person and then the answer back the same path. One justification for why these questions have been necessary is that reliable information from the government is notoriously difficult to get, in both time consumed and accuracy. For many complex reasons, very basic data on water quality, quantity, and access sometimes either does not exist or is falsified. On top of that, there is an extraordinary bureaucracy to work through in order to obtain stats. The first person you talk to will pass you on to the next, and so on and so forth.
Regardless of these difficulties, we were still able to test 15 points in 11 villages assessed.
By testing for basic indicators of water quality, and surveying for hard data about the water sources in each village, we will be able to establish far more than just whether the water is generally safe to drink or not without further treatment. For instance, determining whether there is a presence of fecal coliform in the water can validate the accuracy of statements on both how often the water is treated and tested. If the man in charge of treating the water says he puts TCL in every day, but there is bacterial growth in the sample taken, there we will be able to document that there is a disconnect somewhere along the line. Furthermore, if the water source is being tested regularly, and there are indicators that the water is unsuitable for human drinking, then there should be action by the local and regional government to correct the problem. A presence of bacterial growth in the water could indicate some breakdown in the societal mechanisms required to provide safe drinking water. It is in ways like these that the hard data we’ve collected on the ground is proving to be a valuable asset.
With all of that being said, a fair bit of work still needs to be done. The collection of raw data from the Appropriate Technology Study Group is only just now being synthesized for analysis; through this project, we’ve been able to come to the overall conclusion that data collection is a time-consuming process. If it is at all possible, we would like to obtain the official water quality data from the government to see how it compares to our information, as well as use it to describe the long-term trends of the valley. It’s accuracy, of course, would have to be taken with a grain of salt. We made a request for this information to the BDO a couple of weeks back, and promised we could get it, but it has yet to come. It will also be important to continue tracking down the appropriate climate and water availability information to be able to compare how much water villagers perceive there to be compared to how much there actually is in each season, in addition to being used to depict the characteristics of the valley. Furthermore, it could be interesting to get hard data on how much water is being used for what, including what quantity is diverted away from the valley for use in Pune. The other data required to support certain arguments in the report will likely arise as we continue to figure out which specific dynamics in the Kolwan Valley inhibit access to clean and reliable drinking water.
]]>Kolkata is a huge, boisterous city with a Communist government in place for the past few decades. I noticed this only in a few subtle ways: the utilitarian design of the metro and university, signs proclaiming “A state of West Bengal Enterprise” on nearly every business, and the general antiquity of the city buses. While there is a fair bit of old stuff in this far off land, these buses had wood paneling. It took me straight back to the British Colonial period, ten or so years after I was born. If it hadn’t been so packed, I would’ve half expected the ticket taker to whip out a china set for afternoon tea, only to have the pot and cups break 15 seconds later. That’s how often there is an accident in the city. Actually, surprisingly, I haven’t seen a crash yet.
Thursday the 14th, aka Valentine’s Day and what already seems like eons ago, scored me the brilliant opportunity to travel with the executive leadership team of Water for People to West Bengal’s Nadia district. The point of their visit was to see some of the arsenic filters the organization has helped fund and install over the past five years, and the reason for my tagging along was to see if I can capture the cultural, social, and religious barriers to making sure people are drinking safe water. As with any shoot, there are images you hope to make and others you just accidentally happen across like an old man in the Thomas Crapper out back. Including my discussions with a former World Bank-er and other members of the team, I think I compiled enough to count that region a success.
Much of India’s public automotive transportation is also based on millions and millions of autorickshaws and taxis. In probably my most notable Bengali event, the Ambassador I hired just past dusk on Friday the 15th was dealt a fatal blow as we crossed the VIP Bridge. On the way to interview a Dr. Gupta of the BECS, a section of grated road right before the toll both tore the poor machine to shreds. I heard a metallic “clink” during 30 seconds of intense vibrations we confirmed not much later was a mission critical component of the car. Although I did feel a bit sorry for leaving the driver, he only received Rs 100 for making me walk the last 3 KM to my destination.
A tall beer certainly makes journal entries quite a bit more interesting to write. And read, looking back on that night. After sitting in the Victoria Memorial Gardens late Saturday afternoon, waiting to photograph the building at sunset and trying to explain to every visiting Indian IT student why I’m not with my girlfriend making snooky under a tree like everyone else, I took the advice of the Lonely Planet and took my supper on Park Street. For those who are not familiar with the area, this is a length of road where everything is a bit more expensive. Especially the meals. At the beginning of the entry, I write:
If I am to blow all of my money in the first month and a half, I might as well blow it in style. The meal hopefully won’t be any more than Rs 250.
and I finish it with:
Fuck, Rs 289. Man…
To take this in context, I spent one and a quarter what I was spending on my hotel room that night. Comparatively, it is as if I were traveling in the states with the budget for a $100 hotel room and then decided to go spend $200 on myself for dinner. Money doesn’t grow on trees, but I’ll bet it makes it more of an adventure near the end of a trip if you pretend it does.
Kolkata seems to be a mecca for the 25 year-old in search of his or her place in the world. It was my first time coming across so many travel bums in one square block. First, while wandering after returning from the Water for People excursion and apparently looking lost, I ran into Katie, a graphic designer and photographer who works until she has enough money to set off. You can imagine my relief in being able to have a conversation of more than three sentences. At the restaurant she recommended, which coincidentally costs alot and is called the “Blue Sky Cafe,” I sat across from a dude who was definitely hardcore and definitely not 25. Names must be meaningless if you’re 18 months into a six year trip; he didn’t ask for mine and I did not ask for his. Early into the conversation I learned he was on an overland trek from England to Tokyo, a journey I hope to take when I become crazy enough. One or two more years of school should do it. I asked him if he had read Danziger’s Travels to which he replied, “oh yeah, he’s an amateur.” For those unfamiliar with the story, Nick Danziger is a dude who did the same trip for 17 months in the 1980’s lying and stealing his way into countries, including Soviet-occupied Afghanistan. I wasn’t about to argue with him. The coolest guy I met, however, was a German photojournalism student named Andy. Not much for tourism, he is in India putting together a story on four Muslim girl boxers. Boxers as in the fighters, not the underwear. When I asked him how he managed to come up with such a subject, he said, “YouTube.” The wonders of modern technology!
Flexibility is obviously a required trait for those who want to avoid a mental breakdown. My stay in the smoggy city lasted two days longer than I had hoped because of an unintended consequence of India Railway’s decision to launch online booking. Nearly every single train, and I do mean 99.83%, are wait-listed for at least five days. This single fact is likely killing the boutique tourism of backpackers who don’t know where they want to be in the next week. There’s more than one of us, mind you, and it is a realistic impossibility to book your ticket to an unknown destination. After spending my last night in the Salvation Army Guest House dormitory building structure because I would be beaten, robbed, and raped if I slept in Howrah Station instead, I was off to Hyderabad.
Traveling by train for a single stretch of over 24 hours is an experience required of every visitor to this country. It gives you exposure to the myriad diseases and disfigurements beggars seem to have, is the only method of transportation in the world you can hear “chai, coffee; coffee chai” from a sing-song voice every 3.2 minutes, and lets you meet the type of people you wouldn’t normally sleep across from on a SpiceJet flight. Furthermore, going by second-class sleeper will be the only opportunity most will have to experience sheer and utter boredom. At least twice the type you thought you felt as a young child. India Rail should even mark up the absurdly cheap tickets and bill it as an amusement park ride. They could call it “Journey to Mars” but in small print mention the ride replicates what it would be like to get there using 1960’s technology. Like the lunar lander with hella tiny rockets. The “flight” would take absolutely forever, and when you have to go wee or throw out your leftover food it gets ejected into “space.”
On a somewhat related note, the India Railways company is the largest, non-military employer in the world. It transports over five billion passengers annually. If an organization such as Whitman Direct Action or, uh, UO Direct Action were to negotiate a recycling program with the head office, I think it would have the impact of single-handily ending pollution in all of Southeast Asia.
The 10 or so hours I spent in Hyderabad can be summarised by a single compound word: food-hospitality. It is the way of the true people. An extraordinary amount of treats, fried things, and fresh fruit was pushed my way as I sat on the floor of the Tajuddin house after delivering Kip’s mom’s package. After politely accepting a third and forth plate, my gut busted all over the floor. Not really. I had to keep eating. The gut-busting happened after I stood up.
As another word of advice from the open spigot known as my mouth, don’t ever buy a waitlisted takal fare from a booking office 1000 KM from your point of departure. They may appear to know what they are talking about but, if you hear those words, just say “no” and back slowly through the door. To leave Hyderabad, I had to cancel my train ticket and pay almost double for an A/C Semi-Sleeper bus where, in typical Indian fashion, they sell as many tickets as possible. I woke up at one point during the overnight ride to a TV show I really didn’t want to listen to. Hindi slap-stick comedy makes you want to punch the overhead speaker out. I now see why only the newest buses are in good condition.
The reason for my detour to the Kolwan Valley was to assess how the team at MUWCI was doing with implementing our mutual survey. A summary of several lengthier updates I wrote to the rest of the team, including a description of the difficulties MUWCI is having, is as follows:
The next few weeks will definitely be the most interesting of the project.
When I made it back to Pune Junction this past Thursday, my mind was a flutter with revelations of the deepest ocean trench. As a disclaimer, “every truth I write is a complete and utter lie.” This is what I came up with:
Life is not intrinsically “good” or “bad.” Events that happen in life are not “good” or “bad.” One’s opinions of the events depend exclusively on how one assigns value to an event. If, for instance, one were not to get a part in a school play, that person may establish a negative relationship to the event. To the other person receiving the part, the event would be seen as “good.” As such, in that simple proof, the event itself solely exists. It is, and has no intrinsic value.
Understanding the relationship between a person and an event is a key to enlightenment. Acting upon this understanding is one step towards achieving enlightenment. The trick is to separate one’s self from any emotion attached to an event and then recognize the opportunities stemming from an event like thin threads of light.
All events have these opportunities to take advantage of. Whether a person’s relationship to an event is positive or negative, there are always opportunities to move forward and progress. Again, the key is to look past the emotional relationship to the event, look through the cloud, and see where it will take you next.
Many times, the phrase “Nothing is Impossible” is said. In thinking about this, I believe the common reaction is one of inadequacy. Other people can do “great” things but it impossible to do “great” things yourself. The truth of the matter is that it is impossible do other people’s “great” things. You do not live their life flow, as they do not live yours. What should be said instead is “Dream. And do.” This phrase recognizes the unique values of each person, and their ability to do a multitude of “great,” impossible things, while emphasizing the need to look past their emotional attachment to the past. We must see, imagine, and dream the opportunities for progress.
Ironically enough, I woke up the next morning in my upper berth with a bitchin’ headache and gnarly fever. Natural Capitalism only ceded 55 pages of its sweet, recycled post-consumer content to me. Ye basta!
The area surrounding Kodaikanal at this time of year brings me to memories of the high Pacific Northwest during late May or early June. Under a stunning blue sky, the dark forests and meandering trails call my name in a way only the purest siren can. The air is often crisp and always clear; taking a gorgeous image is generally only a matter of pointing your lens. A chance encounter with Jeannette of Human Resources in front of the Kodaikanal International School on Saturday morning provided the opportunity to go on a stellar six hour hike to the highest point in the Palni Hills, a peak I can’t recall the name of, with her and a few friends. Along the way, the trail flirts with the edge of the mountain which drops thousands of feet down to the plains. Hot air rising from below offers priceless views of clouds forming in an endless dance. When we arrived at the top, we could see for miles and miles and miles and miles. Or kilometers, rather.
This past week has brought a wide range of experiences. While crossing the Bendy soccer field Sunday, I was nearly destroyed by a pack of wild dogs. My life was spared by five seconds of stupor and then an adrenaline-fueled sprint to the gate. For dinner that night, I was invited to the Shelton Cottage, the current residence of Tim and Katie Waring. Tim is a PhD student looking at, among other things, the traditional organizations which monitor fair distribution of irrigation water. Over left-over pizza and a delicious rhubarb dessert, we had an extraordinary conversation on topics ranging from Ghandi’s legacy to India, cultural as a method of evolution, and the SDK for the iPhone. They were, by far, the best dinner company I have had yet in the country. Monday and Tuesday were dedicated solely to producing as many images as I could for the KIS Development office. The current count tops out around 867 frames of French, Hindi, art, drama, and the “dish,” or dispensary. My mind has become numb to photographing. And writing, for that matter. This is the update that never ends.
One last thing. Today I escaped from campus for several hours to visit one of Tim’s small villages to photograph. It was dope. Dinner at the Royal Tibetan reminded me of good times with the Beckwiths.
Tomorrow I plan on running a double loop around the lake which will hopefully make my legs sore enough for the next few days of travel. Back to the Kolwan Valley and Appropriate Technology Study Group!
]]>Whether by accident or purpose, or accidently on purpose, I managed to do the latter. And, ironically enough, the waters I’ve seen so far are certainly not suitable for swimming.
On the wonderfully short Chicago to Delhi flight, I had the surprising chance to sit next to Steve Barg of the International Institute of Sustainable Development. The organization is a non-profit think tank based in Winnepeg with work all over the world. Not one to miss a genuine opportunity, I hounded him with questions for at least two of the fourteen hour flight. One current project he mentioned is establishing “adaptive policy design” which, paraphrasing crudely, is teaching governments that the strategies they outline this year won’t necessarily hold true for the next ten; officials had better be flexible if they don’t want to be ousted.
Under this philosophy, Steve’s organization is, for instance, researching how best to manage farmers facing “double exposure,” or those under pressure from both international trade policy and climate change. In India, the situation will only become more dire in the near future for at least two reasons: “global weirding” is causing rainfall to become less and less predictable, and farmers unsustainably exploit groundwater because both the water and power for their electric pumps is completely free. Sparing the boring details, it made my flight over quite a bit more interesting.
For many people, the first indicator they are in this foreign country might be the semi-permanent “Under Construction” signs at the airport, the seedy looking men waiting outside the customs gate to offer “free taxi to cheap hotel” or the, uh, organic smells as they step out into the night. For me, it was just how many people jumped to their feet to queue for the door seconds after the landing gear touched the runway, and how the flight attendant had to verbally abuse them over the loudspeaker to get them sitting back down. Very different introductions than getting lei’d at the door in Hawaii.
From Delhi, I journeyed by early morning train to Kanpur, site of nothing less than one of the most polluted stretches of Ganga. Upon arriving, I made my first traveler mistake by paying the three-wheeler driver before I confirmed I was at the correct place. Pack on back, my penance included walking four miles in the heat and asking over 30 people for the right direction.
The effort was worth it, however, as I spent the better part of 8 through 10 February with the two person staff of Eco Friends, a NGO working to restore the physical health of the river. To give a sense of it’s currently deplorable condition, less than a quarter of all Kanpur’s waste water is treated before it is released. The rest, 80 percent domestic and 20 percent industrial, drains directly into the water both above and below the intake station for the city water supply. Furthermore, the waste which does get treated often is handled improperly before used for irrigation. Toxins from the 300 plus tanneries cause serious health problems for both people and animals in the farming villages scattered around the area. Topping all of this off is the fact the river is diverted above the town for sugar cane irrigation, which reduces its flow nearly to a standstill. Through the knowing help of a quiet, soft-spoken Rakesh Jaiswal and his assistant whom I would be sure to misspell the name of, I was able to capture much of this with my lens.
Last Saturday, in the calm before an eight hour bus ride from the Hindu equivalent of Hades, I rose early to attend a boat rally organized by both Eco Friends and IIT Kanpur. We launched above the town at the diversion barrage to spend some time floating down the river and documenting its wounds for a report to be submitted to the local government. Being the only American, of course, also made me the honored guest, and I was invited to speak in front of the camera about the issue. I apologise in advance to my countrymen for any embarassment I’ve caused our great nation.
As per Rakesh’s request, Allahabad became the next point of destination for my chautauqua. Proving himself one of the kindest men I have ever met, he extended an invitation to attend a conference on the state of groundwater pollution in Uttar Pradesh which included all of my meals and, because every single place in town was booked, a room at the nicest hotel.
This most certainly was the high point of my luck.
In a journal entry I wrote the following evening titled “Things that have sucked in the past 24 hours,” I explored some of the ways the trip began to roll fast down a very tall hill:
- Not being able to get a hotel room on the second night because of Magh Mela
- Not being able to photograph Magh Mela, the primary point of my excursion, because I did not have anyone to go with and wasn’t about to get assaulted going alone
- Not being able to get a hotel room
- Getting accosted by a man from Andra Pradesh who wanted me to raise money for their supposed organization in the States and send it back. He and his partner in crime cornered me in a hotel room after saying they would go to Magh Mela with me. It reminded me of my mom’s stories of Amway
- Being homesick and wondering just what the hell I am doing in this country
- Thinking about [redacted] and how much I miss her company
- Wondering why the hell I started thinking about [redacted] so much
- Wondering just where the hell I am going next, and whether there will be a bed to sleep there
- Finding it ironic that, so far, the only other Americans I’ve met have been a nutso Canadian and an Indian national
- Learning it is impossible to book a ticket for any future travel at Allahabad Junction
- Having the lights go off and on every five minutes and wondering how sketchy this place really is
- Learning the wall I’ve been leaning against for the past half hour gives off some sort of chalky, white powder I hope isn’t dried pee
Had I waited until three the next morning to write the entry, I might also have included having to sleep on the station platform in twenty-something degree weather with no blanket. Thank something high above for the foresight to pack long underwear!
By taping together scraps of old paper and using some ingenious calligraphy, I finally scored a general class ticket to Varanasi. My two days and one night were spent primarily walking up and down the ghats, wide steps leading to the Ganga for bathing, and appreciating the ancient beauty of the scene. For the morning I was there, I booked a Rs 150 boat ride at dawn to photograph around, oh, 70 tourist boats and exactly three bathers. Monday had been some huge festival which starts with a “B” and has a “P” somewhere along the way, and apparently all the pilgrims got their washing done earlier.
The boat tour was followed by my traditional “crazy white guy” run at a famous location. In a fashion similar to my expedition down from Machu Picchu, I dodged people, animals, sacred ceremonies and cremations alike for quality exercise. I can safely say I am the first person I’ve seen out jogging for fun and not from the police. The path itself was consistent with only occasional stairs, so I would definitely recommend it to anyone interested. It might be in my future to compile a Top Runs of the World in the near future.
Yesterday afternoon passed like an old jalopy I have never ridden in, jerking forward at times and dying completely at others. Not being able to interview someone at the Samkat Mochan Foundation because I spent an hour and a half trying to figure out which ghat the research lab was at really put a bolt in my gears, and I didn’t get the crowded bathing scene at the river I wanted. In an attempt to live up to the “Tourist” label on my visa, I went to visit the Golden Temple nearer the middle of the city. No dice. The surrounding area was crawling with soldiers armed to the teeth, and they weren’t allowing mobile phones or cameras; I had both which I wasn’t about to lose to a shop owner.
Now in Kolkata, I plan to spend a few days on my project and visiting the most famous landmarks. I’m optimistic I’ve made the right connections for some stellar imagery.
One last piece of advice: having the holy Lonely Planet out in public makes even the most gnarly looking traveler a magnet for an entire university of touts.
]]>This will be more of a stream of thought than a well-thought, insightful post, so my apologies in advance. Sometimes this happens when you leave everything for the very last possible moment. In all honesty, I should be finishing packing my bag right now; it’s only half full and I’ve got my things strewn all across the living room. GPS, shirts, socks, books and other things I’m not sure I should bring lie in little piles like raked leaves in the fall. My plan of attack, and I know it’s going to lead to this, will be to just dump armfuls of gear into the pack and sort it out later.
I hope that works!
It makes me wonder what I’ve been doing in the past couple of weeks to be so amazingly prepared. On a similar note, I’m not quite sure how much money I have. My bank account is hovering around two thousand American dollars but, with our economy where it is and my credit card payment having not gone through yet, I’m probably going to have a bit less than that. The last lens I bought is definitely going to set me back around twelve hundred.
Oh, and my travel plans are absolutely absurd too. After what I imagine isn’t going to be the best 28 hour flight in the world, I’ve got six hours to catch a night train to Kanpur, Uttar Pradesh and then be in the shape to interview and photograph the next day. This type of, let’s say, well-structured planning just might be going on the entire trip. I do plan to see parts of the entire country during my short three month travel period. The map of India looks so small, and might be giving me the delusion I can make the full loop.
All of that negativity aside, I’m stoked! Here goes nothing!
]]>And I didn’t really notice this until today, but UO OP has uploaded all of the entries to Flickr. It’s very neat to see what I’ve been competing against. On top of that, I’m super honored to have been selected amongst some really good entries.
The winners will be unveiled at 1730 in the EMU Aperture Gallery on 29 January 2008. Might have to skip out on night skiing for this.
]]>One is that, thanks to some voodoo magic and an absurd number of classes last fall, I have enough credits for junior status. Although people are quick to point out that such a situation won’t necessarily make me graduate any faster, something or other about my major, I think it’s justification enough to take the winter and spring terms off. Worst case scenario is that I have to take summer school.
Secondly is that, and this is the primary reason mind you, using frequent flier miles doesn’t guarantee you specific travel dates. In fact, the airlines don’t even really let you pick your vacation when you’re using a free ticket to get to a foreign country. Upon the surprise of learning the earliest day I could return to the States was May 3rd, I thought, “err… I’ll take it?”
My parents aren’t exactly ecstatic about that decision, but you’ve got to take the opportunities as they come!
The itinerary for this trip, at this point, is a rough draft. I know for sure I will be working in some capacity on Whitman Direct Action’s Sadhana Clean Water Project for the first month and a half. The conference will put me in Mumbai on and around 19 March 2008. Other than that, I have two specific goals. My first hope is to parallel the WDA project with a one of my own. Involving photography. And a critical eye. Ideas in my mind I have, but I need to get them together pretty soon so I can get spec letters out. My second wish is to see Northern India, the entire half I missed during my first trip. Potential stops include Rajahstan, the Taj, and Dharmasala.
My itinerary as it unfolds (which may be not the best choice of words) will be published for everyone to see. And most important, I’ll be blogging every step of the way!
Some logical, if not brilliant, advice I’ve gotten so far:
From the way it looks so far, India 2008 is going to be one epic journey.
Update: You can now keep updated on these adventures (or lack there of) by using my subscribe page or joining the Facebook Group.
]]>Targeted advertising isn’t anything new. It’s only natural a business would want to pitch its product to the audience most likely to buy it. Time spent on a consumer who isn’t going to be a buyer is simply a wasted effort. Selling the merits of a men’s cologne to pre-teen girls isn’t effective just like pitching hearing aids to twenty-somethings with perfect hearing is a waste. It pays to focus advertising as directly as possible; in financial terms, it minimizes the dollars spent selling to each consumer while maximizing the company’s overall profits.
In 1932, Young and Rubicam became the first firm to advertise based on statistics. Twenty years later, the A.C. Nielsen Market Research Company, realizing the extraordinary potential of television to reach a mass audience, began tracking which prime-time shows were being watched in what types of households. As technology progressed, so did the sophistication of the ability to track viewers and their habits; by the 1970’s, tracking services could report many more details about audiences including race, gender, age, and educational background. Personalized advertising started crawling on its hands and feet.
Jump forward another twenty years to the commercial advent of the Internet. Its digital nature allows for inherently easier tracking. While transferring data back and forth, the web requires unique electronic addresses to ensure the bits requested make it to the correct recipient. This characteristic also means a digital “paper trail” is left in every transaction. Capitalizing on this technology, web metrics have advanced to a point where a nearly infinite amount of consumer information can be aggregated and analyzed. The current difficulty, if it can be summarized, lies in determining which information is most important and how it should be interpreted.
Problems to some are opportunities to others. One burgeoning market is online advertising, with has had over 150% growth in revenues since 2000. Success in this arena is defined by the businesses who achieve the highest conversion rates; it’s what has made Google the 5th largest company in the United States in less than a decade.
There are now a few common ways of using consumer metrics to target advertisements online. One method, borrowed from the print media, is selling advertising space based on the perceived reader demographics of a website. Grist, an environmental news nonprofit, and The Economist, a business and political analysis publication, both do this for placements on their websites. Making the deals in-house, albeit a significant amount of work, does have some added benefits. The most significant include being able to target to a specific demographic and using richer media (e.g. images and video) in advertisements. Google’s AdSense, on the other hand, is an example of a newer, content-based approach to delivering advertisements. Known abstractly as “contextual advertising,” it optimizes ad placement by analyzing the content of the website and listing the only most relevant promotions. Doing this by looking at topics, keywords, and phrases pretty well guarantees that the text-based advertisement will be on line with the focus of the site. Yet, at the same time, those ads lose efficacy when readers learn how to ignore them.
So begins the cat and mouse game.
Facebook, by capitalizing on the social graph between its users, is making advertising “social.” Originally exclusive to college students, this social network hasn’t been without its controversial business decisions. One such event, the launch of a tool called the “News Feed” which is designed to aggregate friends’ activities on the site, caused users to go up in virtual arms about privacy concerns. A mass exodus was only averted after the founder, Mark Zuckerberg, published an open letter promising to alleviate those worries. He might have to do this again.
Unlike Google’s AdSense, which advertises based off contextual data, Facebook now has two advertising platforms which exploits the social data its users provide: Social Ads and Beacon. Social Ads places advertisements for sponsored businesses and products in the sidebar and previously controversial News Feed. These placements are targeted based on information from a user’s profile; for instance, having “photography” listed as interest in the personal section will incur a higher than normal number of ads for photo contests or camera equipment. The other system, Beacon, works by through a hybridization of “viral marketing.” When a user buys a product on an affiliated site, the information gets sent back to Facebook and is placed in the News Feed of another user. The idea, or at least in theory, is that the advertisers gain traction through a “forced word-of-mouth.” Facebook hopes to make this possible with their platform, although users haven’t been so happy about it.
Personalization is in the future of advertising. AdSense, Beacon and others are only the forerunners in a continual evolution of marketing directly to a consumer. Take, for instance, a product such as Google Maps. In the past year, Google has introduced sponsored, location-based results when a user types in a query like, “pizza portland oregon.” With the launch of Google’s Android Mobile OS in the next year, Google Maps will be available on a number more handheld devices. Add a GPS-enabled wireless device into the mix and the user will no longer have to type in the “portland oregon.” Google will know, thanks to technology. Thanks to technology, advertising too will become more targeted in every way; based on location through GPS, based on past purchases with online retailers, and based the personal interests listed on social profiles.
Or at least that’s the current trend of thinking.
Privacy. A world where information about an individual’s actions flow freely to businesses leave little maneuvering room for a personal life. Transparency should be a two-way street. Consumers need to critically assess how much privacy they are willing to give up, and to whom they want to give it to. In the case of Beacon, the platform has become so disputed that is has attracted the attention of MoveOn.org, a civic action organization normally focused on politics. As part of a multi-pronged approach, the nonprofit created a Facebook Group titled, “Petition: Facebook, stop invading my privacy!” and draws upon members to be activists. Their intent is to call upon the company for a public response to an issue which has created headlines such as, “Does Facebook Hate Christmas?,” “Is Facebook a Privacy Nightmare?” and “Are Facebook’s Social Ads Illegal?” With enough voices, and media publicity, the tactic is sure to be successful; Facebook, unless interested in committing financial suicide, has no interest in causing the entire core of its business model to migrate to another social network. What the long-term loss, or gain, to user privacy is, however, has yet to be decided.
Integrity. The effect advertising has on content is also a very important question. In a world where it is becoming the easier choice to monetize a business with paid advertising, one must ask what sort of effect such as decision has on independence. Take journalism, for instance. Although this model is not yet entirely true of major papers, many blogs write journalistically, are supported by advertisers, and have become primary sources for niche news. Without an established and transparent code of ethics, it is impossible to guess at the editorial integrity of a website. Some naive audiences assume their authority, but every reader must be a critical reader and look at the policies behind their business practices. Grist and The Economist, for instance, have advertising policy links on top of clearly defined ads. Some sites running Google AdSense, conversely, embed their advertisements in the content of the page or in faux navigation bars. An uneducated visitor, subsequently, does not know the different between what is real and what is advertisement. For the integrity of journalism, and of all media, there needs to be a clear line between independent content and advertising.
In an economy increasingly dependent on universal participation, it doesn’t pay to exploit user data. Using those same crowds to deduce such a decision, however, is a smart choice to make.
Written for the final paper in J 201 Mass Media and Society. Also available to download in PDF
]]>The ease of use associated with WP also makes launching new designs very addicting. I’m currently working on three:
In my dev set-up right now, I’m working on the OSO theme listed above. It should be ready for a version 0.1 release any day now. Shout out to Grist for introducing me to the concept of a dev environment (and not trying to build a theme on a live website, haha).
]]>This, my friend, is feature of sheer brilliance. I love you Skype!
To enable this functionality, you’ve got to have the absurdly cheap Skype Out. Once you’ve signed up:
It’s that simple! As an added bonus, when you’re not around a computer, it looks like you’re online anyway; you don’t have to be signed into Skype for someone half the way around the world to talk to you!
]]>A month or so ago, I was hit with the notion that the open-source movement might be applicable to systems beyond software. What I quickly realised, much like when I “invented” the word guesstimate, is that someone had probably already thought of this idea. Undaunted, I began to brainstorm on how I might apply it to an organization I’m working with called Whitman Direct Action, primarily because I feel the concept behind the organization itself is revolutionary and could prove to be a useful model for other colleges and universities to build upon.
For those who are not well-versed in open-source’s history, the philosophy could be argued to have gone pop culture with Linux, a free-to-use and distribute operating system licensed under the GNU Public License. The idea of free software had existed long before Linus Torvald started working on his operating system but, from my uneducated viewpoint, that’s when it began to go mainstream. At present, Linux has become the dominant operating system for many of the internet’s web servers, and a popular distro called Ubuntu is rapidly gaining popularity as a free and open alternative to Microsoft’s proprietary Windows operating system. Unless the trend changes, and again from my viewpoint, open-source architecture will continue moving broadening its marketshare because of the speed at which intellectual property now moves across the internet, as well as the apparent mutual advantages to people who collaborate on open-source projects.
This change in scenery is also apparent with the rapid rise of Wikipedia, a system that encourages adapting and building upon intellectual material. Wikipedia, for those who have been living under a rock for the past few years, is “the free dictionary” where anyone can edit and improve upon its articles. It relies on the collective intelligence of the masses, something normally believed to be inferior to a professional editor. However, a recent study found the Encyclopaedia Britannica had just a small percentage less errors per article than the seven year-old Wikipedia. Considering Wikipedia now has 8.29 million articles in 253 languages compared to the Britannica’s 29 print volumes, it’s no stretch to say the writing is on the wall.
Open-source is a tricky concept to explain to people who have little to no experience with programming. For those beginners, the term “source” refers to the structure of commands which lie behind any digitally created object and “open” implies that the code is free to use and distribute. Take, for instance, the construction of an automobile. Most cars and trucks have, among other things, an engine, a drivetrain, and a way to control the vehicle, sometimes called the wheel, gas pedal, and brake. Those systems are parallel conceptually to code in the digital world because they are the means to an end. They determine the overall output of the product. When you apply open-source to a car or truck, this means that the parts, or information to create the parts, is to be freely used and distributed. If person B wants to improve upon person A’s automobile, they would be free to copy and adapt person A’s orginal designs. Of course, persons C and A could then have access to the adaptations as well. In fact, a system like the one illustrated is beginning to take place in China. Don Tapscott and Anthony Williams’ Wikinomics: How Mass Collaboration Changes Everything documents how businessmen in China have opted to open-source the designs of their motorcycles to cut down on the costs associated with developing intellectual property. Working together is now becoming a very smart business decision.
In another example, this piece of writing is being published by the open-source blogging software WordPress, and some of its research has been done on Wikipedia. The list goes on.
Jumping the fence from open-sourcing intellectual property such as code and blueprints to the functional structure of an organization has only recently become possible; thanks for the ability to do this goes to the spreading ubiquity of the internet, and the brilliant tools some companies are building on top of it. An open-source organization is one which seeks to become completely transparent to the public, meaning that any or all of its processes are easily visible and adaptable.
With Whitman Direct Action, or at least initially, we hope to:
The driving philosophy, of course, is to make our organization “open-source” in the same sense of any software code: free to use, distribute, or modify.
]]>Overall, it’s a wonderful idea for a niche whose surface has yet to be even scratched. Personal finance is an area I feel I’m extremely disorganized in and Mint does an excellent job of presenting, in web 2.0 fashion, my income and spending trends. I especially like the ability to receive alerts if I’m spending too much, or one of my accounts gets too low. Set-up correctly, this has the potential to be a very valuable tool in itself and could possibly make personal finance a brain-dead task.
The ability to track purposes with both categories and tags follows along with the web 2.0 vein, and shows that the company is forward thinking in its organizational philosophies. The user-interface for changing categories, however, could be drastically improved. If a purchase from a company is miscategorized, the user has to select all of the purchases on the list one by one in order to do a batch update. The smarter way to do this would be along the lines of gMail’s “filter” feature. I want the ability to apply my setting to previous purchases, not just future ones!
Presenting ways to save with sponsored companies is a brilliant, and often under-utilized, business model. It is smart and sustainable primarily because, ideally, both the consumer and the company win. Although I’m somewhat wary of switching credit cards when I don’t want to, I’m pretty sure Citigroup’s claim that they can save me $560 is a valid one.
Furthermore, the web-app appears to be (or at least according to my uneducated audit) very secure. From their security policy:
- We require only a valid email address for login registration for the service. Notice that our signup page never asks for your name, address, or SSN.
- Your personal information is never sold to third parties. You will not end up on someone else’s email list.
- You can delete your account at any time.
and:
- All data storage is encrypted. Not only are our hard-drives encrypted, our servers are in a secure facility protected by biometrics palm scanners and 24/7 security guards.
- We hack our own site. Mint runs thousands of tests on its own software to ensure security. We scan our ports, test for SQL injection, and protect against cross-site scripting. We also update and patch our software all the time.
With all of that being said though, it doesn’t work at all with my financial information. I got the service to recognize my credit card account, but the account shows up twice and I can’t figure out how to stop it from doing that. Duplicate charges are no fun weeding out. On top of that, Mint isn’t even able to access my bank account and presents all sorts of crazy errors.
Mint, the recently-public personal finance manager, is a wonderful idea conceptually, but it will probably be a couple of months before I can recommend anyone dedicating the time to making it actually work.
]]>It was a pain and a half to create, undergoing at least 3 complete re-writes, because I went at it not knowing what I wanted to create (nor did I have a color scheme). Every site I looked at for inspiration added more ideas to the mix, the CSS would then break, and I would have to do it all over again. Note to self: have a sketched understanding of what you want to build before you go about building it.
The idea for a broad blue banner came from the startpage for Google Analytics and I modeled the concept of a clean FAQ off of Parakey’s splashpage. Those FAQs, at least at this point, are in need of a complete re-write because I was completely bombed out at the end of the Saturday. If you have any questions about wDA, or want to learn more about my idea of an open-source organization, feel free to contact me.
]]>