Moving Forward

You may have heard the news: Moving On.

After working together for 4 years, we decided the best move for Reaktiv and each of us personally is to part ways. I’ve been leading client services since joining as a partner in 2014 and Norcross led our products, all of which will remain at Reaktiv Studios moving forward.

What happened?

There’s no #wpdrama here, and that has been one of the biggest lessons in this. Two people can be friends, work well together, and have similar goals but still decide to make a change. Norcross starts working with LiquidWeb in May, a client we’ve been working on some really cool things with. So, while he is leaving, he’s not going far and it’s a good thing for him and for us.

What’s happening with Reaktiv?

The team is staying in place and we’re having our best year yet. I’m lucky to come to work every day with such a capable, creative, and fun team. And we’re growing šŸ˜„.

Moving forward, we’ll continue to grow as we expand our team and service offerings.

What about you?

Why, thanks for asking! My goal is to make Reaktiv Studios the best place to work in WordPress. In terms of my personal role, I’m continuing to lead client services and will be implementing a new growth plan on the product side. Design Palette Pro is stable but there’s definitely untapped potential there.

I’m excited to continue serving our clients and the WordPress community with Reaktiv Studios.

How to Replace a Tag in Subversion

I am typically doing this to make a readme.txt update to a WordPress plugin without forcing an update upon all the users for something trivial like updating the “Tested Up to” header. However, I always forget the correct steps for doing this. I am mostly writing this to store it here for the next time I forget.

Ensure you have a local working copy.

svn co <SVN REPO URL>

Edit the files in trunk:

vim trunk/readme.txt

Remove the tag you plan to replace, then re-copy trunk to that tag:

svn rm tags/<tag to replace>
svn cp trunk tags/<tag to replace>

You could also just copy the specific files over after deleting them instead of replacing the entire tag:

svn rm tags/<tag to replace>/readme.txt
svn cp trunk/readme.txt tags/readme.txt

Then commit your changes and you’re on your way.

This really isn’t what Subversion tags were meant to be used for, but it’s the system we have for releasing plugins. Tags should represent your repo at a state in time, and once created, shouldn’t be modified. While I could release a new version for these minor updates, it seems like an unnecessary burden on users. So this is what I’ll continue to do until we have a better option. Like an admin interface for updating plugin headers…

From Two Posts per Year to Two per Week: A Writing Challenge

I’ve already posted about my challenge for February. Right now, you’re reading the final edition of my January challenge. The challenge, which I completed with my brother Alex was to publish two posts per week for four weeks1.

We’ve tried writing challenges in the past, using a daily word goal of 750 words. In fact, we tried back in November and failed miserably. I think I made it 4 days. When thinking about this challenge we needed to change the goal. It would have been easy to try and do the same thing. With a daily word goal I would usually end up journaling rather than writing something for publication. Instead, Caroline suggested a publishing goal. We settled on publishing twice per week.

Switching the goal forced me to actually hit publish. To get over myself thinking that I need to write an epic post and just practice writing. All this thinking and planning about writing wasn’t getting me anywhere. After 4 weeks of consistent writing I am already more comfortable when I sit down to write, and publishing doesn’t have the same scary feeling that it used to. What if my title isn’t perfect? What if I don’t tag it correctly? Every post needs a featured image in my theme. Who cares?

Instead of worrying about all that, I’ve published.

I’ve always wanted to develop the writing habit, and it’s been much easier to write when I know no one’s reading it. Even with a total of one, maybe two blog readers it’s forced me to write something semi-intelligible. I’ve had some good follow-up conversations that I wouldn’t have without publishing.

Going forward, my goal for the rest of the year is an average of one post per week. 52 new posts published. I have other projects and challenges, including other types of writing that I want to focus on and I want to free up some time to work on those over the next few months.

I still have a long way to go in becoming a better writer. Writing–and publishing–instead of over-thinking, has been my first step in that direction.

The posts I published this month:


  1. We started the second week of January. 

Sugar Free February Challenge

Sugar Free February

Starting today, Caroline and I are going sugar free for the month of February. Technically we’re going “refined sugar-free”. Natural sugars, like the ones found in fruit and dairy are fine. We may have a tiny bit of raw honey from time to time, but in general we’re avoiding sweeteners.

Why Go Sugar Free?

