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.

domingo, 16 de agosto de 2009

Como crear un proyecto Flex-BlazeDS-Spring con Maven?


Prerequisitos:

Tener instalado maven 2; ver http://www.scribd.com/doc/7654692/Inicio-Maven

Bajar Spring-flex de http://www.springsource.com/products/spring-community-download

A trabajar:

Crear el proyecto para este ejemplo solo creamos un proyecto el cual va a ser web, por lo tanto lo creamos de la siguiente manera:

mvn archetype:create -DgroupId=com.emanuelpeg 
-DartifactId=ejemploFlex 
-DarchetypeArtifactId=maven-archetype-webapp

Entramos en el proyecto


cd ejemploFlex
mvn clean install
mvn eclipse:eclipse 

La última línea es si usan eclipse.

Editamos el pom agregando las dependencias de spring y BlazeDS:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">


<modelVersion>4.0.0</modelVersion>

<groupId>com.emanuelpeg</groupId>

<artifactId>ejemploFlex</artifactId>

<packaging>war</packaging>

<version>1.0-SNAPSHOT</version>

<name>ejemploFlex Maven Webapp</name>

<url>http://maven.apache.org</url>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring</artifactId>

<version>2.5.6</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>2.5.6</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>2.5.6</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-flex</artifactId>

<version>1.0.0</version>

</dependency>

<dependency>

<groupId>com.adobe.blazeds</groupId>

<artifactId>blazeds-remoting</artifactId>

<version>3.2.0.3978</version>

</dependency>

<dependency>

<groupId>com.adobe.blazeds</groupId>

<artifactId>blazeds-common</artifactId>

<version>3.2.0.3978</version>

</dependency>

<dependency>

<groupId>com.adobe.blazeds</groupId>

<artifactId>blazeds-core</artifactId>

<version>3.2.0.3978</version>

</dependency>

<dependency>

<groupId>com.adobe.blazeds</groupId>

<artifactId>blazeds-proxy</artifactId>

<version>3.2.0.3978</version>

</dependency>

<dependency>

<groupId>com.adobe.blazeds</groupId>

<artifactId>blazeds-opt</artifactId>

<version>3.2.0.3978</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-core-lgpl</artifactId>

<version>0.9.9-6</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-core-lgpl</artifactId>

<version>0.9.9-6</version>

</dependency>

<dependency>

<groupId>org.codehaus.jackson</groupId>

<artifactId>jackson-mapper-lgpl</artifactId>

<version>0.9.9-6</version>

</dependency>

<dependency>

<groupId>xalan</groupId>

<artifactId>xalan</artifactId>

<version>2.7.0</version>

</dependency>

<dependency>

<groupId>commons-httpclient</groupId>

<artifactId>commons-httpclient</artifactId>

<version>3.1</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.4</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>2.5.6</version>

<scope>test</scope>

</dependency>

</dependencies>

<build>

<plugins>

<plugin>

<artifactId>maven-compiler-plugin</artifactId>

<configuration>

<source>1.5</source>

<target>1.5</target>

</configuration>

</plugin>

<plugin>

<artifactId>maven-eclipse-plugin</artifactId>

<configuration>

<wtpversion>1.5</wtpversion>

<downloadSources>true</downloadSources>

</configuration>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-javadoc-plugin</artifactId>

</plugin>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-project-info-reports-plugin</artifactId>

</plugin>

</plugins>

<finalName>ejemploFlex</finalName>

</build>

</project>


OJO!!! Spring 2.5.6 o superior y adobe BlazeDS 3.2 o superior.

Seguramente cuando hagan mvn clean install explote como loco. Porque nos pide que instalemos spring-flex bueno eso se hace así:

mvn install:install-file -DgroupId=org.springframework -DartifactId=spring-flex -Dversion=1.0.0 -Dpackaging=jar -Dfile=pathDondeEstaElJar\org.springframework.flex-1.0.0.RELEASE.jar

Para ver si se instalo deben ir a : $M2_REPO\org\springframework\spring-flex\1.0.0 si existe esto está todo bien. Donde $M2_REPO es donde está el repositorio maven, la carpeta .m2/repository.


mvn clean install

mvn eclipse:eclipse


Configurar blazeDs con spring.

Tenemos que configurar spring para que funcione (como cualquier aplicación web con spring)


<?xml version="1.0"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>Ejemplo Flex</display-name>

