Entiendo como side project un prototipo que desarrollas en tu tiempo libre como via de escape para salir de la rutina, aprender cosas nuevas y a lo mejor como semilla para conseguir algún día un trabajo que te permita ser independiente economicamente.
Si desarrollas un side project, puedes comentarlo aquí :)
Mi último side project: checkfy es un servicio para conseguir feedback para tu web o app de personas fuera de tu circulo de contacto.
tecnologías php, mysql, apache, ipn paypal.
estado: standby, pese poder validar la idea, 2 personas han pagado para usar el servicio, me cuesta moverlo para conseguir nuevos clientes.
Mi side project es una web de juegos, está en http://www.pacojuegos.com/, no es nada sorprendente técnicamente a simple vista, pero al ser una web con casi todo el contenido es estático, me he plateando el reto de hacerla lo más escalable y con un alto nivel de disponibilidad como MVP.
Lleva ya más de un año al aire y sólo ha estado caída 4 horas porque me olvidé de renovar el plan de hosting en OVH.
Voy a describir de la forma más rápida posible la arquitectura e infraestructura:
- Generación de contenido: todos los procesos se hacen offline con scripts en bash y Perl (lo sé, muy old school). La información está almacenada en una base de datos SQLite (después hablaré de ello) y luego se generan miles de páginas de contenido en cuestión de segundos utilizando estos scripts. Actualmente estoy evaluando la migración a MiddleMan, que es un generador de contenido estático hecho en Ruby on Rails, estoy segurísimo que será mucho más lento que los scripts actuales, pero es más hipster :)
- SQLite. Por qué? Resulta que mi servidor principal es una instancia micro de Amazon EC2, obviamente tiene muy bajas prestaciones, así que no tiene sentido tener un Postgres o un MySQL consumiendo recursos, creo que la decisión no ha sido equivocada de momento basado en la necesidades del sistema.
- Buscador: uso el motor Sphinx para el indexado de todo el contenido, está casi como viene de serie y no lo he tuneado mucho por falta de tiempo y porque tampoco es un tema que me apasione demasiado. El mismo Sphinx se encarga de generar el sitemap para Google y generar un log para posteriormente hacer un ranking de los juegos más buscados.
- Infraestructura: es la parte que más me gusta y por la que inicié el proyecto. Nos hospedamos en Amazon EC2, OVH y Google PageSpeed Service. En EC2 está el servidor de contenido, el alma del sitio, donde "the magic happens". Se hace un snapshot diario a EBS de la imagen a modo de backup y se sincronizan los ficheros estáticos tanto a S3 como a OVH como failover.
El contenido que se hospeda en S3, se usa sólo como backup porque el tráfico es muy costoso en Amazon y se sirve todo desde OVH (en realidad OVH es sólo un servidor de origen, ya contaré por qué), la sincronización se hace de forma automática usando un script en Python que implementa la API de Amazon S3.
El contenido siempre se sirve desde EC2, con los estáticos servidos desde OVH, pero tengo instalado un Load Balancer que se activa en caso de que OVH falle para que tire directamente de S3, vale la pena pagar el coste por unas horas y no sufrir el downtime.
Cuando se lanzó la web, monté un CDN utilizando Cloudfront, pero empezamos a tener mucho tráfico y la factura de Cloudfront se comía casi todos los ingresos de AdSense, así que por eso lo abandoné y me decanté por la arquitectura actual. Pero para hacer un lanzamiento, Cloudfront es recomendadísimo, es lo que más rápido funciona sin duda.
CDN: Pues gracias a alternativas (casi) gratuitas, los costes de tráfico son mínimos. En un principio servíamos HTML desde CloudFlare, pero luego nos movimos a PageSpeed Service de Google que nos han ofrecido una cuenta de prueba y es una maravilla, especialmente porque permite servir imágenes y demás binarios, mientras que CloudFlare no lo hace. Además PageSpeed re-escribe la web optimizándola a un nivel imposible de mejorar, sirviendo imágenes en formato WebP para Chrome, minimizando CSS, JS, conviertiendo imágenes pequeñas a Base64, entre otras cosas, de forma transparente.
Bueno, se me quedan unas cuantas cosillas, pero me estoy alargando mucho. Si os interesa, podría contarlo con detalle en un Betabeers o en el bar más cercano.
Mi side-project se llama Nofity, https://nofity.com, y se trata de un gestor de notas muy sencillo, básico y rápido. Me explico:
Soy usuario de teclado, usaba Evernote para gestionar mis notas pero me di cuenta que teniendo la pestaña del navegador cerrada y queriendo crear una nueva nota tenia que hacer 4 clicks! sí, 4 clicks para poder crear una nota. Me parecen demasiados para poder crear una nota sencilla y más si quiero crear varias rápidamente. Si usaba su WYSIWYG entonces tenía que teclear infinidad de veces la tecla TAB para poder pasar del título al contenido. Así que me cansé y decidí crear mi propio sistema de notas, básico, ligero, pensado para usuarios de teclado y sobretodo rápido. Y ya ni hablar de crear categorías y asignarlas rápidamente...
Bien, Nofity está pensado para escribir notas rápidamente pudiendo asignar categorías, listas y Spaces(explicado más adelante) a una nota.
Por ejemplo: comprar leche #shop *todo
esto crear la nota "comprar leche" con la categoría "shop" y en la lista "todo"
ahora si quiero buscar notas por ejemplo en la lista "todo", entonces en la misma caja de crear notas puedo escribir: "*todo" y me mostrará todas las notas que estén asignadas a la lista "todo". Es decir, puedo manejar casi todas las acciones desde una misma caja de texto, a la que he llamado "smartbar"
Además solo tengo que abrir una nueva pestaña, escribir nofity.com y ya puedo empezar a crear tantas notas como quiera, a cada enter guardo y empiezo a crear una nueva nota.
También he creado el sistema de Spaces para poder crear espacios colaborativos entre varios usuarios, por ejemplo creo el Space front-end. Ahora, cada vez que un usuario publique una nota en mi Space front-end una nueva nota me llegará, a mi y a las personas que esten compartidas en ese Space, una notificación via email para estar siempre al día. Claro que siempre se pueden crear notas públicas.
Y otra killer feature es que se puede comentar en las notas de los usuarios, por ejemplo para hacer reviews, debates...
Es algo que voy desarrollando poco a poco en los pocos ratos libres que tengo y hay un montón de cosas a mejorar, pero quería algo funcional rápidamente y que se adaptara a mis necesidades. Mi idea no es hacerme millonario con esto, es solo una herramienta para mi y para quienes les sea útil, además me sirve para nuevos trucos del lado del servidor y escapar un rato de mi mundo de front-end :D
En cuanto a la parte técnica:
* escrito en Ruby usando Sinatra (Ruby!, no Ruby on Rails)
* como DVCS uso Git, qué si no.
* testeado con rspec y usando jenkins a cada push a master para ejecutar los tests.
* sqlite + mysql y pensando en incorporar un Redis.
* caché de disco para todos los datos de un usuario durante su sesión. Esto es lo que le da bastante velocidad.
* preparando la versión 0.2 con gran parte de lógica en cliente usando backbone.js, para poder hacer que sea más rápido aun y minimizar la carga del servidor. Además de cosas como drag and drop para los tímidos usuarios de ratón.
* escrito con Vim.
Pues yo presento mi side project: http://www.parkuik.com. Básicamente es una "red social" en la que todos tendríamos que aportar nuestro granito de arena para conseguir una base de datos pública y accesible por todo el mundo para encontrar aparcamiento en cualquier parte del mundo.
Actualmente ya tenemos registrados mas de 20.000 parkings (la mayoría cotejados con Google) y ya tenemos en Google Play una primera versión de la aplicación para Android. Ahora mismo esta hace mas bien poco, pero está publicada sobretodo para que puedan/podais opinar sobre el diseño y como está quedando :)
En cuanto a la parte técnica:
- El servidor está alojado en Linode (barata alternativa a ec2) y desarrollado con node.js y express montado encima.
- Para la base de datos estoy usando MongoDB (las consultas geolocalizadas son una gozada!) con mongoose para acceder a ella de manera aún mas facil. Tambiémn me sirvió para desarrollar mi propio paquete npm: mongoose-cursor
- Para la parte cliente uso cosas como backbone.js
- Como framework CSS uso Bootstrap, aunque eso si, muy personalizado, hasta tal punto que creo que no recuerda demasiado a Bootstrap! Por supuesto no es tan bonito!
Os invito a que entreis y la critiqueis lo mas que podais (siempre de manera constructiva :)) y si quereis comentarme algo podeis hacerlo en mi twitter @jmanzanomorilla
Aunque se supone que puedo probar el servicio en algunas ciudades sin estar registrado, siempre me sale este mensaje: "You're not logged! You're gonna miss the best part of Parkuik =( "
Lo siento, pero no te voy a dar mis datos sin conocer primero los beneficios a los que podría acceder. Nunca lo he probado, pero apostaría que los "trial before registration" siempre tienen un mejor ratio de conversión que los funnels opuestos.
Me parece correcto tu comentario, pero es que realmente por ahora lo único que puedes acceder una vez registrado es comentar, votar y añadir parkings y si que me gustaría que estuvieran registrados los usuarios que van a hacer eso. Para todo lo demás puedes hacerlo como usuario no registrado.
Entiendo perfectamente tu problemática y la tendré en cuenta, y aunque no te haya parecido bien, de todas formas, muchas gracias por probarlo.
Yo igual quisiera pasarles mi sitio para que revisaran las cuestiones de optimización y diseño http://guiadelviajero.mx/ quedo al pendiente de sus comentarios.
Si desarrollas un side project, puedes comentarlo aquí :)
Mi último side project:
checkfy es un servicio para conseguir feedback para tu web o app de personas fuera de tu circulo de contacto.
tecnologías php, mysql, apache, ipn paypal.
estado: standby, pese poder validar la idea, 2 personas han pagado para usar el servicio, me cuesta moverlo para conseguir nuevos clientes.
11/03/2013 17:01
Lleva ya más de un año al aire y sólo ha estado caída 4 horas porque me olvidé de renovar el plan de hosting en OVH.
Voy a describir de la forma más rápida posible la arquitectura e infraestructura:
- Generación de contenido: todos los procesos se hacen offline con scripts en bash y Perl (lo sé, muy old school). La información está almacenada en una base de datos SQLite (después hablaré de ello) y luego se generan miles de páginas de contenido en cuestión de segundos utilizando estos scripts. Actualmente estoy evaluando la migración a MiddleMan, que es un generador de contenido estático hecho en Ruby on Rails, estoy segurísimo que será mucho más lento que los scripts actuales, pero es más hipster :)
- SQLite. Por qué? Resulta que mi servidor principal es una instancia micro de Amazon EC2, obviamente tiene muy bajas prestaciones, así que no tiene sentido tener un Postgres o un MySQL consumiendo recursos, creo que la decisión no ha sido equivocada de momento basado en la necesidades del sistema.
- Buscador: uso el motor Sphinx para el indexado de todo el contenido, está casi como viene de serie y no lo he tuneado mucho por falta de tiempo y porque tampoco es un tema que me apasione demasiado. El mismo Sphinx se encarga de generar el sitemap para Google y generar un log para posteriormente hacer un ranking de los juegos más buscados.
- Infraestructura: es la parte que más me gusta y por la que inicié el proyecto. Nos hospedamos en Amazon EC2, OVH y Google PageSpeed Service. En EC2 está el servidor de contenido, el alma del sitio, donde "the magic happens". Se hace un snapshot diario a EBS de la imagen a modo de backup y se sincronizan los ficheros estáticos tanto a S3 como a OVH como failover.
El contenido que se hospeda en S3, se usa sólo como backup porque el tráfico es muy costoso en Amazon y se sirve todo desde OVH (en realidad OVH es sólo un servidor de origen, ya contaré por qué), la sincronización se hace de forma automática usando un script en Python que implementa la API de Amazon S3.
El contenido siempre se sirve desde EC2, con los estáticos servidos desde OVH, pero tengo instalado un Load Balancer que se activa en caso de que OVH falle para que tire directamente de S3, vale la pena pagar el coste por unas horas y no sufrir el downtime.
Cuando se lanzó la web, monté un CDN utilizando Cloudfront, pero empezamos a tener mucho tráfico y la factura de Cloudfront se comía casi todos los ingresos de AdSense, así que por eso lo abandoné y me decanté por la arquitectura actual. Pero para hacer un lanzamiento, Cloudfront es recomendadísimo, es lo que más rápido funciona sin duda.
CDN: Pues gracias a alternativas (casi) gratuitas, los costes de tráfico son mínimos. En un principio servíamos HTML desde CloudFlare, pero luego nos movimos a PageSpeed Service de Google que nos han ofrecido una cuenta de prueba y es una maravilla, especialmente porque permite servir imágenes y demás binarios, mientras que CloudFlare no lo hace. Además PageSpeed re-escribe la web optimizándola a un nivel imposible de mejorar, sirviendo imágenes en formato WebP para Chrome, minimizando CSS, JS, conviertiendo imágenes pequeñas a Base64, entre otras cosas, de forma transparente.
Bueno, se me quedan unas cuantas cosillas, pero me estoy alargando mucho. Si os interesa, podría contarlo con detalle en un Betabeers o en el bar más cercano.
Gracias por leer :)
11/03/2013 19:43
Soy usuario de teclado, usaba Evernote para gestionar mis notas pero me di cuenta que teniendo la pestaña del navegador cerrada y queriendo crear una nueva nota tenia que hacer 4 clicks! sí, 4 clicks para poder crear una nota. Me parecen demasiados para poder crear una nota sencilla y más si quiero crear varias rápidamente. Si usaba su WYSIWYG entonces tenía que teclear infinidad de veces la tecla TAB para poder pasar del título al contenido. Así que me cansé y decidí crear mi propio sistema de notas, básico, ligero, pensado para usuarios de teclado y sobretodo rápido. Y ya ni hablar de crear categorías y asignarlas rápidamente...
Bien, Nofity está pensado para escribir notas rápidamente pudiendo asignar categorías, listas y Spaces(explicado más adelante) a una nota.
Por ejemplo: comprar leche #shop *todo
esto crear la nota "comprar leche" con la categoría "shop" y en la lista "todo"
ahora si quiero buscar notas por ejemplo en la lista "todo", entonces en la misma caja de crear notas puedo escribir: "*todo" y me mostrará todas las notas que estén asignadas a la lista "todo". Es decir, puedo manejar casi todas las acciones desde una misma caja de texto, a la que he llamado "smartbar"
Además solo tengo que abrir una nueva pestaña, escribir nofity.com y ya puedo empezar a crear tantas notas como quiera, a cada enter guardo y empiezo a crear una nueva nota.
También he creado el sistema de Spaces para poder crear espacios colaborativos entre varios usuarios, por ejemplo creo el Space front-end. Ahora, cada vez que un usuario publique una nota en mi Space front-end una nueva nota me llegará, a mi y a las personas que esten compartidas en ese Space, una notificación via email para estar siempre al día. Claro que siempre se pueden crear notas públicas.
Y otra killer feature es que se puede comentar en las notas de los usuarios, por ejemplo para hacer reviews, debates...
Es algo que voy desarrollando poco a poco en los pocos ratos libres que tengo y hay un montón de cosas a mejorar, pero quería algo funcional rápidamente y que se adaptara a mis necesidades. Mi idea no es hacerme millonario con esto, es solo una herramienta para mi y para quienes les sea útil, además me sirve para nuevos trucos del lado del servidor y escapar un rato de mi mundo de front-end :D
En cuanto a la parte técnica:
* escrito en Ruby usando Sinatra (Ruby!, no Ruby on Rails)
* como DVCS uso Git, qué si no.
* testeado con rspec y usando jenkins a cada push a master para ejecutar los tests.
* sqlite + mysql y pensando en incorporar un Redis.
* caché de disco para todos los datos de un usuario durante su sesión. Esto es lo que le da bastante velocidad.
* preparando la versión 0.2 con gran parte de lógica en cliente usando backbone.js, para poder hacer que sea más rápido aun y minimizar la carga del servidor. Además de cosas como drag and drop para los tímidos usuarios de ratón.
* escrito con Vim.
11/03/2013 22:39
11/03/2013 21:13
Actualmente ya tenemos registrados mas de 20.000 parkings (la mayoría cotejados con Google) y ya tenemos en Google Play una primera versión de la aplicación para Android. Ahora mismo esta hace mas bien poco, pero está publicada sobretodo para que puedan/podais opinar sobre el diseño y como está quedando :)
En cuanto a la parte técnica:
- El servidor está alojado en Linode (barata alternativa a ec2) y desarrollado con node.js y express montado encima.
- Para la base de datos estoy usando MongoDB (las consultas geolocalizadas son una gozada!) con mongoose para acceder a ella de manera aún mas facil. Tambiémn me sirvió para desarrollar mi propio paquete npm: mongoose-cursor
- Para la parte cliente uso cosas como backbone.js
- Como framework CSS uso Bootstrap, aunque eso si, muy personalizado, hasta tal punto que creo que no recuerda demasiado a Bootstrap! Por supuesto no es tan bonito!
Os invito a que entreis y la critiqueis lo mas que podais (siempre de manera constructiva :)) y si quereis comentarme algo podeis hacerlo en mi twitter @jmanzanomorilla
11/03/2013 22:38
500 TypeError: /home/parkuik/views/email_required.jade:34 32| } 33| }); > 34| $('.id').val('#{auth.user['_id']}'); 35| }) 36| Cannot read property '_id' of undefined
11/03/2013 23:55
11/03/2013 23:55
12/03/2013 12:09
Lo siento, pero no te voy a dar mis datos sin conocer primero los beneficios a los que podría acceder. Nunca lo he probado, pero apostaría que los "trial before registration" siempre tienen un mejor ratio de conversión que los funnels opuestos.
12/03/2013 16:47
Entiendo perfectamente tu problemática y la tendré en cuenta, y aunque no te haya parecido bien, de todas formas, muchas gracias por probarlo.
15/11/2017 02:02