Translate

sábado, 26 de septiembre de 2009

db4o

DB4O es un novedoso motor de base de datos orientada a objetos. Sus siglas se corresponden con la expresión "DataBase 4 (for) Objects", que a su vez es el nombre de la compañía que lo desarrolla: db4objects, Inc.

DB4O es:

  • Nativa a Java y .NET

  • 100% orientada a objetos, sin mapeo objeto-relacional

  • Diseñada para uso embebido

  • De código abierto y libre bajo la GPL

Las claves innovadoras de este producto es su alto rendimiento (sobre todo en modo embebido) y el modelo de desarrollo que proporciona a las aplicaciones para su capa de acceso a datos, el cual propugna un abandono completo del paradigma relacional de las bases de datos tradicionales.

De este modo, tenemos las siguientes consecuencias directas resultantes de este nuevo paradigma:

  • Deja de existir un lenguaje SQL de consultas/modificaciones para pasar a crearse sistemas de consulta por métodos delegados y actualización/creación/borrado automático de entidades mediante código compilable.

  • Se elimina la necesidad de representar el modelo de datos de la aplicación en dos tipos de esquemas: modelo de objetos y modelo relacional. Ahora el esquema de datos del dominio viene representado por la implementación que se realice del diagrama de clases.

  • Se consigue evitar el problema del Object-Relational Impedance Mismatch sin sacrificar el rendimiento que los mapeadores objeto-relacionales sufren actualmente para llevar a cabo el mismo objetivo.

La mayor clave del éxito que está teniendo este motor de base de datos frente a otros competidores que han desarrollado tecnologías similares, es que se ha optado por un modelo de licenciamiento idéntico al utilizado por empresas como MySQL: licencia dual GPL/comercial. Es decir, si se quiere desarrollar software libre con esta librería, su uso no conlleva ningún coste por licencia; sin embargo si se desea aplicar a un software privativo, se aplica otro modelo de licenciamiento concreto.

Actualmente este producto funciona como una librería para dos tipos de plataformas de desarrollo: Java y.NET (tanto la implementación de Microsoft como la de Mono).

Dejo unos links que contienen todo lo que hay que saber de este producto:

http://javahispano.org/contenidos/es/db4o/;jsessionid=E73763B425065DA17545394C602338EA

http://www.programacion.com/java/articulo/jap_persis_db4o/

http://developer.db4o.com/forums/storage/15/33746/50-54%20code34%20Architecture.pdf

Y para todos los araganes que no quieren buscar o leer, dejo un ejemplito:

La clase Player

public class Player {         

protected String name;
protected int squadNumber;
protected float battingAverage;
protected Team team;

public Player(String name, int squadNumber, float battingAverage){
this.name = name;
this.squadNumber = squadNumber;
this.battingAverage = battingAverage;
}

//Geters and seters

public String toString() {
return name + ":" + battingAverage;
}
}

La clase Pitcher

public class Pitcher extends Player {

private int wins;

public Pitcher(String name, int squadNumber, float battingAverage, int wins) {
super(name,squadNumber,battingAverage);
this.wins = wins;
}

//Geter y seter para wins

public String toString() {
return name + ":" + battingAverage + ", " + wins;
}
}

La clase Team

import java.util.List;

import java.util.ArrayList;

public class Team {

private String name;
private String city;
private int won;
private int lost;
private List players;

public Team(String name, String city, int won, int lost){
this.name = name;
this.city = city;
this.won = won;
this.lost = lost;
this.players = new ArrayList();
}

public void addPlayer(Player p) {
players.add(p);
}

// Geters y seters

public String toString() {
return name;
}
}

Primero, creamos algunos datos de prueba con los que trabajar:

// Create Players

Player p1 = new Player("Barry Bonds", 25, 0.362f);
Player p2 = new Player("Marquis Grissom", 9, 0.279f);
Player p3 = new Player("Ray Durham", 5, 0.282f);
Player p4 = new Player("Adrian Beltre", 29, 0.334f);
Player p5 = new Player("Cesar Izturis", 3, 0.288f);
Player p6 = new Player("Shawn Green", 15, 0.266f);

