CF-Console: Consola Web para Cloud Foundry

Cada verano, al disponer de más tiempo libre, suelo aprovechar para aprender un lenguaje de programación nuevo. Es una manera de pasar el tiempo (si, podéis llamarme friki), reciclarme en nuevas tecnologias, y refrescar mis oxidadas habilidades de programación (desafortunadamente llevo más de 10 años sin programar profesionalmente). Ese año me decidi a probar Ruby, apoyándome, como no, en el tan conocido Rails. Decidí también que para que fuese realmente provechoso, en vez de realizar solo los ejercicios de un libro, debería crear una aplicación con una utilidad real, completamente funcional, y a ser posible, que no hubiese ninguna igual en el mercado. Así pués, y como he estado trasteando últimamente con Cloud Foundry, me decidi a crear una consola web para este servicio.

Después de divertirme estos 3 últimos meses, ya tengo la aplicación plenamente funcional. Y para que el esfuerzo no quede en vano, he decidido publicar en github el código fuente de la aplicación (sed benévolos con el código, que es mi primera aplicación en RoR). De esta manera, podréis trastear con ella, mejorarla o añadir alguna funcionalidad nueva (más de una ya la tengo en mente para próximas versiones).

Aún así, si no tenéis tiempo, ganas o conocimientos, he habilitado una demo funcional de la aplicación en el servidor público de Cloud Foundry para que no tengáis excusa para no probarla :). La dirección és http://cf-console.cloudfoundry.com/.

Os adjunto a continuación algunos pantallazos de esta aplicación.

En el dashboard podréis ver tanto un resumen general de nuestra cuenta (aplicaciones, memoria y servicios usados y disponibles), así como un resumen del estado de nuestras aplicaciones e instancias:


En el menu de aplicaciones podréis ver un resumen de todas las aplicaciones desplegadas en el servidor de Cloud Foundry, teniendo la posibilidad además de arrancarlas, pararlas y eliminarlas mediante un simple click:

Y para cada una de las aplicaciones, podréis ver los recursos asignados (pudiendo modificar tanto el número de instancias como la memoria asignada a cada instancia):

Ver el estado de cada una de las instancias de nuestra aplicación:

Así como ver los logs de cada instancia (con posibilidad de filtrar la salida en base a un patrón de búsqueda):

Adicionalmente, podréis consultar también los ficheros que se han desplegado en el servidor (en el caso de ficheros con código y sólo para determinados lenguajes, se mostrará el código coloreado según la sintaxi del lenguaje del fichero):

También podréis gestionar vuestros servicios, es decir, las instancias de los servicios del sistema que vamos a utilizar en nuestras aplicaciones:

En el menu de sistema podréis consultar tanto los servicios del sistema, como los frameworks y runtimes disponibles en el servidor de Cloud Foundry:



Si además sois administradores del servidor de Cloud Foundry, podréis gestionar los usuarios:

¡Espero que os sea útil! Y ya sabeis, la aplicación es open source, por lo que podeis modificarla a vuestro gusto.

Publicado en General | Etiquetado , , , | 2 comentarios

Experimentando con Ubuntu juju y Cloud Foundry

Después de las vacaciones de verano, volvemos con la energia renovada y con ganas de hacer más experimentos 🙂

En una entrada anterior donde os hablabla de Cloud Foundry, un lector me pedia un post sobre como montar un servidor propio. La verdad es que comencé a escribirlo, aunque por motivos que no vienen a cuento tardé más de la cuenta. Y casi justo cuando lo tenia terminado, VMWare lanzó un script que simplifica mucho el proceso de instalación, por lo que borré el post por careced de sentido. Así pués, si todavia estais interesados, solamente tenéis que seguir las instrucciones que aparecen en la página del proyecto en github. El proceso, aunque largo, es muy sencillo.

En esta entrada, en cambio, nos vamos a centrar en ver como os podeis montar vuestro propio servidor de Cloud Foundry, pero en vez de en local, lo vamos a albergar en Amazon EC2. Además, en vez de hacerlo de la forma tradicional (o sea, creando una instancia de EC2 y ejecutando el script de instalación tal como se describe en esta página), vamos a utilizar una nueva herramienta muy interesante que ha aparecido recientemente, y que nos permitirá además escalar los servicios ofrecidos por Cloud Foundry de una manera muy sencilla y rápida.

