TBO's picture

TBO gantt

Según este diagrama que me da la forja de rediris parece que voy cumpliendo la planificación :D

TBO's picture

Aunque escriba poco en el blog, el desarrollo de TBO está siendo continuo y fluido. Me he puesto unos objetivos básicos en la forja de rediris con fechas y todo, y por ahora voy cumpliendo.

Si todo va bien, la versión 0.9 estará lista para finales de marzo.

También se puede seguir el desarrollo desde mi rama git

Voy a poner aquí el log del subversion para que se vea el avace:

Herramienta de texto (sin funcionalidad)
10 files changed, 236 insertions(+), 1 deletions(-)
Borrado de objetos y selección corregida
4 files changed, 35 insertions(+), 15 deletions(-)
Ojos, bocas y nuevos cuerpos
19 files changed, 1465 insertions(+), 112 deletions(-)
Rotación de objetos.
4 files changed, 138 insertions(+), 12 deletions(-)
Mejorados algunos detalles de interfaz
5 files changed, 13 insertions(+), 12 deletions(-)
Ya se pueden mover/redimensionar los monigotes :D
5 files changed, 267 insertions(+), 28 deletions(-)
Ya se pintan los monigotes en las viñetas!!
10 files changed, 166 insertions(+), 5 deletions(-)
Todo listo para añadir monigotes a las viñetas
1 files changed, 4 insertions(+), 17 deletions(-)
Unselect tool, liberando memoria y esas cosas
10 files changed, 58 insertions(+), 6 deletions(-)
Añadidos eventos sobre monigotes y bien escalados
1 files changed, 29 insertions(+), 3 deletions(-)
Monigotes en la herramienta de monigotes
1 files changed, 36 insertions(+), 6 deletions(-)
Mejoras visuales en las herramientas doodle y selector
2 files changed, 5 insertions(+), 5 deletions(-)
Tool Area scrollable & fondo & scroll drawing area
2 files changed, 18 insertions(+), 4 deletions(-)
Arreglado GtkWarging del action_group
1 files changed, 8 insertions(+), 5 deletions(-)
Plantillas de monigotes con un expander
3 files changed, 135 insertions(+), 76 deletions(-)
Buscando plantillas de doodle en el fs
1 files changed, 65 insertions(+), 0 deletions(-)
Ejemplo de uso de gmarkup.
3 files changed, 126 insertions(+), 0 deletions(-)
Mejor sistema de llamadas a eventos herramientas
16 files changed, 371 insertions(+), 111 deletions(-)
Herramienta de dibujado de monigote (no funcional)
17 files changed, 323 insertions(+), 35 deletions(-)
Añadida la vista detalla de viñeta
6 files changed, 128 insertions(+), 21 deletions(-)
Herramientas avanzadas del selector
2 files changed, 94 insertions(+), 26 deletions(-)

GECO's picture

A raíz de este párrafo, hablando sobre GECO:

"Al haber sido desarrollado como software libre permite que cualquier otra persona con la misma necesidad pueda utilizar este desarrollo, e incluso permite que cualquier empresa que lo vea rentable lo venda, ya sea como servicio o como producto."

Me han hecho una serie de preguntas a las que respondo cortésmente:

"¿Es eso cierto? Quiero decir: ¿Consentirías que una empresa se aprovechase de tu trabajo para hacer negocio vendiendo Geco como producto?"

Sí, es totalmente cierto, al ser software libre, cualquiera, incluso una empresa puede hacer negocio vendiendo GECO.

"Te lo digo porque creo que lo normal sería que si lo has desarrollado como software
libre le asociases una licencia "libre" de modo que eso asegurase que nadie tuviera que pagar por usar el producto y menos a alguien que no fuera su autor (en este caso tú mismo)."

La licencia GPL, que es la que tiene este proyecto en concreto, no impide su venta. Lo único que implica, es que si alguien hace alguna modificación o mejora sobre el código y lo vende, debe ofrecer el código de las mejoras, puesto que esta licencia es vírica y obliga a que todo desarrollo basado en este software siga siendo software libre.