I don’t think sugar is my worst food vice (it’s Bread). However, I do think that sugar, while it may provide temporary energy, is an absolutely useless ingredient. There are zero redeeming qualities except that it tastes amazing. Eating sugar never seems to satisfy, it just makes me want to eat more.

I wanted to reset our sugar habits because we seemed to be getting in the habit of “just one more treat”. And then that became a routine and suddenly we’re having second dessert, and third dessert (even if that’s only a 40 calorie piece of chocolate). If we went 30 days without sugar, what effect would it have on our health? Would we still crave these things? Would it make a difference?

4 Steps to a Sugar Free Month

Clear out the fridge and pantry

It was going to be really hard to avoid sugar if it was easily accessible, so the first step was to clear it all out of the house.

This is the jar containing all the sugary items left from our cupboard. We may or may not have eaten the other things before the month started.

  • Cake icing
  • Hershey Special Dark bars (for s’mores, duh)
  • Sprinkles (for fun, duh)
  • Chocolate chips
  • Jello
  • Pudding

Things we left in the cupboard:

  • Cheerios. Only 1g of sugar. Really not a problem at all. We are going to avoid them, but we are keeping them for the kids.
  • Sugar. Uh…yeah, we won’t be baking for the month, but neither of us eat spoonfuls of sugar.
  • Simple syrup. For cocktails. No concerns that I’ll be drinking this straight.

Plan out your meals

Knowing what we’re going to eat every day makes it much easier to stick to the plan, rather than having to come up with an idea right at mealtime. Especially as the day goes on, it gets harder to keep my willpower up. Knowing what is coming next, and not having to think about it, makes it easier.

Shop and Read the Labels

Try reading all the labels in the store and you won’t believe how many things have sugar in them. It’s hard to find non-sugar versions of certain food. I’m looking to you, whole wheat bread! Since we’re saying that natural sugar is OK for this challenge, we can still eat natural peanut butter. The only ingredient is peanuts, even if the nutrition facts show a couple grams of sugar.

We found some bread with no refined sugars and switched our pasta to one made from quinoa. We bought plenty of fruit, Greek yogurt, oatmeal, eggs and avocados.

Endure

OK, maybe I’m being a bit dramatic, but the rest is just to do it. Stop eating refined sugar. It sounds pretty simple.

These are the things I’ll miss the most:

  • Ice cream: We eat these mint chocolate chip greek yogurt bars from Costco that are only 100 calories. They will be sorely missed.
  • Chocolate: We usually have 1 piece of Dove chocolate per day.
  • Breakfast cereal: Even bran flakes have 3g of sugar in them. Bran flakes!
  • Salad Dressings: Lots of sugar in these, so we’ll be making our own for the month, since we eat salads for lunch 3x per week. We’ve been recreating a salad we ate in Peru that only used oil, vinegar, lime juice, salt and pepper.
  • Restaurants: It’s really hard to avoid sugar when eating out, so we plan on cooking most meals at home.
  • Marshmallows: Marshmallows are so good. Don’t you keep a bag in your pantry and eat straight out of it?
  • Soft Drinks: Neither of us drink soda, so this isn’t difficult to cut out. I used to drink quite a bit but cut it out years ago. In my opinion, this is one of the most important changes you can make for your nutrition. Everything you drink should be near-zero calories. Water, coffee and tea. Luckily there are endless variations of those three beverages. In a perfect twist of irony, today’s xkcd is on this topic.

While we weren’t really going overboard on these, I thought it would be interesting and challenging to see how we’d do without them for a month.

What We’ll Reach for Instead:

  • Greek Yogurt. Instead of ice cream for dessert.
  • LaCroix. Any zero-calorie, zero-artificial sweetener sparkling water will do.
  • Fruit. It’s sweet, and not processed
  • Black coffee. No sugar, no milk.

My goal is to not knowingly eat any refined sugar for the whole month. I’ll report back in March with the results. Join me?

Photo by @leonephraim.

Challenge Your Assumptions

What happens when you assume something?

We all have assumptions and predilections about the best way to do our work. They are built with experience over time and eventually become so ingrained in what we do that it’s hard to imagine another way. We become attached to the first way we learned how to do something and never research alternatives. This is a problem.

Challenge Your Assumptions

