POST PROYECTO
Resumen
Inicio
Llevaba con la idea de hacer una aplicación de horóscopo desde hacía unos meses, básicamente debido al auge de los frikis de instagram compartiendo estas cosas y de una articulo que leí de un crecimiento terrible de las apps de esto en el market.
Además, el año pasado me propuse sacar a producción una aplicación móvil cada año (El año pasado saqué una relacionada con eventos de pueblos pequeños).
Con estas dos cosas rondándome por la cabeza, y con las ganas de profundizar aún más en React Native me puse manos a la obra con la planificación.
Planificación
Tenía muy claro desde el principio que todo esto lo hacía para trastear con cosas nuevas, y con esto en mente planifique en consecuencia.
Necesitaria un alojamiento para mi NoSQL (Finalmente MongoDB) y un entorno donde pudiera automatizar el lanzamiento de los Scrapers (Con Python) encargados de recolectar la data y mantener mi aplicación viva.
Todos los caminos conducían a DigitalOcean y a mi Docker con CentOS que tengo montado para mi pagina web personal, blog, y backend del blog.
Pero quería llevarlo a un nivel más allá de meterme en la consola y hacer git pull origin master, quería implementar mi primer y propio entorno para poder hacer CD (Entrega continua en spanish)... Así que necesitaba un Jenkins.
Ejecución
Ya tenía todos los ingredientes preparados, Mongo para la data, Python para el scraping, React para la aplicación. Y de fondo, un Jenkins con sus pipelines orquestrando todo.
Planifique el proyecto para 1 mes de trabajo y al final fueron unos 40 días así que ni tan mal, también es cierto que acabe recortando algunas funcionalidades.
Ya había hecho muchos proyectos de React y React Native antes, así que por esa parte no tuve muchos problemas, más allá de aprender y profundizar aún más en algunos conceptos.
Los scrapers de Python no requerían de mucha complejidad, tuve guerra con Docker y Selenium (Para poder scrapear páginas que cargan el contenido en el cliente) pero fuera de esto todo fue bastante fluido.
No lleve Mongo mucho más allá, una vez me aprendí la sintaxis de los 3-4 comandos básicos para hacer querys, eliminar etc... Todo fue fluido como la seda.
Jenkins era EL MONSTRUO, trabajo con Jenkins pero nunca había montado uno de cero, y aún menos pipelines enteros.
Finalizando
Al final tambien tire de PHP para poder tener un poco de backend para poder visualizar datos y poder mandar notificaciones PUSH.
Fue una pena lo de Apple, pero bueno, en unos meses volveré a intentar subirla, y si cuela cuela.
En el tintero
Se ha quedado pendiente el poder consultar el dia anterior, o próximo, así como el horóscopo del mes y del año. Además de funcionalidades como logros por días seguidos o por días seguidos compartiendo el horóscopo para generar algo de retención.
Inversiones y expectativas
Recursos invertidos
- Si hablamos de euros invertidos, la inversión es muy baja, por no decir 0, la maquina virtual donde corre todo está en DigitalOcean y pago 11 € por ella al mes, pero allí no solo tengo la APP si no que tengo muchas otras cosas.
- Si hablamos de tiempo invertido, puedo estimar una media de 2 horas al día, durante 40 días = 80 horas.
Valoración económica
Teniendo en cuenta 80 horas, si valoro el precio de mis horas en 20-25 €, podríamos decir que vale unos 1500-2000 €.
Expectativas
Por ahora no voy a mover nada para sacarle crédito a la aplicación.
Conceptos en los que ahonde
Python
Nunca había trabajado con Python así que todo lo que hice fue puro aprendizaje, y para destacar cosas como BS, Selenium y cosas basicas como el venv, versiones, requirements, importación, sintaxis...
MongoDB
Era mi primera vez con NoSQL fuera de Redis, y ni tan distinto a una SQL de toda la vida. Aprendí sobre sus colecciones, organización, forma de insertar, buscar, borrar, modificar.
Jenkins
Aquí es donde creo que mas he crecido, o conseguido entender realmente el Jenkinsfile y como utilizarlo para conseguir los resultados deseados, ademas he mejorado mis skills con linux, y de paso algo de docker.
React Native
Donde mas experimentado era, no por eso he aprendido menos, cosas nuevas como AdMob y Clarifai. Y he solidificado mucho más mis skills con FlexBox y con React Native Navigation y su nueva API declarativa. Además me he llevado un extra de conocimiento en SVGS.
Futuros
El Blog
Estoy implementando (migrando) toda la lógica de wordpress wanna be de mi antiguo backend al nuevo, puede que haga un diario o seminario de esto, hay algunas cosas guays con como trata de imágenes, anchors automáticos, prismajs para los snippets de código...
C# y Godot
En paralelo estoy aprendiendo C# y Godot, y es muy posible que mi próximo y primer proyecto real con estas tecnologías sea un Flappy Bird ( Lo llamaré Flappy Bat ) para iOS y Android.
Viconsejos para gente sin experiencia
- Picad código en cantidad, sin miedo pero con un objetivo, por pequeño que sea, sera código de mierda, no tengáis ninguna duda, pero aprendereis mucho de ello, y con cada proyecto tendréis algo más de visión global y algo más de experiencia.
- Proyectos pequeños, cosas que aún cansados a mitad desarollo podéis terminarlo porque el final solo está unas horas allá (Un indexador de Emojis, una tienda de Colores, VUESTRA PÁGINA WEB).
- Un commit mínimo por día, aunque un dia no tenéis ganas de programar, forzados a ni que sea corregir un string, un texto, el borde de una caja, pero hacedlo, por dos cosas, para pillar la costumbre, y otra, lo que cuesta es empezar, una vez empiezas no te das cuenta y llevas 2 horas programando.
- Organización espartana, proyectos pequeños organización pequeña, mis dos herramientas de organización son Trello y Notepad++.
- Nadie nace aprendido, ni nadie sabe de todo mucho, la diferencia entre alguien sin experiencia y un senior es que el senior sabe escoger las herramientas adecuadas para cada proyecto, no porque sea más inteligente, sino porque SABE que existen esas herramientas grácias a darse de ostias antes.
- No os ralleis cuando entréis en la taberna/foro/noticia/articulo y veais a Desu/@Random escupiendo conceptos y frases de las cuales no sacais sentido alguno, yo la mayoria de veces tampoco no se ni de lo que habla pero de mis querys dependen que a personas reales les corten la luz y el gas o no. Con eso os quiero decir que no hace falta ser un leetcode expert ni un rockstar programmer para ganarse la vida bien de esto.
Repositorios