// Create Pitchers

Player p7 = new Pitcher("Kirk Rueter",46, 0.131f, 9);
Player p8 = new Pitcher("Kazuhisa Ishii",17, 0.127f, 13);

// Create Teams

Team t1 = new Team("Giants", "San Francisco", 91, 71);
Team t2 = new Team("Dodgers", "Los Angeles", 93, 69);

// Add Players to Teams

t1.addPlayer(p1);
p1.setTeam(t1);
t1.addPlayer(p2);
p2.setTeam(t1);
t1.addPlayer(p3);
p3.setTeam(t1);
t2.addPlayer(p4);
p4.setTeam(t2);
t2.addPlayer(p5);
p5.setTeam(t2);
t2.addPlayer(p6);
p6.setTeam(t2);

// Add Pitchers to Teams

t1.addPlayer(p7);
p7.setTeam(t1);
t2.addPlayer(p8);
p8.setTeam(t2);

Un objeto Team se puede almacenar con una sóla línea de código:

db.set(t1);

db.set(t2);
db.commit();

Donde db es una referencia a un objeto ObjectContainer, que se haya creado abriendo un fichero de base de datos, de esta forma:

ObjectContainer db = Db4o.openFile(filename);

Una base de datos db4o es un único fichero con una extensión .yap, y se utiliza su método set para almacenar objetos.

Observe que está linea almacena el objeto Team y su colección de objetos Player. Se puede probar esto recuperando uno de esos objetos Player. La forma más simple de hacer esto es utilizando QBE.

Player examplePlayer = new Player("Barry Bonds",0,0f);

ObjectSet result=db.get(examplePlayer);
System.out.println(result.size());

while(result.hasNext()) {
System.out.println(result.next());
}


Neo4j


Neo4j es una graph database. Es un motor de persistencia transaccional que guarda las estructuras de datos en graph. Graph en la jerga de red es una estructura flexible que permite más agilidad y flexibilidad al desarrollador.

Podemos pensar en neo4j como un motor de persistencia de alta performance con todas las características de una base de datos robusta. Al ser más flexible que las tablas permite a los desarrolladores más libertad a la hora de diseñar sus objetos con la tranquilidad de ser soportado por una motor de persistencia con las características de una dase de datos.

Neo4j es un producto open source aun que cuenta con una licencia comercial.

Entre las características de neo4j podemos citar: transacciones ACID, control de concurrencia y todo lo que una base de datos empresarial.

Veamos un ejemplo que nos proporciona el sitio oficial:

package org.neo4j.example.helloworld;

import org.neo4j.api.core.*;

/**
* Example class that constructs a simple node space with message attributes and then prints them.
*/
public class NeoTest {

public enum MyRelationshipTypes implements RelationshipType {
KNOWS
}

public static void main(String[] args) {
NeoService neo = new EmbeddedNeo("var/base");


Transaction tx = neo.beginTx();
try {
Node firstNode = neo.createNode();
Node secondNode = neo.createNode();
Relationship relationship = firstNode.createRelationshipTo(secondNode, MyRelationshipTypes.KNOWS);

firstNode.setProperty("message", "Hello, ");
secondNode.setProperty("message", "world!");
relationship.setProperty("message", "brave Neo ");
tx.success();

System.out.print(firstNode.getProperty("message"));
System.out.print(relationship.getProperty("message"));
System.out.print(secondNode.getProperty("message"));
}
finally {
tx.finish();
neo.shutdown();
}
}
}

jueves, 24 de septiembre de 2009

NoSql


Una reunión en San Francisco fue la inauguración de la comunidad de NoSQL, un grupo de personas que comparten la idea de destronar la tiranía de las bases de datos relaciones, costosas y lentas, en favor de una alternativa mucho más eficiente y barata para manipular datos.