A good time to do this is when you start a new project. It’s easy to take what you did on your last project and start from there. The way you do something might be fine, but it’s possible there’s a better way to do it. On each new project choose an assumption to challenge. Ask yourself questions like the following:

  • Is structuring my code this way still a good idea?
  • What are other people doing?
  • This is the build tool I know, but is it the right one for the job?
  • Could I make this code reusable?
  • Have I made this too abstract?
  • Do I really need to do this?
  • Surely there’s a better way…

If you’ve hacked something together because “this is the only way it will work”, step away and come back later to see if you can approach it from a different direction. Very rarely is there only one way to do something. If you’re doing something that feels novel and weird, it’s possible it’s just weird.

Especially when we’re learning something new. We try something and it works. Someone teaches us a technique and we run with it and never look back.

Look back. Try another method. You may find ways to improve.

Ask someone for help. Their fresh perspective or experience may help point you in the right direction. While it may feel like it, there’s no glory in doing things “your own way”. It’s prideful, wasteful and only occasionally a good idea. For many things you don’t need to re-invent the wheel as there is a standard/framework/library that already does what you need. Do furniture buyers care whether the craftsperson made their own tools? No, only that the finished product is high quality.

Even this can be abused with hero worship. It’s good to learn from others, plural. If you take only the opinions of one person, they’re not much better than your own. Learn how multiple people do something and distill your findings down to a singular approach.

There usually isn’t one best way, but a best way for each specific situation. Context is key and the real work happens in gray areas. Get comfortable with making decisions in the gray and you’ll be a better developer. The way to get there is to constantly challenge your assumptions.

How I’m Reading More This Year

Hall of books

I set a goal this year to read 12 books. Something achievable. So far I’ve read 5 books in the first 3 weeks of the year. This is the fifth blog post I’ve written so far this year, which is 2.5x more posts than I wrote all of 2016. I’ve always been reading, but it’s been blog posts, news articles and social media posts. What changed?

I didn’t magically get any more hours in my day. Honestly, I probably have fewer now. It comes down to reprioritizing the time that I have. Below I’ll explain a few of the tactics I’ve used to get myself reading more this year.

Reading Speed

I’ve been reading faster. I used to be so concerned that if I read quickly I’d miss something. I may miss something. That’s OK though. At the rate I was going, I’d never be able to read as much as I can now. There’s a lot of fluff out there, even in books that I enjoy. I try to read as quickly as I can, just on the edge of not understanding what I’m reading. A lot can be skimmed over.

I haven’t gone out and bought a book on speed reading although maybe that would help. I’ve kept it pretty simple. As I’m reading, I ask myself, “Does this matter?” If it doesn’t, I continue to skim. If it does, and it’s something I’ll really want to remember, I’ll slow down and read carefully. Maybe I’ll add a highlight or two.

Put Books Everywhere

I have a paper book on my nightstand, and one in my office. My kindle and iBooks apps on my phone are chock full of books I’ve purchased over the years. I’ve put these books readily accessible so that they are easy to reach for when I have the time. Even a few pages here and there start to add up.

By making a book the default choice for entertainment, I end up reading more. I’ve enjoyed it so much that it’s helped me maintain progress as I’m discovering all these unread books that I have and can’t wait to read through them.

Stop Reading Bad Books

My reading lists are pretty cluttered. There are many books I feel I “should” read. Whether they are classics or something that may help me in my business. I could force myself to read the whole thing, or I could get rid of it and move onto something that’s better. Part of the fun is exposing myself to new ideas and broad topics. However, it’s good to realize when I’m not getting anything out of the book and set it aside.

Set Goals and Track Your Progress

I’ve been using Goodreads to track my reading challenge for the year. I find that updating the currently reading shelf and tracking my percent complete in each book is very motivating for me to keep reading.

What It’s Done for Me

I have noticed a positive change since beginning to read more books. I have always been a reader, since I was very little. It has waned in recent years as other things became higher priority and the number of distractions increased. I’ve replaced Instapaper and my RSS Reeder on my home screen with iBooks and Kindle. Tweetbot is hidden in a folder. This makes my default “consumption mode” reading one of the books on my list rather than scrolling through feeds. While there still are times where I mindlessly look at Twitter or Facebook or catch up on my RSS feeds, I’ve been reaching for one of my current books instead.

Instead of getting angry at current events or being mindlessly entertained, I find that my brain keeps working on what I’ve read when I go back to work or go about my day. I’m much happier than I am if I spend my breaks reading the news or Twitter. I’m learning and achieving a goal at the same time, which really increases the enjoyment for me.