La herramienta en cuestión se llama Ubuntu Ensemble. Bien, de hecho ya no se llama así 🙁 . Justo cuando estoy escribiendo esta entrada, lo magnificos chicos de Canonical han decidido cambiarle el nombre por Ubuntu juju (esta entrada debe estar “gafada” 🙂 ) en referencia a la magia/brujería practicada en algunas regiones de Africa.

juju es un framework de orquestación para el despliegue de servicios de infraestructura en la “nube” (similar en cuanto a concepto a Chef o Puppet o, en otro nivel, a los ServerTemplates de RightScale), o dicho de otra manera, una especie de APT pero dirigido a entornos que se ejecutan en la “nube” y, a diferencia del primero, en vez de focalizarse en el despliegue de un producto en una máquina, persigue la instalación orquestada en entornos distribuidos de servicios interrelacionados. La idea detrás de juju es que haya una comunidad de desarrolladores que paquetizen el despliegue de sus servicios (similar a lo que hace APT con los paquetes o a las recipes de Chef) mediante lo que llaman charms (hechizos) y que estas charms, además de ser reutilizables por otros usuarios, incluyan los metadatos del servicio, las dependencias a otros servicios, los paquetes necesarios para su despliegue, así como la lógica para gestionar el servicio. Actualmente esta en fase de desarrollo, y solo admite entornos Amazon EC2 (o clones en cuanto a la API, como OpenStack), aunque está previsto soporte a otros entornos en un futuro. Se incluirá por defecto en la release 11.10 de Ubuntu, aunque a dia de hoy, ya se puede probar tanto en la Beta 1 de la release 11.10 como en versiones anteriores (11.04 y 10.04).

Bien, una vez hechas las presentaciones, vamos a experimentar con esta herramienta. En primer lugar vamos a instalar juju. Si estamos utilizando Ubuntu 11.10 es tan sencillo como:

~$ sudo apt-get install juju

Pero si utilizamos Ubuntu 10.04 o 11.04, entonces tendremos que añadir primero el repositorio PPA correspondiente:

~$ sudo apt-get install python-software-properties
~$ sudo add-apt-repository ppa:juju/pkgs
~$ sudo apt-get update
~$ sudo apt-get install juju

Ahora vamos a inicializar el entorno de juju. Primero invocaremos al comando que nos creará un archivo de entorno por defecto:

~$ juju
error: No environments configured. Please edit: /home/frodenas/.juju/environments.yaml

Y editaremos el archivo añadiendo algunas líneas:

~$ vi /home/frodenas/.juju/environments.yaml
environments:
sample:
type: ec2
ec2-uri: https://ec2.eu-west-1.amazonaws.com
access-key: --- INSERTAR AQUI VUESTRA ACCESS-KEY DE AMAZON EC2 ---
secret-key: --- INSERTAR AQUI VUESTRA SECRET-KEY DE AMAZON EC2 ---
control-bucket: --- ELIMINADO POR SEGURIDAD - DEJAR EL VALOR POR DEFECTO ---
admin-secret: --- ELIMINADO POR SEGURIDAD - DEJAR EL VALOR POR DEFECTO ---
default-image-id: ami-66f6c512
default-instance-type: m1.large

Lo que hemos añadido ha sido:

  • ec2-uri: aquí hemos puesto el endpoint de la región de Amazon EC2 que nos interesa, en este caso, la región EU West (Irlanda).
  • access-key y secret-key: vuestras credenciales de Amazon EC2.
  • default-image-id: aquí ponemos el nombre de la AMI de Amazon EC2 que se utilizará por defecto, en este caso, utilizaremos una imagen de Ubuntu Cloud 11.10 de 64 bits disponible en la región de EU West. El nombre de la AMI varia cada dia, por lo que os recomiendo que comproveis la lista actual de imagenes antes de utilizar la que yo he puesto.
  • default-instance-type: aquí ponemos el tipo de instancia de Amazon EC2 que se utilizará por defecto, en este caso, como la instancia contendrá Cloud Foundry y diversos servicios (MySQL, MongoDB y Redis), escogemos la instancia grande (m1.large).