<!-- The front controller of this Spring Web application, responsible for handling all application requests -->

<servlet>

<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<!-- Map all /messagbroker requests to the DispatcherServlet for handling -->

<servlet-mapping>

<servlet-name>Spring MVC Dispatcher Servlet</servlet-name>

<url-pattern>/messagebroker/*</url-pattern>

</servlet-mapping>

</web-app>


Por ahora todo normal, ahora debemos configurar MessageBroke esto se hace en el archivo de context de spring por ejemplo algo así:

<?xml version="1.0" encoding="UTF-8"?>

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

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

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

xsi:schemaLocation="

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

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

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

http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">

<bean id="dao.persona" class="com.emanuelpeg.dao.impl.DaoPersonaImpl">

</bean>

<bean id="service.persona" class="com.emanuelpeg.service.impl.PersonaServiceImpl">

<property name="daoPersona">

<ref bean="dao.persona" />

</property>

<flex:remoting-destination />

</bean>

<flex:message-broker />

</beans>

Si intentan levantar el servidor va a explotar por los aires, porque no tenemos los archivos xml, para configurar BlazaDs.

Estos archivos se encuentran en la carpeta flex del proyecto BlazaDs, que se encuentra es http://flexorg.wip3.adobe.com/blazeds/3.0.x/milestone/3978/blazeds-bin-3.2.0.3978.zip, deszipeen el proyecto y copien la carpeta flex que se encuentra en blazeds\WEB-INF en su WEB-INF

Posta, levanten el servidor y levanten el servidor. Para probar si todo esta bien vayan a http://127.0.0.1:8080/ejemploFlex/messagebroker/amf

Para llamar el servicio en Flex deben crear un proyecto indicándole que van a ser Aplication server type J2EE. Despues le dicen :


Root URL: http://127.0.0.1:8080/ejemploFlex/

contextRoot: ejemploFlex/

output folder: dondeSeLevantaTomcatOJetty\ejemploFlex\ejemploFlex-debug


Y Por ultimo usemos los servicios, copio y pego un ejemplo:


<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

<mx:RemoteObject id="personaService"

destination="service.persona"

fault="errorFaultHandler(event);"

channelSet="{channel}">

<mx:method name="getPersonas" result="getAllResultHandler(event)"/>

<mx:method name="guardar" result="mensaje()" />

</mx:RemoteObject>

<mx:ChannelSet id="channel">

<mx:AMFChannel uri="http://127.0.0.1:8080/ejemploFlex/messagebroker/amf"/>

</mx:ChannelSet>


<mx:Script>


import dto.Persona;

import mx.rpc.events.ResultEvent;

import mx.controls.Alert;

import mx.rpc.events.FaultEvent;

//Si hay un error lo mostramos en pantalla

public function errorFaultHandler(e:FaultEvent):void

{

Alert.show("Ocurrio un error al invocar el servicio: "

+ e, "error", 4);

}

public function mensaje():void

{

Alert.show("Exito Total");

}

public function getAllResultHandler(e:ResultEvent):void

{

//Actualizamos la tabla con el resultado de la

//invocacion del servicio

usuariosDG.dataProvider = e.result;

Alert.show("holas");

}

public function guardar():void

{

var persona:Persona = new Persona();

persona.nombre = inpNombre.text;

persona.apellido = inpApellido.text;

personaService.guardar(persona);

}

</mx:Script>


<mx:ViewStack id="viewstack1" top="31" left="10" right="10" bottom="10">

<mx:Canvas label="VER" width="100%" height="100%">

<mx:AdvancedDataGrid x="26" y="33" id="usuariosDG" designViewDataType="flat" width="642" height="323">

</mx:AdvancedDataGrid>

<mx:Button label="Button" click="personaService.getPersonas()" x="266" y="383"/>

</mx:Canvas>

<mx:Canvas label="INGRESAR" width="100%" height="100%">

<mx:Label x="22" y="19" text="Nombre"/>

<mx:Label x="22" y="45" text="Apellido"/>

<mx:TextInput x="78" y="17" id="inpNombre"/>

<mx:TextInput x="78" y="43" id="inpApellido"/>

<mx:Button x="78" y="73" label="Guardar" click="guardar();"/>

</mx:Canvas>

</mx:ViewStack>

<mx:ToggleButtonBar x="10" y="10" dataProvider="viewstack1">

</mx:ToggleButtonBar>

</mx:Application>