I’ve always enjoyed reading. If you haven’t, you may not get much out of this. If you feel like you’re on a never-ending treadmill of social media and news, switching to reading books may help your sanity.

Photo by Glen Noble.

How to Set Up Free Incremental Deployments Over SFTP With Gitlab CI and PHPloy

Gitlab home page

Update: Gitlab has just announced paid plans, with a monthly limit on CI runner minutes (2,000). For personal projects this likely won’t have a major impact, but something to keep in mind if you frequently deploy or have long builds.

I have been really impressed with Gitlab.

They are constantly cranking out new features and fixes as they release every month like clockwork. What has really attracted me to Gitlab is their integrated CI (Continuous Integration). I’ve used Scrutinizer, Travis and DeployBot for professional projects, but I wanted to create a deployment system for my smaller, personal projects.

I have many small personal sites that I want to be able to easily edit from anywhere without depending on having everything on my local machine. I wanted to only require git and a text editor, and let the deployment tool handle the rest.

Most of these sites don’t make any money so I wasn’t real excited about paying for tools (even though I’d happily do so for my other projects) and it was also a fun challenge. I wanted to bring the structure and ease of deployment I have in my professional projects to my personal projects. I usually avoided making changes to these projects as I could never remember where the servers were, the credentials and what had potentially changed on the server in the meantime.

The Criteria

I needed this system to be free, automated, and host and local machine agnostic.

Free

As mentioned above, I wanted to see whether I could do this with freely available tools. Gitlab CI provides free runners that you can use, or you can run your own on a server you control. For these projects, I am only using the free runners as they are not mission critical applications.

Automated

I could use these tools to deploy straight from my local machine, but I wanted to be able to deploy just by pushing to Gitlab or by clicking a button in the UI.

Local Machine Agnostic

You can use any of the command line deployment tools I mention below to sync local files to another server. This is great, but it would mean that every machine I wanted to deploy from needed to have these tools installed and configured, and I needed to have the login credentials available.

Host Agnostic

My goal here was to have one deployment process that I could use regardless of host. Most the hosts provide SSH access, but not all. So I wanted something that only required STFP to deploy. This ruled out tools like Capistrano for me as SSH access is required.

The Deployment Tool

I originally used Dandelion, a Ruby deployment tool. It worked great, but the Ruby dependency meant I needed a separate container just to install it. The build runs much quicker if only one container is needed, so I sought out a PHP deployment tool.

Enter PHPloy.

PHPloy is an “Incremental Git (S)FTP deployment tool that supports multiple servers, submodules and rollbacks.” Rather than deploying your entire repo every time, it will only deploy what has changed since your last deployment. It does this by writing a .revision file to your remote server that stores the most recent deployment’s git commit hash. PHPloy determines which files have changed compared to that revision and only deploys those.

Some of the features that were great in Dandelion were missing or broken in PHPloy. It took a few PRs and bug reports to get it to the point where I’m comfortable using it for my projects and recommending it. The repository is fairly active and the author regularly merges PRs. I suggest getting involved on Github if this is a tool that would be useful to you.

Configuration

All you need to get started with Gitlab CI is a Gitlab repo with a .gitlab-ci.yml file. Below is an example configuration for deploying a PHP project with PHPloy.

.gitlab-ci.yml

stages:
- deploy

deploy_to_production:
  image: php:5.6-cli
  stage: deploy
  environment: production
  before_script:
    - apt-get update -yqq
    - apt-get install git zip unzip curl wget openssh-client -yqq
    - mkdir -p ~/.ssh
    - echo "$PRIVATE_KEY" | tr -d '\r' > ~/.ssh/deploy_rsa
    - chmod 600 ~/.ssh/deploy_rsa
    - ssh-keyscan -p $PHPLOY_PORT -H "$PHPLOY_HOST" >> ~/.ssh/known_hosts
    - wget --quiet https://github.com/banago/PHPloy/archive/master.zip
    - unzip -qq master.zip
    - mv ./PHPloy-master/dist/phploy.phar phploy
  script:
    - php phploy -s production
  when: manual

This file creates one stage called deploy that is run manually when triggered from the Gitlab UI.

  • Uses a PHP5.6-cli image which matches our production environment. You can choose any docker image.
  • Installs dependencies needed for deployment.
  • Copies the private key needed for server authentication to the container and adds the destination server to known_hosts.
  • Downloads the latest version of PHPloy
  • Runs the production PHPloy configuration to deploy.