Que sea software libre no implica que tenga que ser gratis, sino que los usuarios tienen todas las libertades sobre el código, pueden ejecutarlo para cualquier propósito, pueden estudiar el código y modificarlo, pueden redistribuir copias y también pueden distribuir copias del programa modificado.

Por tanto, si una empresa o particular coge GECO, y consigue venderlo, incluso sin hacer ninguna modificación al código, está en su completo derecho. Lo que sí es verdad es que tendrán que respetar la GPL y ofrecer el código fuente a sus clientes, al ser GPL no pueden coger el código y cerrarlo.

danigm's picture

Para todos aquellos que añoran el sol amarillo y brillante en estos días de lluvia he realizadoo este dibujo:

TBO

A disfrutar.

danigm's picture

Poco a poco, día a día, nos van quitando cosas por las que alguien luchó para que tuvieramos. Yo (y supongo que mi greneración) he crecido en un mundo de abundancia, de derechos, donde no he tenido que trabajar hasta los veintipico años, donde no he tenido que compartir cama con ningún hermano, e incluso he tenido habitación propia. Pensamos que siempre ha sido así, que la guardia civil ha tratado a la gente con respeto y nunca ha pegado una paliza a alguien por estar en el lugar equivocado y preguntar después.

Todo eso es muy bonito, y es nuestro mundo, lo que hemos conocido. En el colegio hemos estudiado historia. Pero la historia que se estudia es impersonal, son guerras, reyes, conflictos y eventos que quedan registrados en los periodicos, pero no sabemos cómo vivieron nuestros padres, cómo vivieron nuestros abuelos. Por conseguir qué derechos lucharon, no tenemos ni idea de cómo vivian y nos dedicamos a decir que antes se vivía mejor.

Escuchando a los mayores, pidiendo que nos cuenten historias, aprenderemos de dónde venimos, y qué es lo que tenemos, por qué han luchado y qué es lo que deberíamos defender con nuestra vida porque muchos murieron para el mundo fuera hoy un poco mejor y a nosotros nos arrebatan poco a poco, día a día, sin que nos demos cuenta, los derechos fundamentales.

Miro la sociedad de hoy en día y veo un problema grande, están separando al pueblo. Nos están volviendo a unos contra otros, desconfiados, todos son el enemigo, el mundo es muy peligroso, no salgas de tu casa, no hables con extraños, todo el mundo quiere engañarte. El hombre como individuo no tiene ningún poder contra nada, es facilmente silenciable y se puede comprar con dinero. Sin embargo, cuando nos reunimos, cuando nos asociamos, cuando no somos un hombre, sino un grupo de personas, el poder es infinito, es imparable, no se puede silenciar a un grupo, ni se puede comprar.

Es por eso que debemos hablar, asociarnos, formar grupos de gente con los mismos intereses para luchar contra el "poder".

Muchas veces he pensado que yo era la única persona que pensaba que las consas estaban mal, y seguramente a muchísima gente se le habrá pasado por la cabeza, pero al pensar que estamos solos no podemos hacer nada, sin embargo si escuchas un poco, si cuentas tus pensamientos, te das cuenta de que mucha más gente comparte lo mismo que tú y entonces sentirás esa sensación de poder, de valor, que da la "manada", el saber que tus palabras están respaldadas por más personas.

Aprende de tus mayores, organízate para defender tus derechos, porque firmes un contrato no eres esclavo de nadie, es simplemente un acuerdo de prestación de servicios. El paro no es el problema, el problema es el hambre.

Nunca he pasado hambre, nunca he temido por mi vida, así que no me hables de crisis ni del fin del mundo, que todavía queda mucho para eso.

danigm's picture

Ahora que estoy trabajando con django estoy viendo lo potente que es, pero su sintaxis y forma de hacer las cosas no me acaba de convencer del todo comparandolo con web.py.