Los miembros de esta comunidad comparten una visión común en cuanto a que los sistemas de bases de datos relacionales (RDBMS) clásicos son lentos, complejos, caros e ineficientes para muchos de los problemas existentes en las aplicaciones de Internet actuales, especialmente en el ámbito de la Web 2.0 y las redes sociales. Frente a estos sistemas clásicos, proponen la utilización de sistemas más eficientes y baratos para gestionar la información, como los almacenes de datos basados en clave-valor como BigTable (Google) o Cassandra (Facebook), o incluso almacenes en memoria como Memcached, la utilización de shardings sobre estos almacenes para ofrecer almacenamiento distribuido, y sistemas como Hadoop que permitan el trabajo sobre estos almacenes distribuidos.

"Las bases de datos relaciones nos ofrecen demasiado. Nos fuerzan a adaptar nuestros objetos para adaptarlos a una RDBMS (sistema de gestión de bases de datos relacional)", dice Jon Travis, uno de los principales ingenieros en SpringSource, y uno de los 10 presentadores en la reunión de NoSQL.

Las alternativas basadas en NoSQL "te ofrecen sólo lo que necesitás", dice Travis.

Surge el código abierto

Los primeros precursores son desarrolladores Web y Java, muchos de los cuales aprendieron a llevar adelante sus iniciativas (ajustadas en presupuesto) sin usar Oracle. Para esto construyeron sus propias soluciones para almacenar datos (emulando lo que hicieron Google y Amazon), y luego las publicaron como código abierto.

Hoy estas soluciones gestionan terabytes e incluso petabytes de datos para la Web 2.0, y ya no es factible volver atrás, por motivos técnicos, económicos e incluso ideológicos.

"Las empresas Web 2.0 pueden tomar riesgos y necesitan escalabilidad", dice Johan Oskarsson, el organizador de la reunión NoSQL y, como la mayoría de los participantes, un desarrollador Web (del sitio Last.fm). "Cuando se combinan estas dos cosas, hace que NoSQL sea una muy buena alternativa".

Muchos, dice Oskarsson, dejaron de usar la base de datos MySQL, una favorita de la Web 2.0 por mucho tiempo, en favor de una alternativa NoSQL porque las ventajas eran demasiado grandes para ignorar.

Por ejemplo, Facebok creó su almacen de datos Cassandra para soportar una nueva búsqueda en su sitio web, en vez de usar su base de datos MySQL existente. De acuerdo a la presentación del ingeniero de Facebook Avinash Lakshman, Casandra puede escribir hasta 50GB de datos en disco en tan sólo 0.12 milisegundos, más de 2500 veces más rápido que MySQL.

¿Y qué es NoSQL? (técnicamente hablando)

Los nombres de los proyectos son tan diversos como extraños: Hadoop, Voldemort, Dynomite, y otros. Pero suelen estar unificados por algunos puntos en común, incluyendo:

No llamarlos "bases de datos". Werner Vogels, CTO de Amazon, se refiere a su sistema Dynamocomo "un almacenamiento de clave-valor de alta disponibilidad". Google llama a su BigTable, otro de los modelos para muchos simpatizantes de NoSQL, "un sistema de almacenamiento distribuido para gestionar datos estructurados".

Pueden manejar enormes cantidades de datos. Hypertable, una implementación de código abierto basada en BigTable, se usa dentro del motor de búsqueda Zvents para escribir 1000 millones de celdas de datos por día, según cuenta el ingeniero Doug Judd en su presentación.

A su vez, BigTable, en conjunto con su tecnología hermana MapReduce, procesa hasta 20 petabytes de datos por día.

"Definitivamente la cantidad de datos es tan grande que las personas están buscando otras tecnologías", dice Travis de SpringSource, que con su tecnología VPork ayuda a los usuarios de NoSQL a realizar benchmarks de rendimiento de sus bases de datos alternativas.

Se ejecutan en clusters de servidores de PC baratas. Los clusters de PC se pueden expandir de forma facil y barata sin la complejidad y el costo del "data sharding", que involucra recortar una base de datos en múltiples tablas para ejecutarse en grandes clusters o grillas.

Google cuenta que uno de sus clusters de BigTable más grande gestiona 6 petabytes de datos sobre miles de servidores.