phploy.ini

; NOTE: If non-alphanumeric characters are present, enclose in value in quotes.
[production]
scheme = sftp
path = /home/site/public_html
privkey = '~/.ssh/deploy_rsa'
branch = master
exclude[] = '.env.example'
exclude[] = '.gitignore'
exclude[] = '.gitlab-ci.yml'
exclude[] = 'phploy.ini'
exclude[] = 'README.md'

This file:

  • Sets the scheme, you’re not limited to SFTP.
  • The remote server deployment path.
  • The private key file path.
  • The branch to deploy.
  • Files to exclude

For SSH deployments you can use pre and post deploy hooks to run commands to backup or flush cache on deploy.

The only other configuration you need is to define four environment variables in Gitlab: PHPLOY_HOST, PHPLOY_PORT, PHPLOY_USER, and PRIVATE_KEY and create an environment.

Gitlab PHPloy environment variables

For my example here, I created an environment named production which matches the environment in the .gitlab-ci.yml file.

Once this is configured, on your next push you should see a pipeline trigger in Gitlab and provide the option to run your deploy_to_production stage.

Gitlab Pipeline Deployment

What’s missing?

Some of the downsides:

  • This isn’t a generic deployment tool. It works best for PHP projects that use git.
  • No easy way to include untracked files. This is something I love with DeployBot’s Build Tools. Any new files created as part of the build process are deployed to your server, as long as they aren’t .gitignored. I’m still looking for a good option here.
  • It takes longer to set up than an off-the-shelf deployment tool.

Future plans:

  • Use composer to pull down PHP dependencies and WordPress plugins.
  • Determine how to include untracked files (like composer dependencies).
  • Run unit tests and build scripts on the container before deploying.

There’s still more I can do here and may in the future, but for most of my small projects this works great. How do you deploy your hobby projects?

Update: I’ve edited the .gitlab-ci.yml file to reflect the new location of the phploy phar file.

Sources: Pushing to Dokku from Gitlab CI

Flatland: A Romance of Many Dimensions

I recently bought the book: Flatland: A Romance of Many Dimensions1. While it wasn’t an enjoyable read, the main takeaway has started some pretty interesting conversations and for that I’m appreciative, as I’ll describe below.

Flatland was written by Edwin Abbot in 1884. It’s a short book, written from the perspective of a Square in Flatland, a two-dimensional “universe”. Flatland itself is an authoritarian world where any deviation from the norm or outside ideas are grounds for imprisonment or death. The book is commonly described as science fiction but it’s really more “mathematical fiction”. (If you haven’t stopped reading by now, I don’t know what’s wrong with you šŸ˜‰.) It’s partly satire on the Victorian social hierarchy, but the most interesting parts are the discussions of dimensions.

Specifically, the book describes Flatland (for more than half the book, as this is the social commentary part), but also describes Lineland (1 dimensional), Spaceland (3 dimensional) and Pointland (no dimensions). As the protagonist visits these separate places in dreams and in reality and attempts to enlighten them to the other worlds, they are steadfast in their belief that no other dimensions exist. The Square himself resisted and attacked the Sphere that had come from Spaceland until the Sphere lifted the Square out of Flatland and into Spaceland to see for himself. The attempt to convince the “King of Pointland” is especially humorous as the point does not believe it’s possible for anything outside of itself to exist, and therefore believes it’s talking to itself when speaking with the Square.

That all sounds a bit weird, but I promise there’s a point.

The book attempts to prove the existence of additional dimensions using a simple mathematical proof. That is, that the progression from a point, to a line, to a square, to a cube does not have to end. Simple arithmetic would tell you that the sequence continues. The premise of the book is that even if additional dimensions do exist, it is impossible for us to comprehend them. Even the Sphere, aware of all the other lands, is angered by the Square who, in his excitement, begins to imagine what other dimensions lie beyond Spaceland.

The main takeaway I got from the book is that you don’t know, what you don’t know, and you possibly couldn’t understand if it were explained to you. This isn’t especially profound, but it’s intriguing to me.

