#porrafcb – Resumen temporada 2010/2011

14Aug11

En este post voy a resumir la actividad y a recopilar algunos datos de uno de los proyectos a los que le tengo mucho cariño: porrafcb.cat.

Básicamente #porrafcb es una aplicación que recopila y agrega las predicciones de los resultados de los partidos de los seguidores del F. C. Barcelona. La gente a medida que avanza la temporada hace la porra para cada partido via Twitter y con el hashtag #porrafcb y porrafcb.cat agrega la información de cada usuario, así como si ha acertado la porra o no, etc.

Visitas

Este es el gráfico de visitas de toda la temporada:

Los partidos que más visitas han traido a la aplicación han sido los siguientes:

  • 20/08/2010 - Racing -vs- FCB - 25 visitas
  • 03/10/2010 – FCB -vs- Mallorca - 38 visitas
  • 16/02/2011 – Arsenal -vs- FCB - 55 visitas
  • 08/03/2011 – FCB -vs- Arsenal - 29 visitas

Hay que añadir que no creo que hayan generado más expectación por el partido sino por la “suerte” que he tenido al recibir algún retweet de algún usuario de Twitter con muchos seguidores. Sin duda la página no tiene muchas visitas … una lástima, pero realmente hay que mejorar mucho este aspecto.

Participaciones

He hecho una pequeña  consulta a la base de datos donde se muestran los partidos que mas participación han generado:

El resultado:

  • 16/04/2011 - Madrid -vs- FCB – 253 participaciones
  • 08/03/2011 – FCB -vs- Arsenal – 245 participaciones
  • 27/04/2011 – Madrid -vs- FCB - 234 participaciones
  • 16/02/2011 – Arsenal -vs- FCB – 232 participaciones

Sin duda los 4 partidos contra el Madrid del mes de Abril han sido una locura, junto con los partidos contra el Arsenal. Probablemente los partidos del Arsenal hayan tenido tanto éxito porqué compañeros del trabajo aquí en Londres estubieron participando en #porrafcb, les gustó bastante la idea, hehe.

Los ganadores

Y finalmente listar a los ganadores y darles las gracias por participar:

  1. @macpolen9 aciertos / 52 participaciones
  2. @fanboymac7 aciertos / 64 participaciones
  3. @jordimigo7 aciertos / 60 participaciones
  4. @trinamilan6 aciertos / 46 participaciones
  5. @mirkiota6 aciertos / 42 participaciones
  6. @dvallespi - 6 aciertos / 35 participaciones
  7. @jordiserra - 6 aciertos / 37 participaciones
  8. @idrox_pi - 6 aciertos / 33 participaciones
  9. @clon77 - 5 aciertos / 30 participaciones
  10. @Xevi17055 aciertos / 43 participaciones

También quería dar gracias a Xevi (@Xevi1705 en Twitter) que me está ayudando a administrar la aplicación creando los partidos y actualizando los resultados. Muchas gracias!

1 Comment

doonish: Status update

02Jul11

Llevo un tiempo dedicando esfuerzo a doonish.es, el juego de preguntas y respuestas basado en Trivial Pursuit y ahora me he dado cuenta de que he dejado un poco abandonado el blog.

Tan solo resumir un poco lo que he estado movido entre manos durante estos últimos meses:

1) Trato especial a los usuarios que vienen de Google

Nos dimos cuenta de que nos llegan algunas visitas de Google y antiguamente si el usuario hacía click en nuestra página entraba directamente a la página de la pregunta. Ahora no, ahora si el usuario no tiene cookies (no es un usuario que conocemos) se le muestra directamente la respuesta. Esto lo hacemos porque entendemos que en este caso concreto el usuario quiere conocer la respuesta a la pregunta, así que intentamos satisfacer de algún modo su necesidad.

Ejemplo: ¿Cuál es la capital de Alaska?

Esto es lo que ve un usuario que conocemos:

Esto es lo que ve un usuario que no conocemos y que viene de google:

2) Ya tenemos SEO

Salió sin buscarlo. Me estuve intercambiando algunos correos con Manel Pérez. Aproveché nuestro buen trato y sus grandes conocimiento (trabaja en el departamento de SEO de Softonic) para preguntarle algunas dudas sobre  SEO. Fuimos charlando y al final vimos que había interés por ambas partes de que se incorporara al equipo de doonish. Ya tenéis la información en la página de “Sobre nosotros” de doonish.

3) API

