Archive for the 'Uncategorized' Category

Ever wondered how Doodle works?

September 29, 2014

Have you ever wondered how the red and the green boxes are getting from your friends to you? The engineers at Doodle work hard each day to keep this process as easy and straightforward as it always has been.

It is very important to us that every person all over the globe is able to use Doodle to make scheduling possible between all kinds of people. This is why we support all major browsers (IE8+). Mobile devices are covered by native Apps (Android & iOS) or our mobile web version for other smartphones.

fe-words

But what exactly is happening under the hood?

When a page is requested by a browser, our servers are serving a skeleton HTML page using JSF. This page includes some basic HTML, JSON data, templates and an initial JavaScript AMD module.

This module is the starting point for everything you see on Doodle. It loads all its dependencies with the help of RequireJS, reads the provided JSON data and finally renders the data with the Mustache template engine. To give Doodle a modern face we use the famous Bootstrap3 framework and customize it with SCSS. Since HD screens become common we are building Doodle to become Retina-ready.

At this point it’s on you – the Doodle scripts are loaded in your browser and now await your input; be it creating a poll, participating in one, or adding a comment. Most of these actions do not need the page to be reloaded, since our client handles your input and actions immediately and communicates asynchronously with our servers in the background using a RESTful API that is provided by the Java Jersey framework implementing JAX-RS. The responses of the server can be handled again by the JavaScript and give you immediate feedback using jQuery to handle the DOM easily.

To offer the huge variety of all our features we use the following third-party-libraries: FullCalendar to show you the polls within context of your personal calendar. Feature detection (legacy support) with Modernizr. Fancy Input elements with ChosenJS and Select2.

How your Doodle polls are stored and how the infrastructure looks like has been explained by this Blogpost; so this post will focus on the frontend part of the web app.

Doodle will focus on its core product

August 6, 2014

About two years ago Doodle successfully launched and established BookMe as a professional appointment booking service.

Today we are announcing that BookMe will be discontinued. Doodle will focus on its core product, the worlds largest and most successful tool for scheduling group events with over 20 million users.

For BookMe users this means that BookMe will only be available until October 31st. Afterwards, the BookMe page will be deactivated. However, there are many great other scheduling products out there that focus specifically on your business requirements.

In order to give you enough time to find a replacement for BookMe we will keep offering BookMe until October 31st 2014 – for free. As of today existing users will not be charged for BookMe anymore.

Do not hesitate to contact us if you have any questions regarding the upcoming changes.

Doodle’s technology landscape

November 18, 2013

We get questions from time to time about the technologies we use at Doodle. Since the last post on this topic happened some time ago, it deserves an update.

Most of the front-end logic is implemented in JavaScript, with the help of the usual frameworks such as jQuery, Backbone.js, and Bootstrap. The code is heavily modularized and modules can be dynamically loaded thanks to magic provided by Require.js. Dynamic page elements are generated using Mustache templates, which allow for re-rendering parts of a page if the data changes. This combination of technologies enables us to do virtually anything the browser allows, without the constraints of a GUI framework such as JSF. Server-side front-end technologies (JSF in particular) are only used for templating on fairly static pages or to generate initial pages (usually without content, only boiler-plate code), which serve as starting points for JavaScript execution.

The front-end communicates with the web application over a semi-public REST-like API using Ajax calls (and some form-POST hacks for file uploads and the like). One of the reasons why it’s only REST-*like* is that PUT and DELETE operations are often blocked at company proxies and firewalls, thus we only use GET and POST. The web application itself is written in Java 7, runs in a Tomcat container and uses countless third-party libraries. One example is Jersey, which we use for all of our internal and external REST APIs.

Data is stored with MongoDB. We have migrated away from MySQL for several reasons: First, schema changes were a huge pain with multi-GB databases, and the schema had to change with practically every release. Second, the document-style approach is a better fit to our data: No more huge tables with absurdly large indexes just to link two entities. Just to illustrate the point: With MySQL, we even adopted a document-based approach for some use cases by storing zlib-compressed JSON data in BLOBs… and that’s kind of what MongoDB does, and MongoDB does it better. And last but not least, replica sets are much easier to use and maintain than MySQL’s replication mechanism. The mapping between MongoDB documents and Java classes is done using Morphia, which is not as sophisticated as JPA/Hibernate (all write operations have to be implemented manually), but is easy enough to use and works well.

On the server side, we use Debian Linux running on standard server hardware. The servers are located in Switzerland and hosted by a local service provider (thanks, AtrilA).