"Oracle te va a decir que con el hardware y la configuración adecuada de Oracle RAC (Real Application Clusters) y algún otro software mágico pueden lograr la misma escalabilidad. ¿Pero a qué costo?", pregunta Javier Soltero, CTO de SpringSource.

Superan los cuellos de botella de rendimiento. Al no tener que realizar la traducción de datos hacia un formato amigable para SQL, las arquitecturas NoSQL son mucho más rápidas.

"SQL es un enfoque extraño para el código procedural, y casi todo el código es procedural", dice Curt Monash, un analista independiente de bases de datos y blogger. "El costo de mapear los datos a SQL puede valer la pena para los casos en que estos datos tengan que manipularse extensivamente... pero cuando la estructura de la base de datos es muy simple, SQL no parece ayudar".

Raffaele Sena, de Adobe Systems, dice que Adobe relanzó su servicio colaborativo ConnectNow Web hace un año y medio, y decidió no usar una base de datos por los motivos explicados por Monash.

Adobe usa Terracotta, un software Java para clustering, para gestionar los datos en formato Java. Sena explica que este enfoque es la clave por la cual el rendimiento de ConnectNow es dos a tres veces superior a la versión anterior. "El sistema hubiera sido mucho más complejo y dificil de desarrollar con una base de datos", dice.

Otro proyecto, MongoDB, se llama a si mismo "base de datos orientada a documentos" por su almacenamiento nativo de datos de tipo objeto.

Sólo lo necesario. Quienes impulsan NoSQL admiten que las bases de datos tienen características únicas y una reputación sólida para la integridad de datos, pero explican que todo esto puede resultar demasiado para sus necesidades.

Tomemos por ejemplo a ConnectNow que, incluso sin una base de datos, hace tres copias de los datos de la sesión del usuario mientras está online - datos que luego son borrados cuando el usuario se desconecta, dice Sena. "No necesitamos una base de datos, ya que la mejor representación de los datos ya están en memoria", dice.

Soporte de la comunidad

Por ser de código abierto, las alternativas de NoSQL no suelen tener el mismo soporte que otros proveedores tradicionales. Para la mayoría de los entusiastas de NoSQL esto no es un problema, ya que están acostumbrados a trabajar con enfoques alternativos.

Pero algunos admiten que puede causar miedo trabajar sin "un cuello para ahorcar" cuando las cosas salen mal, especialmente para los gerentes.

"Tuvimos que salir a vender la propuesta", admite Sena de Adobe. "Pero básicamente, después de ver que nuestro primer prototipo funcionaba, pudimos convencer a la alta gerencia que este era el camino correcto".

A pesar de todo el potencial, la mayoría de las organizaciones todavía no necesitan preocuparse por lo que se pierden, dice Monash.

"La mayoría de las organizaciones grandes ya tienen una forma de hacer OLTP (procesamiento de transacciones online), probablemente a través de sistemas de bases de datos. ¿Por qué cambiar?", dice. MapReduce y otros proyectos "puede ayudar a las organizaciones. Pero probablemente debería integrarse a una DBMS analítica".

Incluso Orkarsson, el organizador de NoSQL, admite que su compania, Last.fm, todavía no migró a una alternativa NoSQL, y en cambio usa bases de datos de código abierto. Por ahora, la revolución está esperando.

"Es verdad que hoy NoSQL no es muy relevante para la mayoría de las organizaciones", dice Orkarsson. "Pero esto podría cambiar en los próximos dos años".

sábado, 19 de septiembre de 2009

Noop

Noop es un nuevo lenguaje java que corre sobre JVM y además es de google. Este lenguaje tiene sintaxis similar a Java pero agrega algunas ventajas. Como por ejemplo la inyección de dependencias nativa en el lenguaje.

Su enfoque a la inyección de dependencias se basa en que una clase se puede crear de dos formas: a partir de objetos que el inyector puede proveer o a partir de a creación de dichos objetos en tiempo de ejecución ( usando new ), pero nunca a partir de una mezcla de ambos. Puedes leer los detalles de como piensan implementar esta funcionalidad en el wiki del proyecto.