It’s interesting that this was written 30 years or so before Einstein and his theory of relativity and space/time. Learning that the author was a theologian makes sense as well. A similar argument–the inability to comprehend–can be made for the existence of God2. That trying to understand God may not be possible because we don’t have the mental capacity to do so. An impactful point regardless of how you feel about spirituality or religion. On one hand it’s comforting to know that you wouldn’t ever know the answer, but on the other hand, knowing that it’s possible for that answer to be out there, and that you’re not capable of understanding it is frustrating and challenging.

All that from a mathematical essay.


  1. There is also a 2007 movie starring Martin Sheen, Kristen Bell and Tony Hale
  2. Or aliens, or quantum particles or…anything we have trouble imagining. 

How to Find Good Coffee

Barista Parlor Golden Sound Cafe View

This is the first post in a series about how to get started appreciating good coffee and preparing it at home. Before you go out and buy equipment or spend a lot on coffee, the first step is to know what a good cup of coffee can taste like. Without experience and even with good equipment you’re not likely to get a good result at home and may get frustrated and quit. The best way to taste good coffee is from a professional barista.

Find a Good Cafe

This will be easier if you live in an urban or suburban area. There’s fantastic coffee in Seattle, Portland, New York and Los Angeles, but you can also find delicious coffee in Indianapolis, Arkansas and Wisconsin. It just may take a bit more searching and a little luck. It is important to find the right type of cafe. Going to Starbucks or your local diner1 and ordering a straight black coffee may be the end of this experiment for you. So don’t do that.

How Do You Know What Makes a Good Cafe?

Find a “third wave coffee” cafe in your area. It’s not an official term, and you won’t find that many shops calling themselves that, but it’s as close as we’re going to get. For lack of a better definition, third wave means “they care about how the coffee beans are grown, roasted and brewed.” Coffee farming is a very labor-intensive process, and most coffee farmers earn next to nothing for their hard work. Part of this “third wave” has been increasing the sustainability of coffee farming and paying fair wages to farmers, but that’s a topic for another post. Google “third wave coffee in ” and see what comes up. Whenever I travel to a new place, one of my favorite things to do is try new cafes, and this is exactly what I do. There’s usually at least one if you’re in a decent sized city2. Leave a comment with your city if you’re having trouble and I’d be happy to make a recommendation.

If you’ve found some options, next look through their menus and ask these questions:

Signs it may be a good shop to try:

  1. Do they roast their own beans? Awesome, they may be a great place to try assuming they roast light3 and provide information on the region the beans are from4. You are in luck because a good local roaster is hard to beat.
  2. If not, do they use beans from a well known third wave roaster? This is a good list to start
  3. Their menu is primarily focused on the basics, espresso, americano, cappuccino, and filter coffee. You want to start with filter coffee, but it’s good to know that they know their basics.

Signs you may want to stay away:

  1. The menu is light on the basics in favor of things like raspberry banana mocha and dreamsicle latte.
  2. “We proudly brew Starbucks coffee.”
  3. Your barista can’t answer any questions about the coffee they are serving.

If you really have no options for good cafes in your area, try finding a friend who enjoys good coffee and ask them to make you a cup.

Barista Parlor's menu

A great example of a good (albeit hard to understand) menu

Taste Their Filter Coffee, Black

Once you’ve found a good cafe, go in and order a black coffee to stay. A paper cup is going to be a different experience than a hot mug. Drip is fine but go for a pour over if you feel like it, just don’t get too fancy. Pour over is a general term for any one of many manual brew methods. It will be more expensive, but likely tastier. It could also be terrible, depending on the cafe, so drip is a safer choice to start. If they can tell you the tasting notes for the coffee (they should) just go for something that you would like. Do not put cream and sugar in it! I am not going to lecture you on putting cream and sugar in your coffee, as much as I’d like to. However, it will defeat the purpose of learning to enjoy good coffee as you will taste the cream and the sugar, and we’re not trying to learn how to make dessert.

Drink it black.

Don’t just slam it back either. Let it cool slightly, and really focus on tasting the coffee. Try and pick out what flavors you taste. Most likely you’ll say “it tastes like coffee” and that’s fine. You may hate it. That’s OK too. It’s just one cup, and it’s possible this specific choice just wasn’t the coffee for you.

Repeat

Whether you liked it or not, try another coffee there and at another cafe, if possible. Go with a friend and you can each get a different coffee to try and share. If you continue to strike out it may be that coffee really isn’t your thing, and that’s fine but now you know.