Bien, ahora hemos de arrancar el entorno. Pero antes, y debido a que las charms de juju que nos permiten instalar el servidor de Cloud Foundry y sus servicios todavia no están publicadas en los repositorios oficiales, nos tocará instalarlas manualmente en local:

~$ sudo apt-get install bzr
~$ mkdir charms && cd charms
~/charms$ bzr branch lp:~canonical-sig/+junk/cloudfoundry-server

Ahora si podemos arrancar el entorno de juju (generar antes un par de claves en vuestro sistema sino lo habéis hecho, de lo contrario el entorno no arrancará):

~/charms$ ssh-keygen -t rsa -b 2048
~/charms$ juju bootstrap
2011-09-22 00:46:54,161 INFO Bootstrapping environment 'sample' (type: ec2)...
2011-09-22 00:47:01,753 INFO 'bootstrap' command finished successfully

Esto proceso lo que hará es crear una instancia en Amazon EC2 e instalarle el servidor de juju mediante cloud-init. Con el comando status podremos ver si el entorno está ya arrancado:

~/charms$ juju status
No machines have addresses assigned yet
2011-09-22 00:47:11,893 ERROR No machines have addresses assigned yet

Vemos que la instancia todavía no está levantada. Nos vamos a la consola web de Amazon EC2 y esperamos a que arranque:

Una vez esté en marcha, volvemos a ejecutar el comando status:

~/charms$ juju status
2011-09-22 00:49:00,215 INFO Connecting to environment.
machines:
0: {dns-name: ec2-46-51-151-139.eu-west-1.compute.amazonaws.com, instance-id: i-af00e1e6}
services: {}
2011-09-22 00:49:01,834 INFO 'status' command finished successfully

Como veis, ahora si nos indica que hay una máquina en marcha. Ahora vamos a desplegar el servidor de Cloud Foundry. Para ello utilizaremos el comando deploy y la charm que nos hemos descargado anteriormente:

~/charms$ juju deploy --repository . cloudfoundry-server
2011-09-22 00:49:25,033 INFO Connecting to environment.
2011-09-22 00:49:27,823 INFO Charm deployed as service: 'cloudfoundry-server'
2011-09-22 00:49:27,825 INFO 'deploy' command finished successfully

Igual que en el caso anterior, esperamos a que arranqué la instancia, se despliegue el servidor y servicios de Cloud Foundry, y estos se pongan en marcha (tened paciencia, es un proceso un poco lento). Podemos ir consultando periodicamente el estado hasta que el servicio está en marcha (el campo “state” pasará de “null” a “installed” y finalmente “started“):

~/charms$ juju status
2011-09-22 00:55:17,906 INFO Connecting to environment.
machines:
0: {dns-name: ec2-46-51-151-139.eu-west-1.compute.amazonaws.com, instance-id: i-af00e1e6}
1: {dns-name: ec2-46-137-3-58.eu-west-1.compute.amazonaws.com, instance-id: i-0503e24c}
services:
cloudfoundry-server:
charm: local:cloudfoundry-server-26
relations: {}
units:
cloudfoundry-server/0:
machine: 1
relations: {}
state: started
2011-09-22 00:55:20,236 INFO 'status' command finished successfully

El siguiente paso será abrir los puertos necesarios para que nos podamos conectar con el servidor de Cloud Foundry. Para ello utilizaremos el comando expose (y no es necesario indicar los puertos a abrir, ya que estos están indicados en la charm):

~/charms$ juju expose cloudfoundry-server
2011-09-22 00:55:41,155 INFO Connecting to environment.
2011-09-22 00:55:42,485 INFO Service 'cloudfoundry-server' was exposed.
2011-09-22 00:55:42,486 INFO 'expose' command finished successfully

Consultamos el estado del servicio y veremos como ahora nos indica los puertos que están abiertos:

