domingo, 12 de abril de 2009

Marcha un release de rsif con sql injection!!!

Ya cumplidas las espectativas del "objetivo-1", las cuales consisten, entre otras cosas en dar la posibilidad a rsif de concretar un ataque de blind sql injection muy basico (para mas detalles vean la wiki del sitio de rsif) se comenzo el desarrollo del primer release de rsif, a modo de test, sera versionado como omega test ( en el repositorio, se lo puede acceder en branches/release-0.1w-test ).

El test-release ya cumple con todas las espectativas funcionales necesarias, sin embargo, debe desarrollarse en torno a el la documentacion y las caracteristicas de usabilidad minima para que cualquier interesado pueda testear facilmente el framework a su antojo, y que de este manera aporte al proyecto con hallazgos de bugs, critica constructiva, quejas, o lo que quieran.

Contemplando el peso de mis ocupaciones no-rsif actuales, se calcula que el release en si estaria terminado a mas tardar para junio (absolutely no warranty), igualmente, los que quieran pueden testear la version en desarrollo de este release que se encuentra en el repositorio en branches\release-0.1w-test (o pueden esperar a que la documentacion de uso aparezca y les faciliten las cosas).

sábado, 28 de marzo de 2009

Foro de discusion de rsif

Se le da la bienvenida al equipo de rsif a Felipe de Jesus, habil programador php y administrador de sitios web, ahora entusiasta del ruby, siendo probable que tambien contribuya a la programacion en si de RSIF.

Como primer gran aporte a rsif, Felipe de Jesus se encargo de montar un web, un foro de rsif que se podra utilizar como medio de comunicacion de ideas, etc.... Por ahora esta en un estado inicial y queda pendiente la customizacion, la configuracion del foro, algun nombre de dominio, etc..., pero lo principal ya esta que es el la web con el foro funcionando.

Links:

http://www.rsif.webcindario.com

sábado, 7 de marzo de 2009

Nueva metodologia de desarrollo

Desde hace un tiempo vengo reflexionando acerca de si la metodologia de desarrollo que estuve utilizando hasta ahora daba los resultados que deseaba (lograr que framework que "asuste" en el corto plazo con sus resultados, pero tambien que tenga velocidad y aceleracion de desarrollo ), y llegue a la conclusion de que me estuve equivocando al aplicar el desarrollo en capas de abajo para arriba (todo el cuento de dividir el desarrollo en fases por capa ).

El problema

El problema fundamental de esta metodologia es que "no va a ningun lado", o para decirlo mejor, no tiene objetivos planteados a corto plazo, solo es una especie de Big Ball of Mud bizarra que tiene una calidad de diseño interno muy alta, pero que solo se justifica en si misma y no hace nada especifico (la Big Ball of Mud clasica es al revez, calidad interna muy baja, objetivos rapidos).
Lo que ocurre a raiz de esto, es que se pierden totalmente las esperanzas de terminacion del desarollo, ya que los objetivos "reales" que se plantea el proyecto nunca estan en contacto con el desarrollo primario que es el de la "capa 0", ya que no hay manera de desarrollar en torno al nivel de abstraccion que separa la capa 0 del resultado final que esperamos; porque la metodologia misma plantea que la capa 0 tiene que estar "completa" antes de empezar a programar las demas, piensen en la vaguedad del termino "completa" en este contexto.

Obviamente, el problema principal que hay que atacar, es el hecho de poder trabajar solo en el nivel mas bajo de abstraccion, y no poder definir ningun parametro ni nada que guie el desarrollo. Podria pensarse que el diseño en capas es un obstaculo, pero el diseño en capas es generalmente mucho mas conveniente que lo que podria parecer, ya que permite separar muy bien en distintos niveles de abstraccion los componentes, y a su vez tener todo muy ordenado.

Solucion

