Dockerizing a PHP Application

Introduction In this tutorial, you will learn what Docker is and how you can use it to create sophisticated working environments. We’ll learn how to: Install Docker Run Docker images Create customer images to run programs Use Docker Compose to set up a dev environment Run our application in Heroku Test our application with Continuous Integration (CI) Deploy our application with Continous Deployment (CD) To practice, we will start from…

Maker to Manager: Interview with Director of Engineering at Dribbble

In the Developer Interview series, we talk to engineers who use Semaphore and pick their brains about how they work, what wisdom they would like to pass on, and the most challenging problems they’ve faced during developing. This month, we had a chat with Jeffrey Chupp, the Director of Engineering at Dribbble.

Continuous Delivery Patterns with Serverless Applications

Adoption of serverless technology is surely growing, with emerging product companies who built on top of it. One of them is CloudZero, a Semaphore customer, who recently wrote a detailed article about their experience in achieving continuous delivery for their all-serverless system.

Rails Testing Handbook: A Free Ebook to Help You Build Better Apps

Bugs and messy code slow down development, and can make complex projects fail. We write code with good intentions, but in practice as complexity increases we need a system to help us avoid problems. This is where BDD (Behavior-driven Development) can make a huge difference: it provides us with a sustainable process for continuously producing high-quality software, with clean code and automated tests as a side effect.

What’s the Difference Between Continuous Integration, Continuous Deployment and Continuous Delivery?

View diagram in full screen Continuous integration, continuous deployment, and continuous delivery are like vectors that have the same direction, but different magnitude. Their goal is the same: make our software development and release process faster and more robust. The key difference between the three is in the scope of automation applied. What gets people who are new to the field confused is that they are not mutually exclusive, but…

The Cracking Monolith: The Forces That Call for Microservices

The microservice architecture has recently been gaining traction, with many companies sharing their positive experiences with applying it. The early adopters have been tech behemoths such as Amazon and Netflix, or companies with huge user bases like SoundCloud. Based on the profiles of these companies and the assumption that there’s more complexity to running and deploying many things than to deploying a single application, many people understand microservices as an…

Faster Rails: How to Check if a Record Exists

Ruby and Rails are slow — this argument is often used to downplay the worth of the language and the framework. This statement in itself is not false. Generally speaking, Ruby is slower than its direct competitors such as Node.js and Python. Yet, many businesses from small startups to platforms with millions of users use it as the backbone of their operations. How can we explain these contradictions?

What is Proper Continuous Integration?

Continuous integration (CI) is confusing. As with all ideas, everybody does their own version of it in practice. CI is a solution to the problems we face while writing, testing and delivering software to end users. Its core promise is reliability.

Lightweight Docker Images in 5 Steps

Lightweight Docker Images Speed Up Deployment Deploying your services packaged in lightweight Docker images has many practical benefits. In a container, your service usually comes with all the dependencies it needs to run, it’s isolated from the rest of the system, and deployment is as simple as running a docker run command on the target system.

Dockerizing a Python Django Web Application

Introduction This article will cover building a simple ‘Hello World’-style web application written in Django and running it in the much talked about and discussed Docker. Docker takes all the great aspects of a traditional virtual machine, e.g. a self contained system isolated from your development machine, and removes many of the drawbacks such as system resource drain, setup time, and maintenance. When building web applications, you have probably reached…

Building Go Web Applications and Microservices Using Gin

Introduction In this tutorial, you will learn how to build traditional web applications and microservices in Go using the Gin framework. Gin is a framework which reduces boilerplate code that would normally go into building these applications. It also lends itself very well to creating reusable and extensible pieces of code. This part of the tutorial will help you set up your project and build a simple application using Gin…

How to Deal With and Eliminate Flaky Tests

Introduction An essential property of an automated test and the entire test suite is its determinism. This means that a test should always have the same result when the tested code doesn’t change. A test that fails randomly is commonly called a flaky test. Flaky tests hinder your development experience, slow down progress, hide real bugs and, in the end, cost money. It makes sense to invest time in keeping…