Metodologia Agile de Desarrollo de Software

Colibri azul en vuelo
Desarrollo Agil.

Agile Development. Es un grupo de metodologias, que fueron definidas en el 2001 en el Agile Manifesto.

Invitamos a Cesar Reyes a conversar un poco sobre lo que es Agile, y que ventajas puede traer a nuestra vida, claro que no pude evitar hablar un poco de Alan Cooper y de interaccion.

Sin mas preambulos les presentamos el primero de los programas del podcast rock developer.

El Podcast

Layouts de extjs con forzaframework

Uno de los elementos de forzaframework es un taglib de jsp que genera codigo javascript/html. Principalmente es un wrapper para extjs. La idea de esto es que cualquier programador con experiencia en jsp pueda hacer mejores interfaces web aprovechando las excelentes librerias de javascript que existen ahora, en este caso extjs.

Aqui muestro un ejemplo de lo que se puede hacer.

[java]
<%@ taglib uri="http://forzaframework.org/tags/misc-tags" prefix="n" %>
<%@ taglib uri="http://forzaframework.org/tags/form-tags" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<c:set var="ctx" value="${pageContext.request.contextPath}" />

<n:panel layout="border" title="Titulo principal del modulo" replacePanel="System.getCenter()">
<n:toolbar type="top">
<n:button text="Abrir ventana" handler="function(){ Ext.getCmp(‘window’).show(); }"/>
</n:toolbar>
<n:panel region="west" title="West" width="200">
</n:panel>
<n:panel region="center" layout="row-fit">
<n:grid id="users-grid" titleKey="user.list.title" url="${ctx}/config/users/xml">
<n:toolbar type="top">
<n:button textKey="user.new" handler="function(){
alert(‘Hola mundo’)
}" />
<n:button text="Permisos" handler="alert(‘Hola mundo’);" />
</n:toolbar>

<n:column field="id" hidden="true"/>
<n:column field="username" titleKey="user.username"/>
<n:column field="firstName" titleKey="user.firstName"/>
<n:column field="lastName" titleKey="user.lastName"/>
<n:column field="email" titleKey="user.email"/>
<n:column field="preferredLocale" titleKey="user.preferredLocale"/>
</n:grid>
<n:panel title="Aqui puede ir un otro grid">

</n:panel>
</n:panel>
</n:panel>

<n:window id="window" title="Ventana" width="400" height="300" show="false">
<n:panel>
<n:htmlContent>
Este es contenido html
<div style="background-color:red">
Este es un texto en rojo
</div>
</n:htmlContent>
</n:panel>
</n:window>
[/java]

Aquí vemos que es lo que genera.

lo que se muestra

En resumen se muestra un ejemplo de un panel con layout “border”, este panel puede tener otros paneles como hijos cada uno especificando la región a la que pertenecen. Podemos poner también grids, forms, tabs, como paneles.

Se muestra también una ventana. El parámetro “show” es para mostrarse o no de inicio, por default es “true”.

Bueno, este fin de semana trabajaremos en la documentación y de presentar y explicar casos mas comunes de uso tanto para forza en general como para el taglib.

Bienvenidos sus dudas y comentarios.

Un rato con grails, gorm, groovy y forza

El fin de semana estuve haciendo unas pruebas para ver que tecnología usare para un nuevo proyecto, sin alejarme mucho de lo que ya manejo habitualmente que es: spring, hibernate, forza.

Decidí probar un poco con gorm (Grails Object Relational Mapping) unos de los principales componentes de grails, groovy, el lenguaje que usa grails y spring mvc. Por que no hacer toda la aplicación en grails? pues la idea es aumentar la productividad poco a poco, teniendo el mayor control posible sobre la aplicación, a que me refiero?, bueno, ya usando hibernate a veces hay cosas que parecen magia, pero a veces la magia falla, entonces tienes que leer, analizar, debugear y entender un poco el como esta hecha esa magia, asi que empezamos poco a poco a entender la magia de grails.

Empece por ver la aplicación de ejemplo que viene cuando bajas grails, samples/petstore-mvc, y se ve muy sencillo, se simplifica mucho el acceso a datos, algo que no debería ser la gran ciencia. La aplicación viene por default configurada para hacer uso de una base de datos en memoria, entonces la configuro para que apunte a un servidor postgresql local, y para mi sorpresa deja de funcionar, raro, no ejecuta los inserts/updates pero si los selects, bueno para no hacerla larga, resulta ser que es el manejo de transacciones.

Que sigue?,  sustituyo gorm por el EntityManager de forza, el cual es un “Dao” genérico para simplificar el acceso a datos, junto con otras utilerias. Esto porque tengo ya varios años usando forza, y dado que vamos poco a poco con la nueva tecnologia, dejaremos a gorm para despues.

Groovy? me pareció muy productivo, bastante simple, puedes usar clases de java en groovy y viceversa, de esa manera puedes ir tomando poco a poco lo que te sirve mas de groovy.

Entonces la arquitectura de la aplicacion queda: Capa de acceso a datos con forza/hibernate con clases en groovy, capa de servicios en groovy, controllers en groovy con spring mvc, y jsp para las vistas.

En otro post esta semana voy a detallar la arquitectura de la aplicación y mostrar algunos ejemplos en codigo.

Espero sus comentarios y experiencias, saludos…

Convenciones de nomenclatura. Lease: Guia de nombres para variables, metodos, funciones, etc.

