During the past year at work, we did a complete rewrite of our websites from scratch. Not only did we aim to build a mobile-first responsive website with high performance, we also tried to do it with continuous integration and continuous delivery in mind. All that on a proprietary platform not built with CI in mind. This was a very big challenge, which involved a culture change in a lot of people. Unfortunately, the project had a hard deadline. Things were left out. Corners were cut.
Taking a backup was arguably easier back in the days. You had only one computer, your data could fit inside a few floppy disks and the only cloud in your life was the one that would indicate chances of rain later in the afternoon. Things are a bit different today. Nevertheless, the need to preserve your files, your work, and your digital memories, remains the same.
I spent the previous week migrating some old code I had laying around into GitHub. More specifically, I had a single git repository named “Legacy” that contained all sorts of projects and demos I had created over the years. It’s difficult to find exact dates but I found a few that go as back as 1998, so I can justify the title of this blog post.
This post shows how to create a simple web application with maven. I have the relevant commits as well in GitHub for reference, in case you want to see in more details.
I have a small mini PC at home that is always turned on. It runs Ubuntu 14.04 (I plan to upgrade to 16.04). It sits at the living room and it doesn’t make any noise, so it acts as a media server. I watch movies and TV series from there. I used 3 external disks, 2TB each, to make a ZFS raidz1 pool of 4TB. What is ZFS you ask? Continue reading Thinning ZFS snapshots
When you are the maintainer of an npm package, you need to do some administrative work around its versioning. When you release a new version, you need to make sure the package.json is updated, the package is correctly uploaded to npm registry, the git repository is tagged accordingly and so on. You shouldn’t be doing these things manually if you can automate them. Continue reading Automatic versioning of npm packages
In the previous series of posts, we had a look at functional testing with WebDriverIO and mocha. We explored the page object pattern and saw the challenges of asynchronous programming with promises. We even saw some ways of mitigating those challenges. However, there is another approach to the same problems. Instead of running our tests with mocha, we can run them using the integrated test runner of WebDriverIO.
Continue reading Functional Testing – WebDriverIO Integrated Test Runner
In the previous post, we explored the Page Object pattern and rewrote our tests to use this technique. Sometimes, it can be that the tests appear to be a bit verbose due to the usage of promises. Additionally, promises and asynchronous programming in general can be somewhat confusing to developers. Let’s see some ways of making the tests shorter and easier to read.
So far, we’ve seen how to write functional tests using the WebDriverIO API directly. Let’s see what problems we may encounter with that and how the page object pattern comes to rescue.
Continue reading Functional Testing – Page Object Pattern
In the previous post, we wrote some functional tests and we encountered our first failing test. Let’s see how we can go about investigating these failures, both on a developer machine and during continuous integration. Continue reading Functional Testing – Dealing with failed tests