Una de las cosas que me gustan mucho de web.py es la forma de definir las vistas, que consiste en una clase donde defines el método GET y el método POST (no son obligatorios) y estos métodos son llamados según sea la petición http. Esto es muy util a la hora de hacer vistas de formularios, que si reciben la petición por GET muestran el formulario y si la reciben por POST hacen lo que sea con los datos, y en django suele haber un if request.method == 'POST' que guarrea la vista completamente.

Por eso hoy me he puesto y he hecho una pequeña prueba de concepto para poder permitir una definición similar en django, y así poder tener una mejor reestructuración del código de las vistas.

Lo he puesto en django snippets, pero también lo voy a poner aquí y lo comento:

  1. from django.http import HttpResponse as response
  2. from django.http import HttpResponseNotAllowed
  3.  
  4. class ViewClass:
  5. def __call__(self, request, *args, **kwargs):
  6. self.request = request
  7. methods = ['POST', 'GET']
  8. self.methods = [method for method in dir(self)\
  9. if callable(getattr(self, method)) and method in methods]
  10.  
  11. if request.method in self.methods:
  12. view = getattr(self, request.method)
  13. return view(*args, **kwargs)
  14. else:
  15. return HttpResponseNotAllowed(self.methods)
  16.  
  17. class IndexView(ViewClass):
  18. def GET(self):
  19. return response("all ok %s" % self.request.method)
  20.  
  21. def POST(self):
  22. return response("all ok %s" % self.request.method)
  23.  
  24. index = IndexView()

¿Qué es lo que he hecho? He definido mi vista IndexView como una clase, que hereda de "ViewClass" (ahí está la mágia), donde me he definido mis dos métodos, GET y POST, igual que si lo hubiera hecho con web.py, suponiendo que GET se llamará cuando la petición sea GET y POST cuando sea POST, y el request en lugar de recibirlo como parámetro es un atributo de la clase, así que accedo a él con self.request.

Luego defino la vista como index = IndexView(), una instancia de la clase IndexView.

ViewClass es la clase de la que heredamos y la que implementa el método __call__. En python, si un objeto tiene el método __call__ es callable, y se puede llamar igual que una funcion. Es más, en python, las funciones son objetos que tienen definido el método __call__. Por tanto, como django espera que la vista sea una función, no una clase, django va a llamar al método call y le va a pasar los argumentos de la vista.

En el método __call__ lo que se hace es mirar si el tipo de petición HTTP está implementado en la clase y es uno de los válidos (methods) y si existe en la clase un método con ese nombre, lo llama pasandole los argumentos y poniendo previamente self.request = request. En caso de que el método no esté implementado devuelve responsenotallowed.

Para terminar, quiero comentar que otra de las cosas que no me gusta de django es el sistema de templates, con tantas llaves y porcentages por ahí, me parece mucho más elegante templetor, pero también es verdad que los templates de django son muy potentes y se pueden hacer muchas cosas.

TBO's picture

Aunque no escriba mucho en el blog el desarrollo de TBO sigue adelante. He hecho algunas cosillas interesantes en cuanto a la estructura del proyecto y a la "metodología" de desarrollo y en cuanto al código el proyecto empieza a tomar color y ya casi parece una aplicación :P

TBO

Esta es la pinta que tiene ahora mismo la aplicación. Ahora mismo se puede:

  • Crear un nuevo cómic
  • Añadir/borrar/moverse entre páginas
  • Añadir/borrar/seleccionar/mover/escalar viñetas

Próximos pasos:

  • Añadir una barra lateral para meter controles de las herramientas
  • Implementar el guardado y apertura de ficheros .tbo (tengo que definir cómo serán los ficheros .tbo)
  • Añadir el modo de edición de viñeta (aquí está to el meollo)

Cambios estructurales/desarrollo