Cada vez que leo código como:

type _variable;
type variable(){
get { return _variable}
set{ _varibale = value}

Siento que me están haciendo una lobotomía frontal, que me insultan profundamente, es como obligarme a ver una telenovela o gray’s anatomy, que, aunque las mujeres lo nieguen, es una maldita telenovela, gringa, pero telenovela.
Rockdevelopers del mundo si ustedes están haciendo esto, detenganse de inmediato, aquí un post que les permitirá incrementar su “chi” -Se lee Ki-

Intenta ahora reescribir el codigo de esta manera:

type property {get; set;}

De 4 lineas de codigo a 1, Dios mio, si tan solo pudiesemos hacer refactoring como este todo el tiempo. Desarrollar software seria la gloria.
http://blogs.msdn.com/brada/articles/361363.aspx

Hay varias razones por las cuales este tipo de cosas pueda suceder.

  1. Estas usando un lenguaje primitivo
  2. No tienes la mas minima idea de lo que son las convenciones de Codigo o de por que es que estas son importantes.
  3. Desarrollas software en VB, lo cual nos regresa una vez mas al punto numro 1.

Si te encuentras en el primer caso, es hora de hacer algo por ti, de desarrollar tu talento hacia lugares que nunca antes has imaginado. O dicho de otra manera es hora de que te cambies JAVA.
Si por el contrario estas usando lenguajes modernos y te encuentras en el segundo punto, necesitas ayuda profesional, lo primero que debes hacer es leer el articulo que mencionamos arriba, Aunque se lo mucho que odias a MS por ser monopólica y representar toda la maldad del mundo, debes saber que dentro de la organización hay gente bastante capaz de desarrollar buen código, y que incluso gente como: Miguel de Icaza, pudo haber llegado a formar parte de las filas de la organización a la que tanto desprecias.
Código hermoso, que los seres humanos pueden leer, que hace uso de variables de rango limitado es lo que debes escribir si esperas que el dia de mañana que te promuevan a  gerente de proyecto, tus pupilos no sufran leyendo la funciones que desarrollaste ayer.

Aunque la referencia que use, para este articulo es de bastante mal gusto, creo que lo mas importante es que se entienda que el problema con escribir codigo es que internamente en nuestras organizaciones, carecemos de lineamientos des escritura de codigo, yo se que ustedes rockdevelopers, pueden hacer algo mejor que lo que les estamos mostrando, en especial el hecho de nunca, pero nunca llamar a una interface ISuperClase, ya que lo unico obvio que puede implementar ISuperClase es una calse llamada SuperClase, en el mundo JAVA, tienes una interface llama List, la cual es implmentada por clases como ArrayList, y otras mas.

Iaax Page

Lista de dias del mes con SQL Server

Autor: Rafal Skotak
http://www.sqlservercentral.com/scripts/61949/

Select dt_val from (
–Matriz cruzada de valores numericos
select
dateadd(dd, value, dateadd(month, 8 – 1, dateadd(year, 2008 – 1900, ‘1900.01.01 00:00:00.000’))) as dt_val
from(
select (v2 * 4 + v1) * 4 + v0 as value from
(select 0 as v0 union select 1 union select 2 union select 3) as rs0 cross join
(select 0 as v1 union select 1 union select 2 union select 3) as rs1 cross join
(select 0 as v2 union select 1 union select 2 union select 3) as rs2
) as rs
–fin de matriz
) as rs2

where month(dt_val) = 8
order by dt_val

Encontré este script el día de ayer, buscando alternativas para un problema que necesito solucionar en mi trabajo.
Aunque no es la solución que actualmente necesito, es bastante bueno para la agilidad mental de la solución de problemas de datos en SQL

En si lo que estamos viendo es una tabla derivada, la cual convierte valores numéricos en fechas, es decir, la tabla mas interna es en si una matriz cruzada de valores, la cual servirá para proveer valores a la tabla derivada, para que esta a su vez utilice dichos valores en las funciones de conversión de fechas

El script se puede correr en dos partes para obtener un entendimiento mas amplio.

-Nota importante: Este script debe ser considerado EVIL SQL, ya que hace uso de una tecnica Cross Join, lo cual puede comprometer el desempeño de un proceso.

Iaax Page

¿ Que es LAMP ?

Si llegaste a este post por medio de google es porque esta palabrita ha estado rondando tu cabeza y deseas encontrar el significado de ella.

Bien, LAMP es un acronimo ampliamente utilizado en web que esta conformado por las 4 tecnologias que hacen posible muchas de las aplicaciones (paginas) web que hoy en dia conoces.

Linux
Apache
MySql
Php

Bien, Linux es el sistema operativo donde estas tecnologias viven, Apache es el servidor web que permite alacenar tu aplicacion web y proporcionar una salida HTML que cualquier navegador pueda entender. MySql es un gestor de Base de Datos que te permite hacer maravillas con la informacion de tu aplicacion y Php, que puedo decir de php: es quien orquesta toda tu aplicacion, quien da inteligencia a tu pagina web y gracias al cual puedes procesar datos, almacenarlos, y consultarlos en el momento que quieras.

Se oyo muy formal ? tanto que no entendiste nada? bien, pues tu solo querias saber que es LAMP. si quieres saber mas a fondo sobre cada tecnologia, te recomiendo que sigas estos links.

Linux
Apache
MySql
Php

Saludos.