En un tiempo récord he escrito una API para doonish. Es muy sencilla pero permite a desarrolladores acceder a la base de datos de preguntas de doonish. De momento no tengo muy claro como enfocarlo y la he hecho privada. Si a alguien le interesa aquí dejo cinco céntimos sobre mas o menos que endpoinds se han habilitado:

question.json
  • http://doonish.es/api/question.json
question/[CATEGORY].json
  • http://doonish.es/api/question/cine.json
  • http://doonish.es/api/question/corazon-y-famosos.json
categories.json
  • http://doonish.es/api/categories.json
Esto en principio va a permitir a otros desarrolladores jugar con nuestra base de datos. De momento la API es privada por lo que no se puede ver el contenido, adjunto una imagen para que os hagáis una idea.
Y bueno, todo esto lo acompaño con más de 2000 preguntas y ya casi 500 usuarios. Como decimos en Catalán: “mica en mica s’omple la pica” :) !
No Comments

Tu startup como un ser vivo

21Apr11

Hace ya un tiempo que me cambié unos mails con Daniel Miranda, fundador de iBigBang y me explicaba su punto de vista sobre las start-ups.

A mi me surgía la siguiente duda:

¿Es mejor espaciar los posts en blogs? ¿O mejor los concentro todos en un corto periodo de tiempo?

Y él me contestó algo que me encantó. Me decía algo así como:

Yo considero a un blog, o a una aplicación como la que habéis hecho (o como la nuestra) como un ser vivo. Es un concepto que alguna vez nos dijeron en Tetuan Valley y es algo que he podido comprobar. Como ser vivo, necesita un cuidado y una alimentación continuada. Esto en un blog se traduce a darle un contenido ameno, interesante y dinámico. Depende mucho de la temática de tu blog, y las rotaciones que ello implique, pero yo creo que lo mejor es dosificar los post y dar siempre alicientes nuevos. Esto se remarca mucho en las redes sociales (Facebook y Twitter sobre todo): publicar noticias sobre el Blog (o la aplicación) de forma espacia crea un interés mayor, un menor atosigamiento y un mayor tráfico que publicar todo en un corto periodo de tiempo.

Si podéis, cread vídeos, imágenes que se muevan, hacedme pensar y trabajar poco y disfrutar mucho y vereís como la gente empezará a hablar de vosotros. Pero como digo, no olvidéis que es un organismo vivo, y si lo dejáis en reposo, perderéis tráfico e interés.

Me ha encantado su comentario porque lo he pedido experimentar yo mismo. Durante un tiempo doonish estuvo saliendo en algunos blogs y tubo un pico de visitas grande, pero ahora que no le estoy dando continuidad las visitas se resienten. A continuación se ven claras las evidencias.

doonish analitica semanal

Gracias a esto me han surgido algunas ideas que voy a intentar implementar, a ver que tal. Ya iré informando.

No Comments

Semana de posts para doonish

03Apr11

La semana pasada fue interesante para doonish, el juego de preguntas y respuestas del que os hablé en el post anterior.

Gracias a los contactos que hice en Tetuan Valley Startup School (el programa de aceleración de start-ups) pude conocer a Javier Martín de Loogic. Me puse en contacto con el y le pedí que si me podía publicar un post para ayudar a promocionar doonish al resto del mundo. Y Javier fue muy amable, no solo me publicó el blog sino que además me dio algunos consejos sobre como seguir adelante. Por suerte Javier ya conocía el proyecto, lo había visto en 7devs.com, un pequeño proyecto de Miquel Camps, y no le vino nuevo.

A principios de esta semana repetí el ejercicio con Diego Polo, de Wwwhatsnew, y también se porto muy bien conmigo. Se lo pedí un domingo por la noche, sobre las 23:00, y en 5 minutos me contesto que lo haría y al día siguiente a primera hora ya tenia el post publicado.

A raíz de estos dos posts en estos blogs otros blogs no tan grandes se han echo eco y han publicado sobre doonish. Intento llevar el control sobre que se publica del proyecto en Internet, y de momento que haya identificado tenemos:

Agradezco a todos ellos su ayuda. Este es el resultado de la publicación de todos estos posts:

Gráfica de google analytics

 

Y un resumen de dónde ha venido la gente en estos últimos días.

Fuentes de tráfico

Poco a poco iré publicando información, pero una de las cosas mas sorprendentes ha sido el eco que se ha echo la gente en Twitter. Es curioso porque cuando buscas “doonish” en Twitter no puedes ver el historial de toda la gente que ha twitteado sobre doonish, pero por suerte tengo TwitterDeck con una columna configurada y en el que puedo acceder a todo el historial de Tweets. Os dejo una imagen de una pequeña parte, pero ha sido alucinante la cantidad de gente que también se ha echo eco de la noticia en Twitter.

