Posts by Ian Buchanan

Do you have a problem in your Git history where the same person appears with different usernames or emails? Check out the Git way to solve the problem.

A lot of news came out of AtlasCamp 2016. I was especially proud of the story about TestFairy's end-to-end integration. I helped TestFairy build the connections between JIRA, HipChat, Bitbucket, Bamboo, and Bitbucket Pipelines to their service for mobile beta testing. I hope to see other integrations follow TestFairy's lead and hyperlink to source code in Bitbucket. Read on to learn how.

OAuth brings added API security but it is often confusing to interpret the specification in light of a real server, while trying to figure out a new client library. Here is a quick-start guide for Python that cuts through that confusion about Bitbucket Server with a working example.

Semantic versioning (semver) is a scheme for version numbers. It also specifies how changes in version numbers should convey meaning about the underlying code and what has been modified from one version to the next. As useful as that is many developers are unaware that semver can be easy to maintain with the right tools.

Do you write a lot of command-line tools? I've written them in C, Java, C#, Ruby, and most recently Python. I looked at the standard `argparse` library in Python. But here I was learning yet-another-argument-parser-library. After a little research, I discovered docopt works in many languages. Here's why docopt has become my favorite tool for argument parsing.

Have you heard about ChatOps? I had the pleasure of hosting a panel discussion on ChatOps during Atlassian Summit 2015. To learn from real-world examples, I interviewed Stevan Arychuk from New Relic, David Hayes from PagerDuty, and Raymond Chan from Twitter. The discussion covered how ChatOps grew up in the 3 organizations, the benefits and costs, and thoughts about the future of ChatOps. Read on for my summary observations from the panel.

Seven years ago at Agile 2008, Patrick Debois and Andrew Shafer were the only people interested in Agile Infrastructure. This year at Agile 2015, DevOps is a full-fledged track. Just like conference tracks, many teams concurrently pursue the perceived benefits of Agile and DevOps. Unfortunately, they often do so without building a shared understanding of the journey ahead. The Agile Fluency model has already been useful to help align team and business expectations. What can we apply those ideas to help the DevOps cultural movement avoid the same missteps?

While I prefer Sublime Text, my colleague, Nicola, prefers Vim. While we both have Macs, I sometimes work on my Windows desktop. Sharing work across these environments sometimes creates a whitespace conflict. Nicola's Vim put tabs to indent in shell script, instead of spaces. Or my Sublime Text on Windows put extra control characters at the end every line of Python. And, unless you are programming with whitespace, then you probably know how painful this can be. Fortunately, there are a couple tools you can use to avoid the most common whitespace problems.

If you work for a big company, you know all the big ALM tools. Fortunately, the experience fills out a résumé nicely. Unfortunately, you have to deal with all of them at the same time. I've seen it happen for any number of reasons: outsourcing, acquisitions, restructuring. Whatever the history, the variety of tools can cause communication silos. According to Melvin Conway, those silos doom the software you produce to be siloed. If you thought the only alternative was a lot of custom development using a hodge-podge of languages and protocols, then you may have missed a new generation of middleware designed specifically for ALM integration.

Deployment doesn't get any simpler than just getting the latest versions of some files up to the production server. While rsync, sftp, and scp have long been the tools of the trade for such simple deployments, these approaches have their warts. Even if it is easy to recover, an remote copy that fails in the middle may leave a web site in an incoherent state. If you are already using Git to manage the files as source code, then you may benefit from using Git's native ability to distribute versions of files. While this idea isn't all that new, there is a new feature of Git that makes this much easier than in past. Read on to learn when Git-based deployments are appropriate and how you can use Git to deploy files.

When centralized version control systems were state-of-the-art, it made sense for agile thought-leaders to promote storing project dependencies in a code repository as pre-requisite to continuous integration. The goal was to version every configuration element, including external libraries, and to make sure every developer can easily obtain everything necessary to build. While those goals remain relevant, it is also important to keep current with downstream changes from third-party libraries. Since the early days of continuous integration, new dependency management tools have become popular to keep up with changes in third-party libraries, making integration even more continuous. If you are still committing libraries to your version control system, it is time to make dependency management tools an integral part of your continuous integration practice.