Simpsongo

SimpsonGo es un API en Go y cliente en Android que obtiene mensajes de los Simpsons.

Uso

¿Qué bases de datos uso?

¡Ninguna! Toda la información está guardada en “frases.txt”

Hay opciones mejores como emplear SQLite o MongoDB pero quise probar con un archivo y pues funciona! ✌😁

Claro, si surge la necesidad implementaré una de esas bases de datos.

Android MVP

También he creado una app en Android que consume el API. La cual está en PlayStore ✌ SimpsonGo-v1.1

Las últimas fases de desarrollo, con todas mis novatadas, las puedes ver aquí:

Creando ListView con todas las frases

// Frame de vídeo de youtube (Cuando tenga internet se los comparto, es algo pesado)

Personalizando últimos detalles

// Frame de vídeo de Youtube (Cuando tenga internet se los comparto, es algo pesado)

App Android en funcionamiento

Agradecimientos

Este es mi primer MVP de una App Android luego de haber empezado a estudiar en Platzi por tal motivo se lo dedico a mi profesora experta en Java y Android quien le guardo una gran admiración @anncode

También quiero manifestar mi agradecimiento a Julián quien me ha brindado excelentes consejos para compartir con la comunidad.

Del mismo modo, agradecer a Carlos que me ha facilitado una cuenta desarrollador Android y que sin su ayuda SimpsonGo no estaría en PlayStore ni las otras apps que me gustaría compartir.

¿De dónde vino la idea?

Pues necesitaba ir armando mi portafolio, y buscando por internet encontré este vídeo:

Allí aprendí que es mejor hacer una app que un pequeño grupo la ame que a estar haciendo una sin un usuario objetivo y pase desapercibida.

Entonces uní lo aprendido de varios cursos de Platzi y vídeos de youtube:

  • “No es programar por programar, es hacer una app porque solucionará un problema a la gente” Cómo conseguir trabajo en programación
  • “Si tienes que explicar la interfaz entonces está mal diseñada” Diseño de interfaces y UX
  • “No tine sentido hacer una app que a nadie le importe” LeanUX
  • “No debemos diseñar para nosotros sino para nuestro usario objetivo” Diseño de interfaces móviles
  • “No necesariamente debemos tener el MVP listo para pedir feedback, con que tenga los features principales es suficiente para empezar, aunque antes de eso debes validar tu idea (que haya personas que lo vayan a usar)” Agile
  • “Saber priorizar features es clave para un desarrollo Agile”Arquitectura de software
  • “Definir una meta es cool pero ponerle una fecha a esa meta y hacer todo lo posible para cumplirla hace que pasen cosas interesantes” BiiALab

Cometeré un acto de sincericidio la verdad es que no soy fan de los Simpsons aunque sí disfruto ver sus episodios.

Entonces decidí aplicar todo eso uniendo las tecnologías que más me gustan: Android, Docker, Golang y Machine Learning (falta pentesting pero esas están bien para empezar jejeje). Pero faltaba el tema principal y el usuario objetivo.

Entonces navegando por twitter, me encontré con uno de una mujer que dijo algo como “Uso metáforas de los Simpson para todo porque me gusta mucho el humor de la serie y es aplicable al día a día”. En ese momento recordé que un buen amigo también es fanático de la serie y de vez en cuando lanzaba esas metáforas que quedan justas para el contexto en que las usa.

Entonces me pregunté, si un amigo o amiga quisiera llamar la atención de esa mujer usando metáforas de los Simpsons sin neceseariamente verse todos los capítulos ¿cómo lo haría? Y BOOM llegó la idea!!!

Efectivamente, me inspiró una mujer 😍

¿Hubo momentos difíciles?

Uff por montones y estuve a punto de rendirme en varias ocasiones sobre todo cuando algo que debería funcionar no lo hace (algo típico cuando programo).

Problema Causa Solución
No iba a estar en PlayStore No tenía cuenta desarrollador ¡Tenía Google Drive!
El PaaS tenía limitaciones en su plan free No dispone de bases de datos, tiene límite de conexiones y se me acabó el saldo para los logs ¡Persistir las frases en un archivo de texto!
Tengo problemas de internet Para probar el API durante el desarrollo ¡Yo hice el API y sabía cómo iba la respuesta así que desarrollaba a ciegas hasta que llegara algo de internet!
Tengo poco tiempo libre Muy pocas horas para desarrollar ¡Aprendo a administrar mi tiempo con vídeos de youtube!
Ausencia de Android para probar mis Apps No tengo android. ¿Un programador Android sin un Android? Irónico ¿no? jejeje ¡Uso Genymotion y estaba atento a los errores que me reportaban la comunidad de Platzi en sus dispositivos físicos!

¿Lo ves? Si yo pude tú también ✌

¿Qué me motivaba a continuar? Programar es divertido y mi mayor motivación es dejar que sea un hobbit y convertirlo en una profesión. Codeando con los mejores programadores. ✌

Esas ganas de no rendirse, distribución de tiempo, sacar energías extras, la importancia de rodearse con personas con buenas energías y más las he aprendido con BiiALab, Juan Diego Gómez y Edmundo Velzco. Pero estos vídeos me han marcado:

“La suerte existe, pero viene cuando la preparación y la oportunidad se encuentran” - Adriana Macías

“Si no sabes vender ni hasta novia consigues” - Jürgen Klaric

“Si no estás dispuesto a luchar por tus sueños, te mereces la vida que hoy tienes” - Juan Diego Gómez

Para finalizar te dejo este pensamiento que siempre lo tengo presente cuando el camino es largo:

“Da tu primer paso con fe, no es necesario que veas toda la escalera completa, solo da tu primer paso” Martin Luther King

¿Qué hay de las versiones siguientes? de la API y la App

Versión v1.3:

  • Incluir imagenes de personajes
  • Persistencia entre fragments
  • Animación durante la carga
  • Actualización con Scroll en allFrases
  • Recarga a reconexión
  • Validación de disponibilidad de red

Versión v2.x:

  • Aumentar la base de datos de frases
  • Implementar búsqueda de frases con Machine Leaning (no tengo idea de cómo voy hacer esto pero qué tan complicado puede ser jejeje)

Si tienes alguna idea de un punto de mejora no dudes en dejarlo aquí abajo en los comentarios o bien en Play Store o en mi Twitter.

Hablemos del código del API

En primera utilizo el Framework Echo. El cual es minimalista y escalable.

El código lo tienen disponible en simpsongo.now.sh/_src

Estructura para interactuar en la API

type showMessage struct {
	Message string `json:"message" xml:"message"`
	Author  string `json:"author" xml:"author"`
}

Funciones

  • countLinesFile: Abre el archivo donde están las frases y cuenta la cantidad de líneas del mismo.
  • readFile: Abre el archivo, lee todas las líneas y las guarda en un Slice.
  • selectLine: Selecciona una línea del archivo “aleatoriamente” para mostrar.
  • parseMessage: Me permite convertir el mensaje en el archivo al objeto struct para interactuar con el API y viceversa.
  • allMessages: Obtiene todos los mensajes guardados en el archivo.

Establecemos las rutas y los métodos a ejecutar

func main() {
	e := echo.New()
	e.GET("/", selectMessage)
	e.GET("/all", allMessages)
	e.Logger.Fatal(e.Start(":8000"))
}

Recursos que he usado

Gracias por leer todo el artículo ✌

Osmandi Written by:

Ing. Químico y Dev
Apasionado por los procesos Químicos, programación en Android, BackEnd en Go, Machine Learning, Pentesting y Linux

comments powered by Disqus