---
layout: post
title: Logo Contest - Round 1 Results
---

{{ page.title }}
================

Round one of the Apache Storm logo contest is now complete and was a great success. We received votes from 7 PPMC members as well as 46 votes from the greater Apache Storm community.

We would like to extend a very special thanks to all those who took the time and effort to create and submit a logo proposal. We would also like to thank everyone who voted.

## Results ##
The Apache Storm PPMC and community votes were closely aligned, with the community vote resolving a PPMC tie for the 3rd finalist as shown in the result table below.

The three finalists entering the final round are:

 * [No. 6 - Alec Bartos](/2014/04/23/logo-abartos.html)
 * [No. 9 - Jennifer Lee](/2014/04/29/logo-jlee1.html)
 * [No. 10 - Jennifer Lee](/2014/04/29/logo-jlee2.html)
 
Congratulations Alec and Jennifer!

Stay tuned for the final vote, which will be announced shortly.

------

| Entry                        | PPMC | Community |
|:-----------------------------|-----:|----------:|
|1 - Patricia Forrest          | 2    | 23        |
|2 - Samuel Quiñones           | 3    | 6         |
|3- Shaan Shiv Suleman         | 0    | 7         |
|4 - Richard Brownlie-Marshall | 0    | 6         |
|5 - Ziba Sayari               | 0    | 9         |
|6 - Alec Bartos               | 3    | 32        |
|7 - Calum Boustead            | 0    | 0         |
|8 - Stefano Asili             | 0    | 2         |
|9 - Jennifer Lee              | 9    | 63        |
|10 - Jennifer Lee             | 18   | 64        |
|11 - Jennifer Lee             | 0    | 18        |