It is an acquired taste. Just like wine, or whiskey or beer, each coffee has its own unique taste. Think of your cafe trip like a wine tasting. No one is visiting a vineyard with tiny bottle of hazelnut creamer up their sleeve and pouring it into their cabernet. You are there to taste the unique aspects of this coffee. And though you may not recognize it at first, your coffee does have unique aspects, you just need to train your palate to recognize them.

If you did enjoy it, now you’ve had a taste for what good coffee can be. Keep exploring different types of coffee and preparation methods and find which ones you prefer. Knowing what kinds of coffee you like will make good coffee prep at home much easier.

I do have to warn you though, once you’ve had really great coffee, it’s very hard to go back to an inferior version. This may happen to you, and you may never be able to drink gas station coffee, or the dirty brown water in your office breakroom again. This really is OK though, because my recommended approach to learning to make coffee is very portable and you can make it nearly anywhere. If you’d like get into coffee drinking, training your palate is the most important step, because it is how you will determine if you are making the right choices in your coffee preparation. That’s when it really starts to get fun and you find out which coffees you really enjoy. So even if you’re “ruined” forever by good coffee, you now have a whole world of coffee to explore.

Stay tuned for upcoming posts on how to taste and evaluate coffee and how to get started making great coffee at home.


  1. There’s something to be said about a friendly neighborhood cafe and its community aspects, but the goal here is to find high quality coffee, not community (that can come later!). 
  2. Foursquare has taken to listing the best places for third wave coffee in different cities, and the lists usually include Starbucks and Peet’s so beware the recommendations. 
  3. By roasting lighter, you can taste more of the inherent flavor of the beans, rather than the roasty burnt flavor you’re used to. 
  4. This may not seem important, but it shows that they likely know what they are doing when they can list the country, producer, altitude or harvest season on the bag. 

2016: Year In Review

I’ve tried for 5 years now to write a “year in review” post and failed every year.

For some reason, this year is different. I began my annual review post in early November. I’ve always been envious of those who can link back to their annual reviews and have this great body of content to look back on. Hopefully this is the first in a long line of them.

The two primary takeaways from this year for me: the importance of health (mental and physical) and the importance of having hard conversations.

I had more hard conversations this year (personally and professionally) than I ever have. I am generally one to shy away from conflict, or to continue to politely trudge through a bad situation to avoid hurting someone else’s feelings. While I can’t say that I have completely conquered that, I finally was able to have these conversations and 2017 is looking brighter for me just due to that. A tough conversation may not kill you, but avoiding it will.

On the health front, I had an overall really good year. Around July, I just decided one day to start listening to my wife (a personal trainer, and all-around healthy person). I’m not sure why it took so long or why this year was different, but something clicked in my mindset about healthy eating and exercise that really worked. I went 60 days straight logging my calories in MyFitnessPal, exercising 2-4 times per week and lost 10 pounds. I’m still looking to lose 10 or so, but it’s not my primary goal.

Being active and feeling better when I eat healthier are the primary goals and benefits of living this way. It’s easiest when it’s warm out, as we’ll take a 3 mile walk with the kids almost every day after work. Since I can sometimes go days without going outside while working from home, I call it my “time in the yard”. It’s great for our relationship and mental health as we walk and talk for 45 minutes. Usually by the end of the walk we’ve destressed and are heading home happy. I did lose a bit of momentum over the holidays and have already started bringing it back here in the new year. I benefit greatly by having Care do our meal planning because pretty much everything we eat is healthy, I just have to keep portions in mind and have some activity and I’m good. This year is going to be focused on increased activity as that makes the food portion much easier to handle.

On the mental health front, I had a bit of breakthrough year. I’ve always been very susceptible to stress. I made some changes this year, including reducing stressors, starting meditation (with the Calm app) and just generally chilling out. I find that throughout the day conversations and notifications and tasks and emails will pile up and if I don’t take a break I end the day with my head spinning, grinding my teeth and tight all over. Working from home helps here as I can sit on the floor and meditate for 10 minutes and then go back to what I was doing with a clear head, or walk outside for 5 minutes and close my eyes just to get a grip. In the past I would continue to power through and end up losing productivity as my stress increased throughout the day, but these breaks, and practicing meditation have really helped.

I spent more time learning new things and reading this year than any year (from what I can tell, maybe even more than the 18 months I spent traveling the world without a job). Part of the reason I had success with this is because I let go of doing it perfectly. I let go of perfectionism, at least in this part of my life. I have to laugh about it now, but there are technical books I would read until it got to the examples and then I would put down the book and give up because I “wasn’t at my computer right now” so I couldn’t do it.