Además del tema de Testability y la DI, Noop busca simplificar la programación para la JVM atacando casos comunes desde el core como la gestión de Nulls e impulsando las buenas prácticas de programación como favorecer la composición sobre la herencia. Características que a mi parecer lo hacen una opción interesante para mejorar la calidad de los desarrollos.


El proyecto esa en su fase inicial, pero ya puedes descargar la versión 0.1 para empezar a probarla. Algo interesante del lenguaje, es que además de proporcionar un intérprete para ejecución del lenguaje y un compilador a Byte Code (como lo hacen otros lenguajes de la JVM), también incluyen un "Traductor" cuyo propósito es generar código java a partir de Noop para permitir codificar en este lenguaje aunque tus proyectos sean 100% Java.

domingo, 13 de septiembre de 2009

Las novedades del JDK 7

Las novedades del JDK 7 serán:

  • Switch con objetos de tipo String
  • Gestión automática de recursos
  • Mejoras en la inferencia de tipos para la creación de Generics
  • Invocación de métodos con varargs simplificada
  • Mejoras en los literales numéricos
  • Soporte en el lenguaje para Collections
  • Soporte en el lenguaje para JSR 292

viernes, 11 de septiembre de 2009

Tiene un Plan!!

Oracle publico el siguiente aviso en el cual no habla de java, y reta a IBM! Saquen sus propias conclusiones.

sábado, 5 de septiembre de 2009

Hitler se entera que Oracle Compro Sun Microsystems

Lenguajes Scripts en Spring.

La desventaja de los lenguajes compilados, es que si quisiéramos hacer un cambio, para que se aplique este cambio hay que volver a compilar. No estoy diciendo nada nuevo, en java por ejemplo se usan archivos xml para hacer dinámicamente cambios. Hay situaciones en las cuales necesitamos hacer cambios dinámicos en nuestra aplicación pero no podemos recompilar. La solución es cantada usar algún lenguaje script.

Imaginemos que tengo toda mi arquitectura en java, y se nos presenta el problema anterior. Bueno spring nos permite ejecutar beans escritos en lenguaje script.

Vamos a desarrollar un ejemplo. Vamos a programar el famoso saludador:

package com.emanuel.prueba;

public class Saludador {

public void saludar {

this.saludo.decirHola();

}

private Saludo saludo;

public void setSaludo(Saludo saludo) {

this.saludo = saludo;

}

}

El Saludador tiene un Saludo el cual se inyecta con spring.

package com.emanuel.prueba;

public interfaz Saludo {

void decirHola();

}

Ahora inyectémosle al Saludador el Saludo.

<bean id=”elSaludador” class=”com.emanuel.prueba.Saludador” >

<property name=”saludo” ref=”saludo” />

< /bean>

Hasta ahora no hemos hecho nada nuevo, lo único que nos falta es implementar la interfaz Saludo, y lo vamos a hacer en JRuby.

Para programar beans scripts spring nos permite elegir entra JRuby, Groovy , BenShell y Jython. Para el ejemplo voy a usar JRuby:

class Saludo

def decirHola

puts “Holasssss amigos”

end

end

Saludo.new

Una cosa muy importante es la ultima línea ya que es lo que nos va a dar una instancia de Saludo. Ahora a decirle a spring que tenemos nuestro bean implementado con otro JRuby.

< beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:lang="http://www.springframework.org/schema/lang"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/lang

http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">


< lang:jruby id="saludo"

script-source="classpath:dondeDejeElarchivo/saludo.rb "

script-interfaces=” com.emanuel.prueba.Saludo”

refresh-check-delay=”5000” />


< /beans>


Y listo!!

Existe un tag para cada lenguaje: lang:jruby, lang:groovy, lang:bsh, etc.

El atributo refresh-check-delay indica cada cuantos mili segundos se va a actualizar el codigo, lo que permitira que nuestros cambios se vean reflejados.

Todo esto lo podemos hacer gracias a la magia de spring!!!

Inciclopedia

Navegando sin rumbo me encontré con la inciclopedia es un lugar donde la gente escribe definiciones graciosas y artículos con humor.