Tweetdeck

No Comments

Juego de preguntas y respuestas

23Mar11

Ya llevo un tiempo trabajando en un nuevo proyecto, se llama doonish y en pocas palabras es una especie de Trivial Pursuit pero con componentes sociales, donde los usuarios se registran y pueden jugar respondiendo a las preguntas que otros usuarios han creado previamente.

logo de doonish

Históricamente esto es una vieja idea de Mike que desarrolló el solo hace cosa de 4 años y hace un tiempo lo retomamos juntos y nos pusimos manos a la obra para desarrollar lo que hoy es doonish.

A través del blog iré contando poco a poco lo que va sucediendo con doonish y como vamos conseguiendo que crezca (si esque lo conseguimos).

El plan a corto plazo es el siguiente:

Creo que ya tenemos el MVP, a falta de implementar una mejora que tengo en mente, así que a corto plazo no vamos a seguir desarrollando a saco como hasta ahora, tan solo solucionar bugs y tocar alguna cosa leve. El siguiente paso es dirigir tráfico e intentar escuchar a los usuarios para seguir desarrollando funcionalidades que los usuarios (entre comillas) quieran o pidan.

La estratégia para dirigir tráfico a priori es complicada, porque no es nuestro fuerte, pero mas o menos creo que los tiros van a ir por el márketing de guerilla (que es algo asi como conseguir tráfico de manera ingeniosa y sin gastar mucho dinero). Hemos pensado en:

  • Escribir en foros dando a conocer nuestro proyecto pero desde la sinceridad. “Mira, somos desarrolladores y hemos hecho esto. Nos gustaria que lo probárais y que nos dierais vuestra opinión. Disculpad las moléstias.
  • Tratar de salir en algun medio como Loogic, Wwwhats new, Error 500 o algun otro que habla de nuevas start-ups.
  • Vamos a gastar algunos euros en Facebook Ads contra usuarios de habla Española, que les guste el Trivial Pursuit y mayores de 18 años. Creemos que puede ser, de algun modo, nuestro usuario “tipo”.

Tengo pendiente darle una leida a la Guia Start-up de Maestros del Web que ha escrito Claudio, a ver si puedo sacar algo de valor de ahí. De momento tenemosa algún modelo de negocio pensado pero a corto plazo no vamos a implementar ninguno de ellos, vamos a intentar captar usuarios y hacerlo crecer.

A partir de ahí mi plan es ir escribiendo asiduamente en el blog tratando de explicar nuestras aventuras con doonish, asi que … ¡Que empiece el viaje!

2 Comments

Configurar l’idioma Català a Linux

30Jul10

Estic fent algunes probes per a mostrar les dates a PHP en Català. Al meu servidor local tot funcionava correctament, pero al passar-ho al servidor remot ha deixat de funcionar.

El codi font es el següent (en PHP):

setlocale(LC_ALL, $lang . "_ES.UTF-8");
echo strftime("%A %e de %B del %Y a " . $translate->_("las") . " %H:%M", strtotime($time));

En castellà funcionaba correctament, pero al passar-ho al català no funciona.

Per a que funcioni, he hagut de fer la següent modificació: Obrir el fitxer /var/lib/locales/supported.d/local i afegir la darrera línea.

es_ES.UTF-8 UTF-8
ca_ES.UTF-8 UTF-8

Despres de desar el fitxer, he executat la següent comanda:

sudo dpkg-reconfigure locales

I ja ha funcionat, ja puc veure la data tant en català com en castellà :) !

No Comments

Error messages in Zend Form .ini file

24Jul10

I was searching the way to customize the validator error messages in Zend Form using the .ini file.

Finally I found two useful links:

  1. Rob Allen answering in StackOverflow
  2. One guy asking a similar question in Nabble

I copy here the content of my form.ini:

; apellido
elements.apellido.type = "text"
elements.apellido.options.label = "Apellido"
elements.apellido.options.description = "Introduce tu apellido"
elements.apellido.options.validators.notempty.validator = "NotEmpty"
elements.apellido.options.validators.notempty.options.messages.isEmpty = "Campo requerido"
elements.apellido.options.validators.notempty.breakChainOnFailure = true
elements.apellido.options.validators.strlen.validator = "StringLength"
elements.apellido.options.validators.strlen.options.min = "1"
elements.apellido.options.validators.strlen.options.max = "100"
elements.apellido.options.required = true