Lo que hay que cambiar es el metodo de desarrollo, para poder lograr los objetivos y que el desarrollo de las capas de bajo nivel esten regidas por algo tangible, evalue en un momento el uso de alguna metodologia "agil", como XP, TDD, Scrum, etc..., pero todas harian destrozos a la calidad interna del framework, ya que esas metodologias funcionan bien para otro tipo de proyectos, proyectos que "finalizan" con un objetivo concreto estatico y muy bien definido.
Lo que se puede rescatar de las metodologias agiles, es el orden del desarrollo, en las metodologias agiles no hay impuesto ningun orden cronologico para desarrollar (sin importar si el diseño sea en capas, o no), ya que el orden estricto trae aparejado los problemas que se describieron recien. Las metodologias agiles no imponen un orden, solo dan una guia de como desarrollar y a veces el "vale todo" para modificar el proyecto en todos lados, con tal de lograr el objetivo (algo asi como "el fin justifica los medios").

En RSIF, se puede desarrollar de esa manera, pero deben aprovecharse todo lo posible las libertades que tienen los desarrolladores, para mantener la calidad de diseño del software, un ejemplo de esto es la ausencia total de deadlines: si no hay deadlines que seguir, no existen "ultimos momentos" donde haya que hacer cosas "feas" en el codigo para cumplir con los plazos, entonces las cosas deberian diseñarse y programarse mejor.

Guias

Se denominaran guias en esta metodologia a todo documento y/o especificacion que justifique cualquier modificacion o agregado al software. Existen dos tipos principales de guias: las consignas, y los objetivos.

Consignas

Tambien cabe destacar, que aunque se anuncie a la comunidad de desarollo como tienen que usar las libertades que otorga el proyecto a favor de la calidad de diseño del RSIF, deben existir claras consignas de calidad documentadas que los desarrolladores pueden seguir para saber si estan haciendo algo "mal" o algo "bien", las consignas son atributos de calidad del codigo y del diseño, como por ejemplo la conveniencia de usar diversos tipos de polimorfismo antes que estructuras de control de flujo condicionales, que son mas dificil de mantener.

Objetivos

Complementariamente a las consignas que se definen del proyecto, existiran "objetivos", que son objetivos muy concretos acerca de funcionalidades que el "producto final" va a tener. El desarrollo para completar los objetivos en la gran mayoria de los casos (sobre todo al principio) necesitara desarrollar en todas las capas, y en este punto se ve la gran diferencia con la metodologia vieja: mientras en la metodologia vieja solo se podia trabajar con una capa hasta que esta se complete, en la nueva metodologia se plantean estos "objetivos" y no hay absolutamente ninguna restriccion acerca de en que capas se puede modificar/agregar funcionalidad. Nuevamente, el, o los desarrolladores que programan para cumplir "objetivos" deben desarrollar en lo posible por favorecer al framework dandole atributos de calidad de diseño que este necesita (diseñar nuevos componentes etc...).

Refactoring

El Refactoring es un proceso fundamental en esta metodologia, la contemplacion del refactoring es lo unico que permite otorgar a los desarrolladores algo de licencia para degradar la calidad del diseño al perseguir un objetivo concreto (algunos desarrolladores podrian degradar la calidad, sin saberlo), gracias a esto los desarrolladores que aporten al framework añadiendo funcionalidad tienen mas libertad de accion y sus aportes deben tener mas aceptacion, aunque no cumplan con las consignas.
El refactoring, en este contexto, se define como una operacion que generalmente modifica mucho codigo fuente y solo se justifica para incrementar la calidad de diseño del framework, incluyendo por ejemplo el ajuste del codigo o el diseño que no respetaban una consigna para que la cumpla, el refactoring tiene que hacerse en un fork del proyecto hasta que este completo y no tiene que afectar la funcionalidad del proyecto, o sea, no tiene que ocasionar que deje de funcionar lo que antes funcionaba.
Sera muy importante reglamentar y documentar los normas y los procesos de refactoring, ya que el refactoring permite dividir las tareas de objetivos y consignas al otorgar a un desarrollador la libertad de quebrar las consignas y a otro la de modificar todo el codigo para agregar el cumplimiento de la consigna que el otro usuario no respeto, de mas esta decir que el desarrollador que implementa la busqueda del objetivo debe respetar en lo posible las consignas de entrada para que no sean necesarios tantos refactoring o refactorings tan complejos.

Documentacion