El grado de delirio de la página la hace muy interesante, dejo el link: http://inciclopedia.wikia.com/wiki/Portada y para aquellos que quieran escribir pueden leer los consejos de cómo escribir aquí: http://inciclopedia.wikia.com/wiki/CSDYNE

sábado, 29 de agosto de 2009

Linux crecio un 23,4% entre 2007 y 2008

Los sistemas operativos basados en Linux crecieron un 23,4% entre 2007 y 2008. Esta tendencia se mantendrá con picos del 16,9% hasta 2013, según un estudio publicado por IDC.

Al mismo tiempo, se prevé una contracción en el número de suscripciones en 2009, tendencia que se prevé se corrija en 2013. Bien es cierto, que se calcula que las implementaciones no remuneradas de Linux crezcan más rápido que los nuevos abonados hasta 2013.

viernes, 28 de agosto de 2009

Linux en tu celular

La compañía confirma así lo que hasta ayer no eran más que rumores: Maemo es el sistema operativo de su nuevo terminal.

Nokia acaba de confirmar lo que hasta ahora no era más que un rumor muy sólido. La compañía lanza al mercado su primer teléfono Linux, el N900, que se convierte en una nueva alternativa en el porfolio de la casa. El software incorporado en el terminal es Maemo, desarrollado sobre el SO open source.

“Basado en la plataforma Linux, utilizando la última tecnología de navegación web de Mozilla y, ahora también, añadiendo la conectividad celular de las redes 2G/3G, el Nokia N900 ofrece una experiencia móvil tremendamente potente", explica el vicepresidente ejecutivo de Mercados de Nokia, Anssi Vanjoki.

"Lo que hemos logrado con el sistema operativo Maemo es la clave para fusionar la potencia del ordenador, el mundo de Internet, y toda la versatilidad de los móviles convergentes, y es estupendo ver cómo está evolucionando en nuevos dispositivos tan interesantes como éste", añade Vanjoki. El principal reclamo del último teléfono de Nokia es justamente ese: su condición de dispositivo móvil pero que ofrece la misma "experiencia" que un PC.

La compañía ha llegado a este producto (al que en ningún momento la empresa llama smartphone) tras sus experiencia en las Internet Tablets, ya equipadas con Linux.

La inclusión de este terminal en su porfolio no significa la desaparición de Symbian, los dos sistemas operativos convivirán dentro de la oferta de la firma. "Mientras sigue creciendo la plataforma Symbian para smartphones, Maemo permite ofrecer nuevas experiencias en tecnología móvil basadas en código abierto manteniendo un fuerte vínculo con el mundo del ordenador de sobremesa”, apunta el analista senior de Consumer Mobile en IDC, Jonathan Arber.

Los Negros usan Ubuntu ?


La división polaca del gigante del software eliminó, programa de edición mediante, a un hombre de color de una imagen publicitaria para reconvertirlo en un hombre blanco.

"Lo lamentamos", indica un portavoz de Microsoft, como recoge la CNN, al tiempo que señala que ya se ha arreglado el fallo y que "estamos investigando qué sucedió".

A pesar de las lamentaciones, Internet se ha levantado. Una rápida consulta en el motor de búsqueda de Twitter demuestra un amplio interés en la materia. Microsoft Poland arroja todo un hilo de resultados que se actualiza minuto a minuto, al igual que Microsoft ad, Microsoft Polonia o Microsoft Photoshop, con entradas plurilungües. De hecho, el clamor en Twitter es tal que la compañía ya ha utilizado su propia cuenta para pedir disculpas. "Error de marketing en la photo del site- sinceras disculpas - estamos en proceso para eliminar la imagen". "¿En serio, Microsoft?", le pregunta en tiempo real un usuario en su tweet.

Las disculpas de Microsoft no podrán apagar el clamor en la red, donde los internautas comentan y condenan el suceso. De hecho, el popular site sobre nuevas tecnologías TechCrunch ha abierto un concurso de variaciones sobre la imagen para encontrar la mejor alternativa a la metedura de pata de Redmond.

El fuego a apagar para el departamento de marketing podría no haber hecho más que empezar.

