Lector de RSS web, libre y en Java
Desde que Google decidió discontinuar su lector de RSS, decidí aprovechar la situación para desarrollar Uno Reader, un lector de RSS web, que estoy programando como software libre.
La idea de Uno Reader es ser un proyecto para mostrar buenas prácticas de programación usando varios frameworks modernos. En particular, la aplicación puede resultar de interés para quienes quieran aprender:
- Spring MVC, para servicios REST con JSON.
- Spring Data, como implementación de repositorios para acceder a datos.
- Spring Security, para autenticar y autorizar usuarios, con seguridad declarativa usando anotaciones.
- JPA con Hibernate, a través de Spring Framework.
- HtmlStapler, como filtro web para combinar archivos css y js.
- Apache Tiles 3, como framework de templating para las páginas.
- Logback, como framework de log.
- JUnit con HSQLDB como base de datos en memoria para agilizar las pruebas.
- jQuery, jsrender y otras librerías JavaScript para la interfaz de usuario.
Todo el código fuente está liberado bajo Mozilla Public License (MPL), así que son libres de usarlo a gusto. Pueden probar la aplicación en http://www.unoreader.com y descargar el código fuente aquí.
Me encantaría recibir sugerencias y críticas, especialmente sobre la calidad del código y formas para hacerlo más sencillo y que pueda ser de más utilidad como aplicación de ejemplo para quienes estén aprendiendo.
Reader Comments (13)
Gracias por compartirlo, esta es la mejor manera de devolver a la comunidad lo que ella ha hecho por ti.
Saludos.
Un pequeño consejo de usabilidad: Si no le vas a dejar ver nada si no tiene un usuario, IMHO es mejor no mostrarle nada que parezca que va a funcionar. Lo digo por que nada mas entrar ves ejemplos de feeds, "dale aqui y verás..." y luego no, si no tienes usuario nada de nada.
Ah, y si se publica la noticia como "javahispano" y no pone nombre en ningún sitio, no sabemos a quien hablamos :).
Gracias por compartir tu trabajo ;) y espero algún día devolver a la comunidad todo lo que aprendí ;)
Muy bueno!!!!
Una pregunta nomás, porqué utilizás las anotaciones de spring (por ej. @RequestMapping) y no las de jax-rs?
Igualmente, es muuuy bueno y ya me lo estoy bajando y analizando que tengo mucho que aprender (sobre todo de spring security)
Saludos
Gracias a todos por los comentarios! (soy el autor del proyecto, no quedó en la nota que publicaron).
Guatdefu: si, quiero cambiar la portada de la aplicación, especialmente para los usuarios nuevos que no están registrados. Realmente no está claro ahora.
Diego: la aplicación utiliza ya varias cosas de Spring Framework, y la verdad me resulta muy práctico para exponer servicios REST. Igualmente, tendría que darle una mirada más detallada a jax-rs para ver cómo funciona, no lo tengo tan presente.
Respecto de la calidad del código. Veo que está hecho para construirse con Maven, así que la integración con la herramienta SonarQube es, prácticamente, inmediata.
¿Has realizado algún tipo de medición de calidad del código con esta herramienta?
La utilizo asiduamente, y te aseguro que resulta muy útil para eliminar malas prácticas del código y para obtener métricas lo más objetivas posibles.
Vaya por delante que creo que hay que agradecer esfuerzos como este, y más aún si están tan bien hechos como UnoReader. Ya podrían aprender muchas empresas a entregar código con un nivel de calidad tan bueno como esta aplicación.
A lo que iba. He tenido unos minutos para instalar el SonarQube y modificar el pom para que enlace con el sonar. No he podido replicar las pruebas, me fallan todas las que tienen que ver con persistencia (no veo ningún perfil para pruebas en memoria, por ejemplo), así que me quedo con las ganas de ver la cobertura. Pero el código está impecable. Apenas tiene unos asuntos (así se llaman las incidencias relacionadas con la falta de cumplimiento de las reglas en el SonarQube), que por otra parte se pueden ignorar, ya que no afectan a la calidad del código en sí.
Si hay un par de peros que ponerle al código son los siguientes (manías mías, nada más):
- Apenas está documentado: Un 10,4% de la API.
- El número y tamaño de dependencias es enorme, en relación a la aplicación en sí (35 archivos de aplicación, unos 200KiB en el classes frente a casi 20MiB en 62 bibliotecas).
Dejo el enlace hacia el resumen de SonarQube de la aplicación, por si alguien tiene curiosidad, para echar un vistazo a los datos de UnoReader, una aplicación impecable, en cuanto a la calidad del código escrito.
Para finalizar, un buen programa que cubre una necesidad que muchos tienen tras el cese de servicio del reader de Google.
Gran aporte, Felicidades por tu trabajo, pocos comparten un buen trabajo como este.
Muchas gracias Ramón por el informe de SonarQube! Voy a investigar el tema de las pruebas, deberían haber corrido sin problemas (todas las pruebas heredan de AbstractDatabaseTest, en donde se configura un datasource con HSQLDB y se levanta el esquema de tablas).
No sé si será un tema de sonar pero a mi me funcionan todos los test, excepto update_userChangesUsername_updatesUser de UserServiceTest que me tira un problema de credenciales....
Una pregunta al margen, vi que hay unos test para la parte de javascript y es la primera vez que veo algo como eso, me podrás explicar como se ejecutan, si tiene integración con los test de java (en el sentido de ejecutarse con maven por ej.)
Un comentario a parte, tengo por costumbre crear un MainTestSuite (me quedó el TestSuite del viejo junit :P ) donde pongo todos los test a ejecutar y queda algo como:
@RunWith(Suite.class)
@Suite.SuiteClasses({ MiTest.class})
public class MainTestSuite {
}
de esta forma se tiene un único punto para ejecutar todos los test desde un run as sin necesidad de ejecutar algo de maven
El método de test update_userChangesUsername_updatesUser() estaba fallando, lo arreglé ayer a la noche. Ya ahora deberían estar corriendo todos bien :) De hecho, recién subí también unos arreglos a una de las pruebas JavaScript.
Hablando de eso, para las pruebas de JavaScript utilizo qunit. Para ejecutarlos, directamente abrí el archivo qunit-composite.html con un navegador, y eso los ejecuta. No están actualmente integrandos con Maven, pero hay plugins para Maven que lo permiten.
Diego, Sonar no ejecuta pruebas. De eso se encarga Maven. Sonar se limita a almacenar resultados de distintos análisis para presentarlos de un modo cómodo.
es la caña, rapidísimo, pero la interfaz no es muy configurable...
las letras son muy estrechas