Con respecto al desarrollo, he dejado de usar cmake para usar las autotools. Esto puede ser una decisión arbitraria, y en realidad lo es, pero es que la mayoría de los proyectos gnome/gtk utilizan este tipo de herramientas y para hacer más "compatible" TBO he decidido utilizar esto.

El cambio de cmake a autotools no ha sido traumático ni mucho menos, hay un montón de documentación por ahí y además me he basado en el código del proyecto epiphany.

Por otra parte, antes estaba usando bazaar (además del svn de rediris con bzr-svn) para gestionar las versiones de TBO, pero me ha dado por cambiarme a git, y ahora es lo que estoy usando (con git svn para el svn de rediris). Así que la evolución del proyecto se puede seguir los cambios desde aquí.

Por ahora no tengo mucho más que decir. Si todo va bien y consigo una versión funcional quiero intentar meter TBO en el proyecto gnome, guadalinex->ubuntu->debian y que sea algo más o menos utilizado.

Todas las sugerencias, parches y críticas serán bien recibidas.

danigm's picture



obama

En los aeropuertos se están poniendo ya muy cabrones, que te hagan pasar por un control, vale, por un detector de metales, vale, que te quiten las botellas de agua y los batidos de chocolate ... vale, que te cacheen .......... vale, que te pregunten de dónde vienes y a dónde vas y para qué ... .. .. .. .. .. vale, que te miren con un escaner que te desnuda ..... .. .. .... .. . vale, que te metan el dedo en el culo por si llevas una bomba. .. .. ... .. ..... . .. ... vale. ¿Hasta dónde vamos a llegar? Bueno, cada cual tendrá sus límites.

danigm's picture

Ya estamos llegando al final del año 2009, y mi avatar está ya un poco anticuado, así que me he puesto a dibujar un nuevo avatar para el nuevo año y este ha sido el resultado:



dgm10

Aquí está el video del proceso con musiquita y todo:

La canción es "Cerca de Shibuya" de "La casa azul".

Este dibujo está realizado en un "asus eee901" con Archlinux con el trackpad usando inkscape 0.46, grabado con gtk-recordmydesktop y editado con mencoder. El audio ha sido editado con audacity.

danigm's picture

El otro día leí en reddit que emacs se pasaba a bazaar y en los comentarios leí que bazaar no es lo mejor del mundo. Yo ya lo sabía, y después de haber tratado durante algún tiempo con bazaar me decidí a cambiar todos mis repositorios a git.

¿Cómo hacer eso? pues fué más fácil de lo esperado, con el plugin de bazaar fastimport y el comando git import. Se instala fácilmente descargandolo "bzr branch lp:bzr-fastimport fastimport" y copiando el directorio a "~/.bazaar/plugins/". Ahora deberíamos tener accesible el comando bzr fast-export.

En mi servidor tengo todas mis ramas dentro de un directorio llamado branchs y quería crear un directorio llamado gits con los mismos proyectos pero portados. Para ello me he creado un script que se encarga de hacer todo lo necesario:

  1. #!/bin/bash
  2.  
  3. root=$PWD
  4. cd $root/branchs
  5. for i in *
  6. do
  7. newdir=$root/gits/$i.git
  8. mkdir $newdir
  9. cd $newdir
  10. git init --bare
  11. bzr fast-export $root/branchs/$i | git fast-import
  12. git update-server-info
  13. done

Esto exporta todos los repositorios de bazaar a git.

Y para mostrar todas las ramas de git que tengo me he instalado gitPHP, porque intenté configurar gitweb, pero con lighttpd no he podido hacer funcionar este porque es un script perl, he intentado seguir las instrucciones para configurar gitweb con lighttpd, pero no me muestra la página, me da el fichero para descargar.

Sobre la decisión de usar git en lugar de bazaar, es una decisión totalmente arbitraria, con poquísimo fundamento, bien podría haber sido mercurial o lo que sea, pero git está siendo utilizado por grandes proyectos como gnome o kde y se supone que es el más potente, así que por qué no.