~/charms$ juju status
2011-09-22 00:55:45,701 INFO Connecting to environment.
machines:
0: {dns-name: ec2-46-51-151-139.eu-west-1.compute.amazonaws.com, instance-id: i-af00e1e6}
1: {dns-name: ec2-46-137-3-58.eu-west-1.compute.amazonaws.com, instance-id: i-0503e24c}
services:
cloudfoundry-server:
charm: local:cloudfoundry-server-26
exposed: true
relations: {}
units:
cloudfoundry-server/0:
machine: 1
open-ports: [80/tcp, 443/tcp, 4222/tcp]
relations: {}
state: started
2011-09-22 00:55:48,101 INFO 'status' command finished successfully

En teoria ahora está todo levantado, pero por si acaso, vamos a comprobarlo conectandonos a la máquina que contiene el servidor de Cloud Foundry. Para ello utilizaremos el comando ssh del propio juju y el número de máquina que nos ha indicado el comando status:

~/charms$ juju ssh 1
2011-09-22 00:56:14,640 INFO Connecting to environment.
2011-09-22 00:56:16,265 INFO Connecting to machine 1 at ec2-46-137-3-58.eu-west-1.compute.amazonaws.com

Una vez hayamos entrado, miraremos si los servicios de Cloud Foundry están levantados:

ubuntu@ip-10-228-250-63:~$ cd /opt/cloudfoundry-server/vcap/bin
ubuntu@ip-10-228-250-63:/opt/cloudfoundry-server/vcap/bin$ sudo ./vcap status
router : RUNNING
cloud_controller : RUNNING
dea : RUNNING
health_manager : RUNNING
redis_gateway : RUNNING
redis_node : RUNNING
mysql_gateway : RUNNING
mysql_node : RUNNING
mongodb_gateway : RUNNING
mongodb_node : RUNNING

Como vemos, todos los servicios de Cloud Foundry están en marcha. Ya nos podemos desconectar de la instancia de Amazon EC2:

ubuntu@ip-10-228-250-63:/opt/cloudfoundry-server/vcap/bin$ exit
Connection to ec2-46-137-3-58.eu-west-1.compute.amazonaws.com closed.

Ahora vamos a proceder a conectarnos a Cloud Foundry para ver si responde. Lo primero que deberemos hacer es bajarnos el cliente vmc:

~/charms$ sudo apt-get install ruby-vmc

Pero para poder conectarnos remotamente necesitamos disponer de un registro wildcard DNS que redirija nuestras peticiones hacia el servidor de Cloud Foundry. En nuestro caso, como es solo un experimento low cost, vamos a utilizar un truco. Lo que vamos a hacer en crear un tunel ssh de manera que las peticiones al puerto 80 de nuestra máquina se redirijan al puerto 80 de la instancia de Amazon EC2 que contiene el servidor de Cloud Foundry (si en vuestra máquina ya estais utilizando el puerto 80, lo podeis cambiar a otro, por ejemplo, el 8080). Pero para poder montar el túnel contra la instancia de Amazon EC2, necesitamos tener la clave privada y que esta coincida con la clave pública almacenada en la instancia de Amazon EC2. Como en el archivo de entorno de juju no hemos especificado ningún par de claves, este ha utilizado el par de claves de nuestro usuario (de ahí que os recordava anteriormente el generar un par de claves). Así pués, lo que haremos es indicar al ssh que utilize la clave privada de nuestro usuario:

~/charms$ cd ~/.ssh
~/.ssh$ sudo ssh -i id_rsa -L 80:46.137.3.58:80 ubuntu@46.137.3.58 -N

El problema de este metodo es que nos bloquea la sesión de terminal, por lo que nos tocará abrir una nueva sesión. Una vez la tengamos, procederemos a provar la conexión contra Cloud Foundry:

