Blog


Feb

New Office - Renovations Needed


We recently announced that we'll be moving to a new office later this year. There's lots to do before we can move though, and in this post we'll talk about the current state of the office building, and some of our plans for it.

Pairing room from hallway

What really made us fall in love with the office space, in addition to its history, was all the old details. The building was constructed mid-19th century, and a lot of the original interior is still there.

We feel that the classical elegance and attention to detail really reflects our craftsmanship ideals that we strive to uphold when we develop software. It's a very inspiring environment. The old wooden paneling is classified as historically significant and must be preserved. It really makes the office something out of the ordinary.

Conference room and hallway

The office hasn't been used in quite some time, and needs to be renovated. New flooring and carpeting will be put in, windows will get noise insulation, walls and ceilings will be repainted and some glass partitions will be installed.

The fun part about the renovation is that we really get to tailor the office space to our needs and our style. We're working with a friend of ours, Jesper Larsson, to make this a great environment that we will enjoy working in.

Check out the "before" photos, and come back soon for more info here on our blog.

Jan

Our New Office


Back at the office and looking forward to the year of 2011. One exciting thing happening this year is that we're moving to a new office in Gothenburg.

We have been looking for something new for a year. Since Elabs started two years ago we’ve been renting space at Edithouse, which has been great. But we need more room and we want something of our own. Something that reflects the kind of company we are. An office out of the ordinary.

We need a spacious place with room for the developers to pair program undisturbed. A creative environment for our designers. Room for our customers when they come and work with us and for the developers in our Stockholm office when they are visiting Gothenburg. We also need a space to hang out and finally have a real ping pong table.

Now we've found it.

The building is called The Hasselblad House and was built by Victor Hasselblad's grandfather in 1875. Victor Hasselblad is famous for his camera inventions. Neil Armstrong and Buzz Aldrin used a camera from Hasselblad to shoot photos from their landing on the moon and Lennart Nilsson used Hasselblad's cameras to take his amazing photos inside the human body.

Hasselblad had their headquarters in this building for over 100 years. It was also used as a residence for the Hasselblad family. In 2003 Hasselblad moved to a new building. Now most of the house has been carefully renovated and converted into apartments. There are two office spaces in the ground floor, and one of them will be ours.

Right now we're working with our architects and designers, planning the renovations. We'll have more to share about that shortly. Then it's a long wait until June, when we move across the street to this building:

The Hasselblad House

Dec

The Year 2010 - A Summary


Today is the last day before the Christmas holiday. We’ll be back January the 3rd and share some exciting news with you, but for now; a quick retrospective of a fantastic year!

One of our favourite events of the year was the inaugural Nordic Ruby. We had a great time and it was fantastic to have so many people here. Hopefully we’ll se you all again at Nordic Ruby 2011.

Another big happening was the startup of our Stockholm office where Ingemar and Dennis are located. Hopefully they will get some company next year. Our team in Gothenburg grew as well, with the addition of Johannes and Nicklas at the beginning of 2010 and then Antony as well. This means we have doubled our team from 5 to 10!

In March we had a company trip to Scotland where we focused on our coming products. Serenity will be the first out, a simple scheduling app for project planning. It's currently being beta tested and we're aiming for a launch in the beginning of next year. We’ve also developed our first iPhone app, for one of Sweden biggest banks, SEB. Great fun, and we hope we’ll do more of that during 2011.

Merry Christmas and a Happy New Year!

Best wishes from

CJ, Lilly, Jonas, Jimmy, Johannes, Antony, Anders and Nicklas in Gothenburg

Ingemar and Dennis in Stockholm

Elabs

Dec

Nordic Ruby 2011 — The Half & Half Conference


The planning for Nordic Ruby 2011 is in full progress. If you are interested in sponsoring, please take a look at the sponsorship prospectus on the site; http://nordicruby.org.

Last year was a great success with a hundred attendees from Sweden, other Nordic and European countries and the USA.

We will continue with the much appreciated concept of 30 minute talks and 30 minute breaks, a half and half conference. This gives you a great opportunity to meet and socialise with a lot of people in the community from all around the world. There will off course be great speakers as well!

We can already announce Chad Fowler as a speaker! Chad Fowler is program chair for RubyConf and RailsConf, and author of The Passionate Programmer. We are very glad to have him.

The conference will be held at the same great venue as last year. The dinner party will be held at a new place and we’ll have some other new details. More information in the future.

You can download the wrap from Nordic Ruby 2010 on the website and also look at the sponsorship prospectus. The full site for Nordic Ruby 2011 will be launched at the end of January.

June 16th - 18th, save the date for Nordic Ruby 2011 in Gothenburg, Sweden. (The conference days are on Friday and Saturday).

Please contact us at info@nordicruby.org if you are interested in sponsoring the event.

Dec

Scopes Are Obsolete


I admit, I've never been a big fan of named_scope or just scope as it's been renamed in Rails 3. When it was first introduced I remember not being particularly impressed, as a Merb acolyte we'd had this chaining functionality in Datamapper for ages, only it was much better. In fact in Datamapper, every query you could construct was chainable. Thankfully in Rails 3 and ActiveRecord 3, queries have finally grown up so that everything is now chainable in ActiveRecord too:

class Person < ActiveRecord::Base
  def self.alphabetically
    order(:first_name, :last_name)
  end

  def self.active
    where(:archived_at => nil)
  end
end

Person.active # => [...]
Person.alphabetically.active # => [...]

In this case it seems like the scope method will give us much nicer more concise syntax:

class Person < ActiveRecord::Base
  scope :alphabetically, order(:first_name, :last_name)
  scope :active, where(:archived_at => nil)
end

But imagine if we want to add a new kind of scope to find user's with a given last name:

scope :by_last_name, lambda { |name| where(:last_name => name) }

It's getting a bit less nice, aside from the gratuitous lambda, it's still pretty okay though.

What I believe is wrong with this code though is that it is essentially recreating Ruby functionality. We're defining a method called by_last_name which will execute some code when called, only we're doing it through meta-programming for essentially no reason at all. The above could have been written as:

def self.by_last_name(name); where(:last_name => name); end

And it would have worked exactly the same. The only difference that I can tell is that scope allows you to define extension methods by passing a block, which I'm sure no one has ever used, since it's so completely useless.

The problem becomes even more striking when the code is even the slightest bit complicated.

scope :for_user, lambda { |user|
  if user.admin?
    where(:active => true)
  else
    where(:active => true, :user_id => user.id)
  end
}

That's just horrible.

def self.for_user(user)
  if user.admin?
    where(:active => true)
  else
    where(:active => true, :user_id => user.id)
  end
end

This looks much more like Ruby code and less like some kind of weird JavaScript concoction.

Stop replicating functionality that already exists, stop using scope. It is obsolete.