Posts Tagged ‘ sqlite ’

Game of Zones: Database

Buenas noches a la (cuarta) entrega semanal de Game of Zones, hoy hablaremos sobre la base de datos que usará la aplicación web.

Al principio pensé en usar simplemente variables en memoria para cargar los datos desde la API de foursquare, pero dado que tendría que guardar información propia de la aplicación (por ejemplo, las distintas zonas con sus reyes) decidí usar una base de datos, lo cual creo que es más limpio y eficiente (sobre todo con grandes cantidades de datos, que espero algún día tenerlas).

La base de datos estará compuesta por varios tipos de datos, como por ejemplo, usuarios o venues (cada uno de los lugares de foursquare). Cada uno de estos no será más que un tipo de dato propio de foursquare, formateado para eliminar los atributos que no nos interesan y para añadir otros que hacen falta. Además, se van a añadir tipos de datos propios de Game of Zones, como por ejemplo cada una de las zones del mapa.

Lo siguiente que quiero comentar es la facilidad con la que Django te permite trabajar con bases de datos. De una manera asombrosamente puedes actualizar la existente (si la has configurado al crear el proyecto Django usa una base de datos con varios datos propios) con tus tipos de datos, tus tablas y tus instancias.

Usando Python creas los modelos de datos que necesitas de una manera intuitiva, ayudado por la documentación para las dudas, y simplemente sincronizando la base de datos, Django te genera automáticamente todas las tablas necesarias, incluyendo tablas heredadas o tablas necesarias para relaciones muchos-a-muchos.

Después de esto, simplemente creando objetos de las clases definidas anteriormente y usando el método save() de estas, las instancias quedan registradas y guardadas en la base de datos. Además, también nos permite realizar consultas sin tener que escribir nada en SQLite (que es el sistema de gestión que he usado en el proyecto) por lo que trabajar con la base de datos no es más que un juego de niños.

No tiene mucho más el trabajar con bases de datos gracias a Django. La complicación será la que tú le quieras poner, o la que requieran tus datos.

Para el proyecto estoy usando sqlite3, que viene integrado en Django, por lo que no necesito ninguna librería externa (para usar Oracle, PostgreSQL o MySQL sí que me haría falta una).

Para terminar, decir que ya están activos y actualizándose continuamente los repositorios del proyecto tanto en Github como en la forja de rediris.

Anuncios

Game of Zones: La decisión que condicionó el proyecto

De nuevo estoy aquí para seguir escribiendo sobre Game of Zones (GoZ) con la vista puesta en la fase local del CUSL VI (Concurso Universitario de Software Libre).

El miembro del jurado que le toque revisar mi proyecto, no lo tendrá nada fácil, pues es tan poco el progreso físico que terminará rápidamente su trabajo. Por esto quiero escribir este post, no como escusa, sino como explicación.

A la hora de iniciar cualquier proyecto, siempre se plantean las mismas dudas: ¿qué herramientas utilizamos? ¿sabemos manejar las herramientas que están a la “última” (entiéndase por esto las que tienen más éxito en el mercado)? ¿merece la pena perder tiempo en aprender herramientas nuevas, o seguimos usando las que ya conocemos? Bien, pues mi punto de vista respecto a este tema siempre ha sido el mismo: “el saber no ocupa lugar”. A falta de empleo y de quizás “encontrar mi verdadera vocación”, creo que lo mejor es probar todo lo que se pueda, para así tener más donde elegir.

Así pues, decidí embarcarme en esta aventura y desarrollar una aplicación web (anteriormente ya había probado con el desarrollo de un videojuego en la facultad). Lo primero es lo que ya he comentado, ¿qué herramientas uso?.

Yo ya conocía herramientas de desarrollo web, tales como HTML, CSS, JavaScript o PHP, y perfectamente era capaz de desarrollar una aplicación web (había trabajado un poco con CodeIgniter) pero mis amigos, más específicamente un django developer, me comentaban de la facilidad y de la versatilidad de la dupla Python+Django. Sin pensármelo dos veces decidí la opción más arriesgada, y la que con un gran sacrificio en tiempo, me iba a reportar mayores ventajas para el futuro.

Así pues me embarqué en una aventura de aproximadamente tres meses, en los que compaginaba las clases con el aprendizaje autodidacta de Python, en un principio, y de Django (cuando ya dominaba más o menos Python). Tras leerme varios libros, tras muchos programas de prueba y muchos quebraderos de cabeza puedo decir que he aprendido más de lo que pensaba.

En Navidad empecé con el desarrollo propiamente dicho, pero me di cuenta de que aún me faltaba mucho para poder desarrollar fluidamente, continuas miradas a los libros para consultas y nuevas trabas me hacían ir muy lento. Continuas luchas con la API de fousquare y con SQLite (que también he tenido que aprender a usarlo) me hicieron retrasarme.

Por fin tras el parón por exámenes pude ponerme al 100% con el proyecto, y desde febrero sólo trabajo en él. La situación actual es la siguiente: trabajo en dos frentes distintos. Por un lado, trabajo en el diseño de la web aprendiendo a usar Bootstrap, que es una interfaz para HTML, CSS y JavaScript que nos permite de manera muy sencilla diseñar las páginas de la aplicación web. Mi negada visión para el diseño y la elección de colores me está dificultando esta tarea, pero por suerte cuento con gente que está ayudándome con las decisiones.

Por otro lado trabajo en el Sistema de Gestión de Base de Datos, usando Python+Django y SQLite para el acceso a los datos. Este trabajo es más sencillo puesto que ya lo he realizado en la facultad antes, así que espero que avance más rápidamente.

Trabajo una media de 6 a 8 horas diarias, repartiendo entre mañana y tarde, y los fines de semana, me relajo un poco más y quizás no llegue a 4 horas.

La forja apenas la he usado, y para colmo este fin de semana ha estado inactiva por problemas internos, así que la actualizaré con la menor brevedad posible.

Espero escribir de nuevo con más problemas que me vaya encontrando y sus respectivas soluciones.