Babbel Bytes

Insights from the Babbel engineering team

The 2nd Babbel Hackday - our review

Ray

Hack days, hackathons or hackfests are done frequently in IT-companies to bring together engineers, designers and product owners in a playful spirit. The second Babbel Hackday took place on October 24th, 2014 at St. Oberholz – a typical Berlin-Mitte bar we thought…

2nd Babbel Hackday


Continue reading…

MicroXchg 2015 recap

André

Last week, a lot of Babbel developers attended MicroXchg, the Microservices Conference here in Berlin.

The conference itself was really well-organized. Like really, really well. The speakers were very good, the schedule was audience-friendly (lots of longish breaks to socialize, eat and drink), and the talks were balanced between enthusiastic and down-to-earth.

This post summarizes our impressions and the learnings we returned with.


Continue reading…

Functional Programming - A Gentle Introduction

Bruno

Wikipedia defines Functional Programming as:

A programming paradigm that treats computation as the evaluation of mathematical functions.

If this sounds like Mathematical mumbo-jumbo that is completely removed of your day-to-day work as a Software Engineer, then you’re not alone. More than anything, Functional Programming is a way of thinking about building software in a perhaps very different paradigm than we’re normally used to. Let’s break down what are the core building blocks of a Functional Language and see how they can help us deliver better, more maintainable and robust software that you’ll actually have fun writing.

functional programming


Continue reading…

TechStartupJobs Fair Berlin 2014

Babbel Bytes

Babbel at Techstartup-Jobfair May 2014

We are ramping up our team of currently 30 engineers in all areas (see current job openings).

You can also visit us at TechStartupJobs Fair Berlin on 20.11.2014.

My 12 weeks in Babbel’s Backend Service Team

Omosola

Omosola and Team

As my internship comes to a close (only two days left!), it seems like a great time to reflect on the past twelve weeks of my life here with Babbel.

I have to say that twelve weeks ago, I had literally no idea what to expect (and yes, I understand that’s the popular incorrect American use of “literally” :) I didn’t know all that much about the company. I just knew that I was ridiculously excited to return to Berlin for the summer.


Continue reading…

JavaScript Function call interception

Tim

Function call interception allows us to execute code before and after a function call. A use case might be formatting before and logging after a certain operation. A simple implementation in JavaScript could look like this:

// http://jsbin.com/govubetamoli/5/watch?js,console

var myObj = {
  property: 1,
  sendTo: function (endpoint) {
    console.log('sending ' + this.property + ' to ' + endpoint);
  }
};

function format () {
  console.log('formatting ' + this.property);
}

function log () {
    console.log('logging ' + this.property);
}

before(myObj, 'sendTo', format);
after(myObj, 'sendTo', log);

myObj.sendTo('backend');

function before (object, method, fn) {
  var originalMethod = object[method];
  object[method] = function () {
    fn.apply(object);
    originalMethod.apply(object, arguments);
  };
}

function after (object, method, fn) {
  var originalMethod = object[method];
  object[method] = function () {
    originalMethod.apply(object, arguments);
    fn.call(object);
  };
}

This technique, also called function wrapping, is used by sinon.js to create spies, stubs and mocks.

Building external URLs for a Rails application

Jahn

When referring to URLs there are valid reasons for avoiding hard-coded string manipulation in models, controllers or views. One reason is the DRY principle. Having a central representation of a resource eliminates the need to adjust all depending URLs when a change becomes necessary.

The Rails router generates helper methods for paths and URLs for exactly this reason. Suppose we define a route for a patients resource as follows.

get '/patients/:id', to: 'patients#show', as: 'patient'

Then, for a given Patient with id 17 initialized in the controller, we can call the following path or url helpers in a view.

patient_path(@patient)   # /patients/17

patient_url(@patient)    # http://www.example-app.com/patients/17

Using the Rails path and url helpers is a common best practice. However, there is no clear best practice for building external URLs, i.e. URLs not belonging to the application.

In this post we suggest using URI Templates with the Addressable gem for building external URLs and we outline an example implementation.


Continue reading…