Devoogle, un agregador de recursos de programación.
Por fin he terminado la primera versión de un nuevo proyecto personal que he estado desarrollando durante algunas semanas, entre las navidades pasadas y estas últimas de abril y mayo. Se llama Devoogle (de Development y Google ( 😐 )) y básicamente se trata de un agregador de enlaces orientado al desarrollo de software. En el momento de la puesta en producción tenía 3.466 recursos etiquetados y clasificados.
Disclaimer (03–03–2019): Una mejora importante ha sido añadida a Devoogle y ahora puedes descargarte el audio de vídeos de Youtube. Puedes leer más en este artículo.
¿Qué es Devoogle?
Devoogle es un agregador de enlaces orientado a recursos para cualquier persona interesada en el desarrollo de software, estos recursos se encuentran clasificados por categorías y etiquetados por conceptos o palabras clave. Además de ir agregando contenidos de forma automática, un usuario registrado pude agregar todos aquellos que crea conveniente para su interés o el interés general.
Es algo más que un proyecto mínimo viable pero ni mucho menos es un proyecto acabado, queda mucha tarea por delante. Sin prisa pero sin pausas, poco a poco.
Motivación
- Programar: Si, básicamente, programar. Es lo que tiene dedicarse a una profesión que además es un hobbie.
- Aprender: Cuando uno se enfrenta a un nuevo proyecto siempre aprende cosas nuevas a lo largo de su desarrollo al mismo tiempo que va cogiendo experiencia.
- Entrenar: Como programador, para poder mejorar hay que entrenarse. De la misma forma que los futbolistas se entrenan cada día y no solo juegan al fútbol el día del partido, creo que los que nos dedicamos al desarrollo del software debemos entrenarnos el máximo tiempo posible para adquirir, interiorizar y mejorar hábitos y buenas prácticas.
- Organizar: Hace varios años ‘descubrí’ la gran cantidad y calidad de los recursos disponibles para los que nos dedicamos al desarrollo de software. Conferencias grabadas en vídeo, charlas, podcasts, meetups… Personalmente, tengo enlaces de contenidos repartidos por todos sitios sin un orden claro, así que se me ocurrió desarrollar una librería en la que pudiera llevar el control y orden de los recursos más interesantes que podía encontrar.
Detalles de implementación
Devoogle está desarrollado en PHP con el framework Laravel. El proyecto está alojado en Github y por supuesto disponible para todo el mundo. Como comenté anteriormente, se puede ver las dedicaciones que a este proyecto tuve en las pasadas navidades y en las últimas semanas.
API’sy RSS
Devoogle me ha servido para practicar con los siguientes elementos:
- OAuth2: Es posible crearse una cuenta de usuario partiendo de una cuenta de Google, Twitter o Github.
- API’s: En su momento tuve que ‘pelearme’ un poco con el API de Youtube, sobre todo para obtener todos los vídeos de un canal. Podría parecer sencillo pero cuando son muchos, no es posible obtenerlos todos en una sola petición, por lo que hay que ir pidiéndolos por rangos de fechas… y eso lo complica todo un poco.
- Rss: Muchas de las fuentes son Rss de páginas de podcasts o incluso posts.
La obtención de los recursos es tan ‘sencilla’ como ‘pasearme’ por un listado de fuentes que tengo añadidas y obtener los nuevos. Entre estas fuentes están varios canales de Youtube y páginas con podcasts y webs.
Por ejemplo, en la primera obtención de vídeos de Youtube, se ha extraído el siguiente número de recursos de los canales correspondientes:
Posteriormente, solo se irán añadiendo los nuevos de cada uno.
Además, cada vez que se trata un recurso, se busca en su descripción enlaces a otras páginas para buscar contenido relacionado. Por ejemplo, si en la descripción de un vídeo de Youtube hay un enlace hacia iVoox, entiendo que es su versión en podcast, por lo que añado ese recurso como relacionado. Próximamente buscaré enlaces a Slideshare o similares para así tener relacionado vídeo, podcast y diapositivas.
Siguiendo los pasos descritos en un post que escribí hace un año sobre como instalar un certificado digital desde cero, lo he llevado a cabo en este proyecto y ha quedado instalado sin problemas.
Categorización y etiquetado
Una obsesión que tenía con este proyecto era organizar todos los recursos de la mejor forma posible de una forma automática, rápida y sencilla. Para ello, he creado cinco categorías para los recursos: vídeos, audios, diapositivas, documentos (enlaces a pdfs, txts…etc) y webs.
El etiquetado de los recursos lleva un proceso algo más complejo pero bastante interesante. El caso es que tengo definidas unas etiquetas con sinónimos, y al crear los recursos (próximamente lo hará un cron cada noche para repasar los nuevos), se comprueba si la descripciones o título de cada recurso tiene una palabra que exista como etiqueta o sinónimo y, de ser así, se procede a relacionar recurso y etiqueta.
Existe un etiquetado por autores, eventos, tecnologías y un ‘varios’. Poco a poco se irán añadiendo etiquetas, mientras más mejor y, algún día, las paso a la base de datos :D
Funcionamiento
El funcionamiento para usuarios no registrados es bastante sencillo. Es un simple buscador de recursos, nada del otro mundo, con sus listados, búsquedas, filtrado…
Los usuarios registrados tienen más opciones de interacción con la página:
- añadir recursos: si te apetece, puedes añadir un recurso a la página para que esté disponible para todos. También puedes modificarlo o incluso eliminarlo si te arrepientes :)
- Marcar recursos como favoritos, para ‘verlos después’ o como vistos, para facilitar un poco más el orden de revisión de los mismos.
- Añadir distintos formatos a los recursos: La idea principal es mantener la información lo más relacionada posible, por eso, para cada recurso es posible añadir un formato distinto. Por ejemplo, si tenemos un vídeo de Youtube, es posible añadir para el mismo un enlace un enlace a sus diapositivas o hacia su versión podcast.
Diseño
Como diría el presentador de Bricomanía:
‘fácil, sencillo y para toda la familia’
No es el diseño de webs un área en el que yo destaque. Me he conformado con intentar que se vea bien en todo tipo de pantallas y dejar la información medianamente organizada. Si alguien se anima a mejorarlo, adelante, es libre de hacerlo.
¡Ah!, si a alguien se le ocurre algún logo ‘guapo’ pues le estaré eternamente agradecido.
Privacidad
Todo el contenido indexado en Devoogle proviene de fuentes de datos abiertas como API’s o RSS públicas de los creadores de los contenidos respetando siempre el original de los mismos.
De los usuarios registrados, únicamente se obtiene el email para identificar de manera inequívoca a aquellos que tendrán funcionalidades extras. Por supuesto, nunca se tratará ninguna información fuera del contexto del uso en Devoogle.
Para los nombres he ‘frikeado’ un poco, te cuento. Si te creas una cuenta de usuario, bien de forma manual o bien usando tu cuenta de Google, Twitter o Github, no me interesa para nada quién seas, como dije anteriormente, lo único requerido es el email, así que el nombre real que tengas en la red social que uses lo he cambiado por un nombre de un pueblo de Extremadura aleatorio, espero que te guste el que te toque :)
Próximamente
Tengo en mente bastantes mejoras para la página, entre las más importantes están las siguientes:
- Seguir añadiendo fuentes de recursos: Ivoox, Grupos de Google Plus, más canales de Youtube…etc. Lo importante es que se pueda automatizar.
- Añadir You-Get: Esta aplicación sirve para descargarte vídeos o audios directamente desde muchas fuentes, como Youtube. Esto a mi personalmente me vendría muy bien para obtener solo el audio de un vídeo.
- Añadir motor de búsqueda: Ahora mismo, las búsquedas se realizan por un simple LIKE. Creo que añadir un motor de búsqueda tipo Sphinx, ayudaría a obtener mejores resultados.
- Añadir una “cartera de recursos”: Todavía no sé muy bien como llamarlo pero si el concepto que es, lo resumo. Un usuario podrá crearse una carpeta y llamarla por ejemplo ‘clean code’, y a esa cartera podrá asociarle todos los recursos que vaya viendo sobre ese tema que le parezcan relevantes. Digamos que será una forma en la que los usuarios puedan organizar la información por conceptos o temas de conocimiento.
- Implementar algún sistema de puntuación o de ranking para los recursos para resaltar de alguna manera aquellos que sean mejores.
- Me apetece usar un sistema como Redis, no lo he hecho nunca y alguna utilidad le encontraré aquí.
Agradecimientos
Quisiera desde aquí dar las gracias a todas aquellas entidades públicas, privadas, empresas, personas individuales…etc., que comparten sus conocimientos y experiencias de forma pública para que todos podamos aprender y beneficiarnos de ellas. Muchas gracias a todos.
En la siguiente página se puede ver el listado de todas las fuentes de datos que he utilizado hasta el momento: Ver las fuentes de recursos.
Colaboraciones
El proyecto está en Github, cualquier mejora que creas conveniente será bienvenida. Si además conoces algún canal interesante de Youtube con contenido para programadores que aún no haya incluído o alguna página web, blog…etc., escríbeme un email (mpijierro[arroba]gmail.com) o deja un sugerencia en Github.
Todo lo que sea mejorar la página en cualquier sentido, será bueno para todos así que muchas gracias por adelantado.
Esto es todo de momento. Cualquier comentario, duda, sugerencia de mejora, es bienvenido.
¡Chimpún!