I also would painstakingly read things that I was interested in to ensure that I fully understood them. But that’s not how I learn best. I’m not guaranteed to remember everything perfectly the first time I read it. Nor is there really that much benefit in copying in examples and running them. Sure I may get some muscle memory, but without me thinking about what I’m doing, I’m not really learning the concept behind it.

That doesn’t come until I try to use it for real in a project. My goals are not to know everything about a topic, but to know where to look when I need to dive in. A cursory introduction and outline is better than me wasting time trying to understand minute details of things I may not need to know yet. I was never going to get through everything or learn what I wanted this way, so something had to give. I started speed reading and skimming. Most of the stuff I wasted so much time on was fluff that wasn’t important. What was important was scanning and getting an overview of things. I have always been so scared of not getting everything the first time and having to go back and reread things. I still don’t understand why, but I have hopefully gotten over that now.

Instead, I am reading quickly, and scanning and picking out the major concepts. Most of the time, I’m finding that I’m not missing anything, and that I can quickly get the gist, but also I’m doing this so I can know where to find something. I don’t need to understand it all the first time. And that has made all the difference. I am devouring learning material and it’s been helping me build my skills at a much faster rate. I have a very unrealistic, very large reading list. And try as I might, I have a very hard time removing things. I just want to read it all, so any way to make that go faster helps.

This year, when I found out Pinterest had bought Instapaper I figured I should look at clearing everything out of that service. I wanted to know how many articles I really had to read because I knew I had many more than the 500 limit that the app and API had. The search has always been terrible for organizing, so I threw together a tiny Laravel app that would let me quickly see the URL and title of my bookmarks and archive/delete/sort them into folders. I wrote some scripts that would organize the articles into folders in bulk so that I could get a full count. 3,000 articles to read. This is on top of a massive “to read” bookmarks folder in Chrome, a shelf full of unread dead tree books, a backlog of unread magazines from 2013, a kindle account full of unread books and a Dropbox folder with over 100 unread ebooks.

(I have a book problem)

On top of all that I would love to start reading fiction again! Let’s just laugh and move on.

Family-wise, our Henry boy was born this year. He scared us with a short NICU stay, but is now in the clear and he is champion baby #2 all the way! It was really hard for us to imagine what a second kid would be like, since Lottie was such a (world) champion baby šŸ˜‚. Henry has just surprised us constantly and having one of each has been really fun. What I have realized though, is that my goals and ambitions don’t stand a chance against the fatigue of the parent of a newborn. It felt like a down year on producing things and just having my shit together. I could barely get myself outside to mow the lawn and pull weeds (and it showed). Both of us are just exhausted, even 8 months in, as he’s not consistently sleeping through the night. Something I should consider if we do have more kids is to plan ahead for a light year when they’re born.

It’s always hard to find time together when you have young kids and we are no exception, until recently we hadn’t yet gone out on a date just the two of us since Henry was born. So in the last two weeks we’ve gone out on two dates, overnight without the kids, and it has been so great to reconnect and have a little bit of time away. We’ve worked this into our goals for this year to ensure we get some time together away from the kids.

I used to work weekends and would work late into the night. Even when we had our first baby I was still doing this. I have been making an effort to walk out of my office at 5pm and never work on weekends or holidays. This lets me give Care a break and also spend some quality time with the kids before I put them to bed. I can always go back to work later, but I can’t see the kids after they’re asleep.

At Reaktiv, we had a bit of a slow start to the year, which resulted in us losing some great engineering candidates but we rallied the rest of the year to land some fun new clients and hire some great engineers. I spoke at WordCamp Boston about our work on the HBS Open Knowledge platform. I’m excited that we’re growing the team and looking forward to what 2017 brings for us. We’re about to release an open source project we’ve been working on for awhile, and also, we’re hiring.

I have a book/course idea I’ve been toying with for WordPress developers and while I began work on it last year, I ended up shelving it for a bit to focus on agency work but this is something I really want to work on this year and have set a goal to launch it by July.

World events aside, 2016 was an exhausting but transformative year. I feel a bit like it chewed me up and spit me out but I’m now better prepared to face the future. I’m looking forward to new opportunities and experiences, personally and professionally in 2017.