Castles, canals and coffee: my first week as a FreeAgent data science intern
My regular job is as a PhD student specialising in veterinary biology but this summer I have an amazing opportunity to be a data science intern at FreeAgent. If you are wondering why a biologist came to work at an accountancy software company, this is because of the particular branch of biology that I study: ‘epidemiology’. An epidemiologist typically uses data to understand ‘the distribution and determinants of health-related states… Continue reading
Rails migration aliases with fzf
Ever find yourself re-running Rails migrations? Up, down, redo-ing etc. Have you forgotten that long VERSION number again? Or what the migration actually migrates? These handy aliases just might be for you. I've been running individual migrations a lot recently, so I took some time to set up these aliases with fzf (a command-line fuzzy finder). rdbm # bundle exec rake db:migrate (no auto-completion) rdbmu # bundle exec rake db:migrate:up… Continue reading
Remote Desks (Revisited!)
Back in 2015 we joined in with an internet custom by posting pictures of our desks in all their glorious variety. Now that it's 2018, National Work from Home Day and a few years since that post, a followup is in order. Some folks have moved, others have joined and we don't often get to look at one another's desks—usually we get to see what's behind them on video calls!… Continue reading
We're hiring! Check out our vacancies 👈
Ruby 2.5: How’s That Backtrace looking?
It’s Christmas night, the air is cool and the stars are unseen through the heavy cloud. Children have left tablet and a nip of whisky out for Santa, and carrots out for the reindeer. One of the children wakes up! Rushing out of bed, she heads to the living room, curious to see if she can catch Santa and reindeer in the act of present delivery. When she gets there,… Continue reading
Ruby 2.5: Not Blocking My Rescue
Rescuing specific exceptions excessively can cause problems, but if you've ever had need to rescue within a do/end block, you might have found yourself using wordy syntax. Ruby 2.5 has a solution for you. In Ruby 2.5, we’ll get a little syntactic sugar for handling exceptions inside do/end blocks. You can see the feature discussion on Ruby’s Redmine instance. If you’ve ever used the shorthand for rescuing inside a method… Continue reading
Ruby 2.5: yield_self
yield_self is coming to Ruby 2.5. What is this long requested feature, and how does it work? Some features take a while to get into a Ruby release. As you can see from the original request on Ruby’s Redmine issue tracker, yield_self has been brewing for 5 years. It has been waiting on a good name, and the Ruby team has settled on one. But what is it? To understand… Continue reading
Ruby 2.5: The Christmas Present
Let's talk a wee bit about Ruby 2.5. This starts a week of looking at upcoming features in the language. Here at FreeAgent Towers, we use a lot of Ruby. The application itself is written in Rails, and our website is static HTML, CSS and JS, but is generated with Middleman. We love it, and so we follow its development closely. One of the exciting points in the Ruby year… Continue reading
FreeAgent Testermonials: Getting rid of ‘QA’ and why what we call things matters
In this Testermonial post, FreeAgent's resident test engineer describes why we've rebranded 'QA' and why what we call things matters. As mentioned in my previous Testermonial, my only gripe when starting at FreeAgent — and a very minor one at that — was the rather entrenched use of the term quality assurance or QA in the development and release process to describe the pre-release testing phase which occurs before deploying… Continue reading
External authentication scripts in OpenVPN the right way
OpenVPN is a wonderfully flexible piece of software in anyone's toolkit, but recently we found a sharp edge that wasn't the most obvious thing to work around. After spinning up a new VPN server we wanted to add username/password authentication against an external source. Looking at the OpenVPN documentation, the --auth-user-pass-verify <script> flag provides this functionality. Writing the script for this was easy enough — read the credentials from a… Continue reading
Running a high-availability SaaS infrastructure without breaking the bank
The cloud is commoditising web application hosting but at FreeAgent we continue to build and manage our own infrastructure, using hand-picked servers, switches and elbow grease. Why we do this is a question I commonly get asked. In this article I'll share our hosting history, how it has evolved over the last ten years, and how we now operate a high-availability SaaS infrastructure on our own hardware without breaking the… Continue reading