The server setup consists of three tiers: The static content is handled by Apache servers (we have experimented with content delivery networks, but the performance gain was not big enough to warrant the cost and increased complexity). Load balancing and failover is done using round-robin DNS pointing to multiple virtual IP addresses, which automatically move between the Apache servers if necessary (e.g., if a server is shut down). All requests to dynamic content are forwarded to our application servers running Tomcat, again using load balancing and failover to cope with the failure of an application server. A Postfix installation on each application server is responsible for delivering all application-generated email (and that’s a lot). Finally, the application accesses the MongoDB replica set, where MongoDB automatically replicates all data between the set members and ensures the availability of the set.

Of course, there’s also the usual bunch of internal servers for build automation (Jenkins), repositories, testing, backup and the like. The server configuration is managed by Puppet, which is a declarative language to describe all aspects of a computer’s configuration, and, as a side effect, also serves as documentation. Those manifests require are a lot of work to write, but being able to go from nil to a production-ready server in 10 minutes, including getting every tiny configuration option exactly right, is just awesome!

By David Gubler, Senior Operations and Software Engineer

How to integrate your Facebook events with Doodle

January 3, 2013

Integrating your Facebook events in Doodle can have two major advantages:

  • You get reminded of events you might want or plan to attend while scheduling.
  • You prevent scheduling some other event/meeting when one of your Facebook events takes place.

Here’s how it works:

  1. Register for a (free!) Doodle account, if you don’t have one yet: http://doodle.com/open.
  2. Visit your Facebook events list: https://www.facebook.com/events/list.
  3. Click on the cogwheel in the upper right corner and select “Export”.
  4. Choose either your friends’ birthdays or upcoming events (or both, if you wish), right-click on the respective link and choose “copy link address”.
  5. Visit the calendar settings in your Doodle account: https://doodle.com/mydoodle/manageAccount.html#calendars.
  6. Paste the link you copied above into the “calendar feed URLs” textfield.
  7. Make sure to replace the “webcal:” at the very beginning of the URL with “http:”.
  8. Click “Add”.

From now on, whenever you create a new scheduling poll or participate in a poll, you can choose to use the calendar view and have your Facebook events displayed.

Please let us know if you use this feature or if some other form of Facebook integration might make sense for you.

Improved timezone selection and other news

October 16, 2012

Our timezone selection has always been a pain for our users — and, as a consequence, for us too. It was very cumbersome to find the correct timezone in an overly long list of countries, cities, and timezone abbreviations. With our latest release, we have introduced a new UI element that should make things much easier:

Timezone selection

Now, if you want to adjust a poll’s timezone, you can first select your country and then one of the major cities that represent your timezone. And you can use the search field to quickly narrow down the candidates.

“Can’t make it”

If none of the options offered in a poll suit you, there is now a short-cut button to decline all options. Simply enter your name and click “Can’t make it”. We also think that this additional button makes life easier for our first-time users who might otherwise not know how to decline all options.

"Can't make it"

Straight to the dashboard

Most of our users appreciate that they don’t have to register to use Doodle. However, if you are a registered Doodle user, you benefit from a number of advantages. One of these is a dashboard with an overview of all your polls. And as of today, registered users will be taken directly to that dashboard rather than the regular homepage when they access www.doodle.com. You can always visit the homepage by clicking on the Doodle logo on the top left.

Mandatory e-mail address

Previously, we did not require you to enter your e-mail address when creating a poll. However, the vast majority of our users always entered their e-mail address. And those who didn’t often ran into problems — e.g., because they lost the admin link (or even the participation link) to their poll. So we decided to make life easier and more consistent for everybody by requiring a valid e-mail address for all new polls.

Revamped admin mails

We love to experiment and try out new things on our quest to make Doodle as user-friendly as possible. Many things work, but some things don’t. Our latest redesign of the admin mail confused a lot of our users so we went back to the drawing board and came up with an alternative that should now please all existing users as well as new ones.

Let us know if they don’t.

Vote for your favorite Doodle Snapshot picture

June 25, 2012

We’ve received hundreds of great pictures for our Doodle Snapshot contest, and now that the submission period has concluded, we’d like to encourage you to vote for your favorite picture. You can vote until 5PM Eastern on June 29th, and we’ll then select the winners and announce them on July 2nd at 9AM Eastern. The votes don’t determine the winners, but they will be considered while we make our decisions.

Who will win? Come back to the blog on July 2nd to find out!

Follow

Get every new post delivered to your Inbox.

Join 13,639 other followers