sábado, 22 de agosto de 2009

Siempre estamos equivocados

Gente, me gusto mucho esto que lei de : http://www.dosideas.com/metodologias/699-el-abc-de-la-estimacion-de-historias.html y lo quiero compartir:

Predecir el futuro con estimaciones es prepararnos para un fracaso inminente. Cuando estimamos, siempre estamos equivocados. Siempre. Es sólo una cuestión de qué tan equivocados estamos. Y está bien - podemos mejorar con el tiempo, y el negocio siempre le encuentra valor a las estimaciones. La repetición y la familiaridad con las tareas pueden mejorar drásticamente el margen de error.

El mejor consejo: ¡comenzar simple! Estas cinco guías nos pueden ayudar a abrinos camino en las estimaciones:

  • Estiman todos los contribuyentes. No sólo estima un representante de los desarrolladores y el líder del equipo, y obviamente que NO estima el cliente o quien pida el requerimiento (¡que bizarro!). Estiman quienes van a trabajar directamente con la historia. De otra forma no tiene sentido.
  • Descomponer las historias en tareas para verificar el alcance. Este ejercicio ayuda a verificar si se comprendió bien la historia, y a menudo genera discusiones sobre cosas que podrían impactar en la estimación. A veces una rápida descomposición en tareas le permite al equipo darse cuenta que la historia era mucho más grande de lo pensado.
  • Llegar al consenso con Planificación de Poker. Esta técnica de estimación basada en Wideband Delphi es una forma divertida, colaborativa y rápida para llegar a un consenso en el equipo. Se muestran las cartas, si todos están de acuerdo o muy cerca, se selecciona el tamaño y se avanza. Si no hay acuerdo, se debate por unos minutos y se vuelve a probar. Si todavía hay desacuerdo, se avanza hacia la siguiente historia y se vuelve más tarde a intentar.
  • Disminuir la granularidad a medida que se incrementa al tamaño de la historia. No podemos estimar las cosas de forma precisa. A medida que la historia se hace grande, más de un par de días, incluso una diferencia de un día es muy poco. "¿Es una historia de 6 ó 7 días?" Ufff, como si importara. Hagámosla y nos enteramos. La serie de Fibonacci es un clásico entre los equipos ágiles. Una historia que el equipo piensa es de 6 seguramente no se va a completar en 5 días, así que elegimos 8.
  • Estimar en tamaños relativos. Hay mucho debate sobre este tema, pero lo cierto es que el tamño no se degrada en el tiempo, y no varía dependiendo de las habilidades del desarrollador. Los días calendario si. El libro Agile Estimating y Planificación de Mike Cohn tiene mucha más información adicional y diferencias entre estos dos enfoques.

El tango y sus invitados

Encontre un blog muy bueno donde se puede informar del tango y su contexto historico.

Muy Bueno!!!


Chan chon!!!

viernes, 21 de agosto de 2009

Facelets

Facelets es un sistema de plantillas, parecido a Tiles para Strut

Estas son las propiedades más interesantes de Facelets:

  • Trabajo basado en plantillas.
  • Fácil composición de componentes.
  • Creación de etiquetas lógicas a la medida.
  • Funciones para expresiones.
  • Desarrollo amigable para el diseñador gráfico.
  • Creación de librerías de componentes.

Para empezar a entender Facelets es interesante hacer la sigiente comparación con JSP:
  • JSP es un lenguaje de plantillas para producir un servlet (el body de la página JSP sería el equivalente de los métos doGet() y doPost() del servlet).
  • Las etiquetas JSF (como pueden ser f:view y h:form) simplemente son llamadas a los componentes JSF correspondientes, de forma que sean renderizados en su estado actual.
  • Facelets es un lenguaje de plantillas para construir un árbol de componentes, no un servlet. Esto permite una gran reutilización, de forma que se pueden definir componentes como composición de otros componentes. Además, Facelets se ha creado teniendo en cuenta el ciclo de vida JSF, al contrario de JSP, donde el ciclo de vida del servlet producido es independiente del ciclo de vida de JSF.