~$ vmc target api.vcap.me
Succesfully targeted to [http://api.vcap.me]

~$ vmc info

VMware's Cloud Application Platform
For support visit http://support.cloudfoundry.com

Target: http://api.vcap.me (v0.999)
Client: v0.3.10

Bien, parece que el servidor responde. Ahora vamos a crear un usuario:

~$ vmc register
Email: frodenas@gmail.com
Password: ********
Verify Password: ********
Creating New User: OK
Successfully logged into [http://api.vcap.me]

~$ vmc info

VMware's Cloud Application Platform
For support visit http://support.cloudfoundry.com

Target: http://api.vcap.me (v0.999)
Client: v0.3.10

User: frodenas@gmail.com
Usage: Memory (0B of 2.0G total)
Services (0 of 16 total)
Apps (0 of 20 total)

Perfecto! El servidor de Cloud Foundry ya está listo para ser usado!

Podríamos finalizar el experimento aquí, pero vamos a ir un poco más allá. En un teórico entorno de producción, seguramente nos quedaremos cortos con solo 1 instancia de Cloud Foundry y que esta incluya todos los servicios. Lo que haríamos es crear más instancias y albergar en cada una de ellas alguno de los servicios disponibles. Vamos a ver como lo podemos hacer con juju.

En primer lugar, nos descargamos los charms que nos interesen. Aquí os pongo los charms de los servicios de DEA (el agente de Cloud Foundry que ejecutará nuestras aplicaciones), MySQL, MongoDB y Redis:

~$ cd charms
~/charms$ bzr branch lp:~canonical-sig/+junk/cloudfoundry-server-dea
~/charms$ bzr branch lp:~canonical-sig/+junk/cf-mysql
~/charms$ bzr branch lp:~canonical-sig/+junk/cf-mongodb
~/charms$ bzr branch lp:~canonical-sig/+junk/cf-redis

Vamos a utilizar como ejemplo la instalación de un nuevo servidor de MongoDB. Utilizaremos igual que antes el comando deploy:

~/charms$ juju deploy --repository . cf-mongodb
2011-09-22 01:04:42,031 INFO Connecting to environment.
2011-09-22 01:04:45,147 INFO Charm deployed as service: 'cf-mongodb'
2011-09-22 01:04:45,149 INFO 'deploy' command finished successfully

Y esperaremos a que el servicio de MongoDB esté levantado (cuando aparezca “state: started“):

~/charms$ juju status
2011-09-22 01:11:07,813 INFO Connecting to environment.
machines:
0: {dns-name: ec2-46-51-151-139.eu-west-1.compute.amazonaws.com, instance-id: i-af00e1e6}
1: {dns-name: ec2-46-137-3-58.eu-west-1.compute.amazonaws.com, instance-id: i-0503e24c}
2: {dns-name: ec2-79-125-44-111.eu-west-1.compute.amazonaws.com, instance-id: i-7b04e532}
services:
cf-mongodb:
charm: local:cf-mongodb-1
relations: {mongodb-cluster: cf-mongodb}
units:
cf-mongodb/0:
machine: 2
relations:
mongodb-cluster: {state: up}
state: started
cloudfoundry-server:
charm: local:cloudfoundry-server-26
exposed: true
relations: {}
units:
cloudfoundry-server/0:
machine: 1
open-ports: [80/tcp, 443/tcp, 4222/tcp]
relations: {}
state: started
2011-09-22 01:11:11,105 INFO 'status' command finished successfully

Ahora lo que debemos hacer es informar al servidor de Cloud Foundry de que tiene una nueva instancia de MongoDB disponible para ser usada. Para realizar esta acción, simplemente debemos establecer una relación entre las 2 instancias mediante juju, y este, mediante las instrucciones contenidas en la charm, hará las modificaciones pertinentes en el archivo de configuración de Cloud Foundry. Así pués, vamos a ello:

~/charms$ ~/charms$ juju add-relation cloudfoundry-server cf-mongodb
2011-09-22 01:11:36,088 INFO Connecting to environment.
2011-09-22 01:11:37,997 INFO Added cf-server relation to all service units.
2011-09-22 01:11:37,997 INFO 'add_relation' command finished successfully

Consultamos ahora el estado y vemos que nos aparece la relación:

~/charms$ juju status
2011-09-22 01:11:51,639 INFO Connecting to environment.
machines:
0: {dns-name: ec2-46-51-151-139.eu-west-1.compute.amazonaws.com, instance-id: i-af00e1e6}
1: {dns-name: ec2-46-137-3-58.eu-west-1.compute.amazonaws.com, instance-id: i-0503e24c}
2: {dns-name: ec2-79-125-44-111.eu-west-1.compute.amazonaws.com, instance-id: i-7b04e532}
services:
cf-mongodb:
charm: local:cf-mongodb-1
relations: {cf-server: cloudfoundry-server, mongodb-cluster: cf-mongodb}
units:
cf-mongodb/0:
machine: 2
relations:
cf-server: {state: up}
mongodb-cluster: {state: up}
state: started
cloudfoundry-server:
charm: local:cloudfoundry-server-26
exposed: true
relations: {cf-server: cf-mongodb}
units:
cloudfoundry-server/0:
machine: 1
open-ports: [80/tcp, 443/tcp, 4222/tcp]
relations:
cf-server: {state: up}
state: started
2011-09-22 01:11:55,279 INFO 'status' command finished successfully

Vamos a comprobar si el servicio está levantado en Cloud Foundry mediante una conexión ssh de juju:

~/charms$ juju ssh 2
2011-09-22 01:12:17,200 INFO Connecting to environment.
2011-09-22 01:12:18,813 INFO Connecting to machine 2 at ec2-79-125-44-111.eu-west-1.compute.amazonaws.com
ubuntu@ip-10-58-121-108:~$ cd /opt/cloudfoundry-server/vcap/bin
ubuntu@ip-10-58-121-108:/opt/cloudfoundry-server/vcap/bin$ sudo ./vcap status
router : STOPPED
cloud_controller : STOPPED
dea : STOPPED
health_manager : STOPPED
redis_gateway : STOPPED
redis_node : STOPPED
mysql_gateway : STOPPED
mysql_node : STOPPED
mongodb_gateway : RUNNING
mongodb_node : RUNNING
ubuntu@ip-10-58-121-108:/opt/cloudfoundry-server/vcap/bin$ exit
Connection to ec2-79-125-44-111.eu-west-1.compute.amazonaws.com closed.

Vemos como en esta instancia solamente se está ejecutando el servicio de MongoDB. Si viésemos que necesitamos otra instancia adicional de MongoDB, en este caso no haría falta ejecutar los comandos anteriores. Simplemente utilizando el comando add-unit nos crearía una nueva instancia que formaria parte de un cluster de MongoDb y con la relación con el servidor de Cloud Foundry creada por defecto:

~/charms$ juju add-unit cf-mongodb

Y hasta aquí llega el experimento. Un consejo antes de finalizar: si tenéis cualquier problema ejecutando alguno de los pasos anteriores y no sabeis que está pasando, podeis utilizar el comando debug-log para ver el log del servidor de juju e intentar determinar la causa del problema:

~/charms$ juju debug-log
2011-09-22 01:13:31,421 INFO Connecting to environment.
2011-09-22 01:13:32,588 INFO Enabling distributed debug log.
2011-09-22 01:13:32,696 INFO Tailing logs - Ctrl-C to stop.

Como último paso, como siempre, recordar que hay que finalizar el entorno. Utilizaremos para ello el comando destroy-environment:

~/charms$ juju destroy-environment
WARNING: this command will destroy the 'sample' environment (type: ec2).
This includes all machines, services, data, and other resources. Continue [y/N]yes
2011-09-22 01:14:02,900 INFO Destroying environment 'sample' (type: ec2)...
2011-09-22 01:14:04,644 INFO Waiting on 3 EC2 instances to transition to terminated state, this may take a while
2011-09-22 01:14:27,728 INFO 'destroy_environment' command finished successfully

Este comando debería eliminar también las instancias de Amazon EC2, pero por si acaso, no está de más que lo comproveis vosotros mismos en la consola web de Amazon EC2.

Bien, como hemos visto, esta herramienta promete bastante. Si bien está previsto que entre por defecto en la release 11.10 de Ubuntu del mes de Octubre de 2011, la versión liberada estará todavia un poco verde, por lo que no os la recomiendo para un entorno de producción. Mientras tanto, espero que disfrutéis experimentado con ella (probad alguna de las charms oficiales o crearos vosotros mismos alguna de prueba). Si alguien se anima, que deje sus impresiones en los comentarios de esta entrada.

Publicado en General | Etiquetado , , , , , , , , , | 7 comentarios

Cronica de una viaje al Silicon Valley – Resumen

Bueno, mi viaje de una semana al corazón del Silicon Valley llegó a su fin :(. Ha estado una semana muy emocionante, gratificante, … y, sobretodo, que me ha dado la oportunidad de conocer y aprender de primera mano muchas cosas, de las que espero sacar provecho en un futuro próximo.

A modo de resumen, aquí os dejo algunas de las notas rápidas que tomé:

  • Networking, networking & networking; una de las cosas que más me ha llamado la atención es la facilidad con que se realiza networking y la predisposición de todo el mundo a facilitarte contactos. Expones tu problema o en que estas trabajando y si conocen la respuesta o te pueden dar algún consejo te lo dan, y sino, rápidamente te dan contactos con los que puedas hablar. Todo, absolutamente todo, se te abre con una buena red de contactos, y a diferencia de otros sitios, no es demasiado difícil encontrar a alguien que te pueda poner en contacto con la persona que te interese. A todo esto hay que añadirle una gran variedad de eventos que facilitan este networking, aquí os dejo algunos enlaces que me pasaron para saber que se cuece cada dia: StartupDigest, garysguide o meetup.
  • Ecosistema: derivada de lo anterior, ya que los contactos también sirven para buscar alianzas. A muchas empresas e inversores les interesa que haya un buen ecosistema detrás de un producto. O bien por que lo complementan añadiendo valor de forma independiente, o bien porque buscan una integración de 2 empresas con el objetivo de llegar a un publico más amplio. Como anécdota, en medio de una conversación con 2 emprendedores, uno de ellos, que recientemente había levantado bastante capital, le ofrecía al otro pagarle el desarrollo de su producto, ya que de esta forma conseguia que su producto, que dependia en parte del éxito del otro, tuviese un público objetivo mucho más grande.
  • Riesgo: todo el mundo ha oído hablar que los VC de aquí asumen mucho más riesgo que en otras partes del mundo, o que hay una cultura emprendedora, y por tanto de asumir riesgos personales, mucho más grande. Pero lo que me ha sorprendido es el riesgo que toman las empresas grandes. Si un producto les convence e intuyen que les puede ser útil, asumirán el riesgo de probarlo, aun sabiendo que acabas de comenzar, que eres pequeño, bla bla bla, … (y ya sabemos el calvario que pasas en este otro lado del charco cuando vas con un producto beta). Esto es una ventaja a la hora de explicarles a futuros inversores de que tu producto ya tiene una base de clientes que lo están probando (aunque la base sea pequeña y todavia no les cobres), que te están dando feedback, y por tanto, que estas realmente validando tu solución en el mercado.
  • Inversión: Aquí se mueve mucho dinero, los inversores no tienen miedo a asumir riesgos en productos innovadores, pero no es nada fácil conseguirlo, la competencia es muy pero que muy grande. Como me decía una emprendedora: “Tienes que luchar, y muy duro, con muchos otros emprendedores para conseguir financiación”.
  • Pitch: Hay que venir con un muy buen pitch, independientemente de que tengas producto, que solo sean ideas, …. Mi intención en este viaje no era venderle nada a nadie, sino recabar información, palpar ambiente, y validar algunas ideas muy embrionarias. Pero aún así encontré a faltar muchas veces tener un discurso muy bien preparado, con el cual poder iniciar conversaciones y poder discutir en detalle el problema que pretendia atacar y, sobretodo, el target de clientes objetivo, aquellos que van a estar dispuestos a desempolvar la billetera y pagar por mi producto.
  • Cercania: otra de las cosas que más escuche fue que si no estas aquí te va ser muy difícil introducirte en este mercado. Y no me refiero solo a inversión (la típica frase “Para apoyarte financieramente, los inversores te dicen que has de poder ir a verles en bicicleta.“), sino también a posibles clientes. Lo oí más de una vez, “¿donde tienen las oficinas? Si algo va mal, quiero acercarme a sus oficinas para picarles la cresta”. Otra cosa muy diferente es donde desarrolles el producto, y aquí me encontré diferentes criterios, des del que me decía que oficina en el valle y desarrollo en Europa porque los costes de los desarrolladores son más bajos aquí, hasta que el me decía lo contrario, el desarrollo siempre en el valle, que aunque sea más caro, es mucho más productivo.

Bueno, y aquí acabo. Espero que la lectura de esta aventura os haya sido entretenida y os haya picado el gusanillo de hacer una escapada a esta zona. Tengo que reconocer que una semana es poco, sobretodo si vienes solo y no planificas bien los contactos y reuniones, pero a dia de hoy podeis encontrar algún viaje a través de foros tecnológicos (como el de Global Business Trip) que os organizaran reuniones super interesantes ¿Alguien se anima?

Publicado en General | Etiquetado , , , , , | 4 comentarios

Cronica de una viaje al Silicon Valley – Dia 6

Último dia en Palo Alto. Muy a pesar mio, tengo que dejar la casa donde he dormido toda esta semana. Por cierto, no lo había mencionado antes, encontré esta casa gracias a airbnb, un sitio donde se pueden alquilar habitaciones en cualquier parte del mundo a un precio económico. Para ser sinceros, no las tenia todas conmigo antes de reservar, pero después de buscar referencias por Internet, vi que este sitio había superado recientemente la barrera del millón de noches alquiladas, que se dice rápido. Ahora, una vez probada la experiencia, puedo decir que ha sido fantastica, por el precio, por la localización, por el calor de un hogar en vez de una fria habitación de hotel, por la charla, … y además porque da la casualidad de que el que alquilaba la habitación es uno de los fundadores de esta web 🙂

Después de cargar la maleta en el coche, me he acercado a San José, donde he visitado The Tech, un museo dedicado a la ciencia y a la tecnologia.

Tengo que decir que la visita me ha encantado, es un museo pensado sobretodo para que el público aprenda mediante la interacción. Casi todo lo que tienen expuesto es para tocar, jugar, … una pena que en el viaje no vinieran mis hijos, ya que hubiesen disfrutado de lo lindo en la cámara infrarroja:

en el simulador de terremotos:

o en el increíble Google Liquid Galaxy:

Después del museo, coche de nuevo y hacia San Francisco, parando, como no, para ver algún que otro HQ más, como los de ebay, NetApp y Oracle, donde he podido ver el velero BMW Oracle Racing que participó en la Copa America del 2007:

Una vez en San Francisco, paseo por la zona de Union Square para comprar algún que otro regalito y a dormir a un hotel cercano al aeropuerto, que mañana vuelvo a casa y toca levantarse a la 4 de la mañana!

Publicado en General | Etiquetado , , , | Deja un comentario

Cronica de una viaje al Silicon Valley – Dia 5

Seguimos en la conferencia de OpenStack. A diferencia de ayer, hoy no ha habido presentaciones comerciales, solamente sesiones de diseño puramente técnicas.

Una de las sesiones más esperadas ha sido la propuesta de mover todo o parte del proceso de desarrollo de Launchpad a Github. Como siempre pasa en este tipo de discusiones, el ambiente se calienta pronto y se convierte en una guerra de religiones. Algunas perla que se ha escuchado durante la discusión: “Si no puedes aprender bzr, no eres lo suficientemente inteligente como para contribuir a OpenStack” 🙂

Al mediodía me he escapado un rato para comer con David Boronat en el Plug and Play Tech Center de Sunnyvale, un centro de aceleración de empresas tecnológicas (en la actualidad hay instaladas allí más de 300 start-ups!).

David es un emprendedor catalan que se ha convertido en un trotamundos 😉 Decidió un buen dia conocer mundo junto con su familia, y dicho y hecho, cogió su empresa, multiplica, y ya ha abierto oficinas en Santiago de Chile, Sao Paulo, Buenos Aires, Mexico D.F., Miami y ahora en el Silicon Valley. Su sinceridad al relatarme su experiencia y vivencias, y la explicación de la metodologia que utiliza para controlar su futuro en vez de dejarse arrastrar me han sido realmente útiles. Gracies David!

Después he vuelto otro ratito a la conferencia, y al finalizar las sesiones, me he acercado a la sede central de Intel, que está bastante cerca del hotel de las conferencias, a visitar el museo que tienen. No es muy grande, pero me ha resultado interesante conocer como fabrican los procesadores. Por si os interesa, he actualizado el set de Flickr con unas cuantas fotos del museo.

Mañana creo que voy a pasar de asistir a la conferencia, lo que queda son alguna que otra discusion técnica que no me interesa. Cuando me levante, ya veré como planteo el dia.

Publicado en General | Etiquetado , , , | Deja un comentario