Some useful tips that you might know:

  • If you don’t put the “options.required = true” the “NotEmpty” validator doesn’t work.
  • If you don’t put the “breakChainOnFailure = true” the form will carry on executing other validators.
  • You can search in the Zend Framework source code for the messages that you can overwrite. Look at: “Zend/Validate/*” files.

I wish it will be useful for somebody =) !

2 Comments

Buenas prácticas en PHP

13Jul10

Miguel, mi buen socio y mejor amigo ha estado impartiendo las dos semanas anteriores el curso de PHP Avanzado (programa en pdf) de Jedi (Junior Empresa). Se trata de unos cursos de verano que ofrece esta organización adherida a la UPC. Yo le he estado echando un cable a modo de becario.

Estuvo repasando en una de las sesiones de teoría las buenas prácticas a la hora de escribir código en PHP. A continuación las recopilo, pues aunque algunas sean obvias y parezcan básicas creo que es importantes tenerlas en cuenta, sobretodo si se trabaja en grupo. Además, PHP es tan flexible que permite hacer muchas marranadas.

1) Usar “soft tabs” (seguido de espacios) o bien configurar el IDE para que el botón de tabulación se transforme automáticamente en X espacios (normalmente 4). Esto evita los típicos problemas de indentado al leer el código en distintos editores de texto.

2) La llave que abre los bloques “{” debe ir en la linea siguiente de la declaración.

3) Pautas para nombrar clases:

  • Letra inicial en mayúscula.
  • Resto de nombre se escribe en CamelCase.
  • Se usa “_” para indicar la capa o paquete en la que se encuentra la clase (normalmente el folder).

4) Pautas para nombrar variables:

  • Poner nombres entendibles, explicativos y concisos
  • Usa camelCase

5) Pautas para nombrar constantes:

  • Toda en mayúscula
  • Distintas palabras separadas por “_”

6) Pautas para nombrar métodos:

  • Si es privado, añadir el “_” delante del nombre de la función

7) No usar “open tag” <?.  Estos pueden ser confundidos con el inicio de código <?xml. En su lugar, usar siempre <?php.

8) Para documentar usar siempre /* */ o //, nunca usar #.

Estas son algunas. Seguramente haya mas … si alguien quiere completar la lista lo añadiré sin ningún problema.

Editado: Añado algunas más que he recibido mediante los comentarios de CPS 2.0.

9) Los string literales van entre comillas simples:

$a = 'Example String';

Nota: Yo uso por defecto las comillas dobles, por el tema de los apostrofes en catalán. Lo importante es definir un estándar.

10) En la concatenación usar espacio antes y despues de “.”:

$company = 'Zend' . ' ' . 'Technologies';

11) Para concatenacion multilinea, poner el “.” en la linea siguiente y tabularlos a la altura de “=”:

$sql = "SELECT `id`, `name` FROM `people` "
. "WHERE `name` = 'Susan' "
. "ORDER BY `name` ASC ";

Muchas gracias por la colaboración ;) !

1 Comment

Iterar sobre array en PHP y Javascript

26May10

¡Porfin lo encontré!

En PHP hacemos el típico foreach:

foreach($array as $key =&gt; $value) {
echo "clave = " + $key;
echo "valor = " + $value;
}

Y en Javascript también se puede hacer del siguiente modo:

for(i in array) {
alert("clave = " + i);
alert("value = " + array[i]);
}
No Comments

Función de swap sin variable aux

03May10

Este es el típico problema que te ponen a veces para probar tu habilidad como programador.

Tienes que hacer una función para cambiar los valores de dos variables sin usar una variable auxiliar.

La función que a todos se nos ocurre és:

function swap($a, $b) {
   $tmp = $a;
   $a = $b;
   $b = $tmp;
}

Pero esta no cumple el enunciado. Una posible función que si cumple el enunciado es la siguiente:

function swap($a, $b) {
   $a = $a + $b;
   $b = $a - $b;
   $a = $a - $b;
}

Edición 05/07/2010:

Juan Antonio Galán, mediante los comentarios me hace llegar esta solución:

function swap($a, $b) {
   list($a, $b) = array($b, $a);
}

Y Víctor me comenta esta otra:

function swap($a, $b) {
   $a ^= $b ^= $a ^= $b;
}

Muchas gracias por vuestra aportación ;) !

2 Comments