Todas las guias y el refactoring debe tener documentacion previa, en el caso de las consignas, la documentacion debe especificar como la consigna aporta a la calidad del soft, debe dar ejemplos de como la consigna se cumple, de como no se cumple, y de como se hace refactoring del codigo que no cumple. Los objetivos se documentan explicando cuales son sus alcances y ejemplos de que se espera que el framework haga

viernes, 6 de marzo de 2009

Jueves de FreeMind del rsif

Jeje, dije que iba a publicar un mega-post, pero queria ir publicando mis avances, el jueves empeze a flashear mientras usaba el freemind y volque todas las ideas a un arbolito


Lo principal que hay que sacar en limpio del arbol, son en primer lugar la documentacion: hay que documentarlo todo, cuanto mas mejor (mientras no sea un trabajo excesivo o que no tenga sentido) hay que hacer documentacion que guie el desarrollo, documentacion que guie la documentacion misma, documentar acerca de como va a ser la relacion entre la documentacion y lo documentado, lo segundo es lo de subversion, el manejo en ramas, los tags, etc... hay que reglamentar esas cosas y mas, para eso es la documentacion. Y finalmente, lo tercero que se podria señalar, es lo referente a como podria ser la documentacion de desarrollo, que haya guias, objetivos, consignas, especificaciones de como hacer refactoring, etc..., y tambien, cuanto de esto se puede aplicar al desarrollo de la documentacion misma, diseñar la documentacion como software (que es lo que es) y un largo etc...

miércoles, 4 de marzo de 2009

Vuelta a la accion

Como bien anuncie en este post de NilClass, finalizo el oscuro receso de febrero, y volvi a la accion y a la contruccion de RSIF. Este marzo sera de grandes edificaciones, pero, no esperen que sea un maremoto de commits al repo!, tengo planeado algo mucho mas productivo: la construccion de guias y mas guias de desarrollo que logren lo que siempre quise del proyecto, resultados rapidos, gran flexibilidad y sobre todo un gran nivel de extensibilidad, sin contar con todo lo necesario para unir fuerzas con quien sea que quiera aportar o trabajar conmigo en el proyecto; para lograr esto, tengo que tomarme las proximas semanas (talvez todo marzo) para armar y documentar una metodologia de desarrollo mas acorde a la que venia usando hasta entonces.
El primer paso para arrancar el trabajo de este mes sera un mega-post en este blog (tengo que pensarlo bien, pero a mas tardar el fin de semana), evaluando los planes a mediano plazo y debatiendo las metodologias de desarrollo que podria utilizarse. Mas tarde es muy probable que las ideas se vayan completando, corrigiendo en mas posts del blog y/o mediante la wiki de la pagina del proyecto

viernes, 30 de enero de 2009

Receso de febrero en las actividades en RSIF

Lamentablemente tengo que dejar de desarrollar, casi por completo, para RSIF, durante febrero. No es que me vaya de vacaciones, mas bien es por la epoca de examenes que empezo en la facu. Igualmente, cada tanto, si me hago un tiempo, mando una catarata de commits al repo :D.

Espero que el proyecto avance algo mientras no estoy encima en el sentido de que la gente lo vea, y por ahi alguna que otra idea que me puedan mandar o cualquier otra contribucion.

Nuevo blog acerca del proyecto rsif

Este es el primer mensaje del blog dedicado al proyecto rsif, ¿que es el proyecto rsif?, RSIF significa RSIF Sql Injection Framework y es un framework programado en un lenguaje muy poderoso llamado ruby. El framework apunta a automatizar operaciones de sql injection del tipo que sea, blind, inband y lo q sea, ademas de la post-explotacion y muchas cosas en el mundo de sql injection.
Por ahora esta en su fase de desarrollo ZERO y experimental pero se esta desarrollando en base a una arquitectura que fomente una alto grado de adaptabilidad, modularidad y facilidad para mejorarlo por parte de cualquiera, y al mismo tiempo facilidad de uso para el usuario, para mas informacion dirigirse al sitio web del proyecto: http://rsif.googlecode.com.
En este blog, se van a poder obtener las novedades que vayan surgiendo acerca del proyecto