Control de Calidad

Ultimamente han venido a mi cabeza ideas de analogías sobre el control de calidad, y he querido expresarlas aquí.

¿Que sucede comunmente cuando se desarrollan proyectos a pequeña-mediana escala y estos son evaluados por los usuarios finales?

Les dibujo un panorama antes. Una micro-empresa los contrata para el desarrollo de una aplicación web, donde tienen que administrar la venta en línea de ciertos productos. Esta aplicación tiene dos ámbitos: uno público para el consumidor final, y otro administrativo para personal entrenado. Gente que sabe, o debería saber hacer su trabajo. Continuar leyendo “Control de Calidad”

Versionitis

Creo que cada vez más se libera software más frecuentemente, hasta microsoft lo empieza a hacer, recuerdo cuando no podían liberar algo hasta una nueva version del Visual Studio o Service Pack que lo soportara. Ahora tenemos el ejemplo de chrome, donde en menos de 3 años ya van en la version 13 y Firefox anuncio que le va a seguir los pasos. Continuar leyendo “Versionitis”

Festival Latinoamericano de Instalacion de Software Libre

Por fin está listo el podcast del mes de Marzo.

En esta ocasión nos acompañó Alexandro Colorado, un entusiasta promotor del software libre, para platicarnos acerca del FLISOL y su realización en la ciudad de Cancún, lugar donde actualmente radicamos Cesar, Iaax y un servidor, así como el buen JZA (Alexandro) .

Espero les guste esta amena charla de aproximadamente 40 minutos, donde JZA nos comparte su experiencia como colaborador del proyecto OpenOffice.org y su vision de la filosofía del Software Libre.

Aprovechamos este espacio para animar a todos los escuchas a participar en el FLISOL ya sea en Cancun o en donde sea que radiquen (esperemos que se realice un FLISOL en tu ciudad), ya que la colaboración es la materia prima de este movimiento.

Les adjunto los datos de JZA para cualquier información sobre el FLISOL.

JZA
Coordinador Nacional para Mexico del FLISOL
twitter: @flisolmexico
web: http://flisol.info/Mexico

Gracias,  apoyen el movimiento y comenten. Nos vemos en Abril.

Pd.- La cancion del final es una sorpresa para aquellos amantes del llamado Art Rock.

Aprende Ruby on Rails en Español

Este próximo 28 de agosto la gente en @railsmx estará transmitiendo en vivo su primera conferencia virtual.

 

Con la finalidad de atraer nuevos desarrolladores a la comunidad de rails, nuestra temática será una introducción intensiva al desarrollo en Ruby on Rails, así que si tú o alguien que conozcas está interesado en aprender Ruby on Rails no faltes este sábado 28 de agosto.

Conéctate desde las 10am y hasta las 8pm estaremos charlando sobre temas básicos de rails, incluso tocaremos los conceptos iniciales de Ruby como lenguaje para que no tengas pretexto.

Para mas información sobre la conferencia visita la pagina de rails.mx y aprende a desarrollar usando Ruby on Rails

Saludos

Iaax Page
Consultor en Diseño de Experiencia de Usuario, Desarrollo Web y Marketing On-Line
Software, Ingeniería y Diseño
Redes Sociales: TwitterFacebookLinkedIn

 

Instalando Ruby 1.8.7 con Rails 2.3.5 en CentOS 5

Después de mucho esperar por fin empezamos a desarrollar en Ruby on Rails.

Una de las primeras tareas es crear un servidor de desarrollo con las caracterísiticas del servidor de producción. En nuestro caso es un CentOS 5.

CentOS esta basado en Red Hat, eso ya lo hace por si solo interesante, sin embargo una de las particularidades especiales de este SO es que usa YUM para instalar y actualizar software, lo cual espero les resulte igual de grato que a mi.

CentOS puede instalar una versión de Ruby por defecto, si me preguntan, aconsejo omitirla, ya que de cualquier modo lo que necesitaremos será la versión mas estable de ruby donde las Gems si compilan. En este momento esa versión es la 1.8.7. Instalar Ruby con YUM tampoco es una opción ya que descarga la versión 1.8.5  –Siempre puedes ejecutar yum erase ruby, si ya instalaste esta versión.

En este tutorial deberas estar logeado como root o tener permisos de sudoer para poder ejecutar algunas instrucciones.

Manos a la obra

1.- Instalar GCC

[shell]
sudo yum install -y gcc
[/shell]

Gcc es la herramienta que usaremos para compilar ruby. Puedes omitir el sudo si estas logeado como root. El modificar -y le indica a YUM que asuma SI a todas las preguntas, esto te ahorra tiempo, si quieres interactuar puedes omitirlo y estar atento a la instalación, incluso usar el modificador -v para que YUM te platique todo lo que esta haciendo.

2. Descargar Ruby 1.8.7-p72 desde ruby-lang.org

[shell]
cd /usr/src
sudo curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p72.tar.gz
[/shell]

Asegurate de descargar el paquete de ruby marcado con -p72, de lo contrario algo podría no funcionar correctamente.

Una vez que el paquete de ruby 1.8.7 fue descargado procedemos a descomprimirlo, configurar, compilar e instalar.

Copilando ruby

[shell]
tar xzvf ruby-1.8.7-p72.tar.gz
cd ruby-1.8.7-p72
./configure
make
make install
[/shell]

En este momento, si todo ha salido bien, podemos ejecutar el comando which ruby para ver si tenemos ruby instalado correctamente y ruby -v para enterarnos de la versión de este.

Comprobando la instalación

[shell]
which ruby
ruby -v
[/shell]

El primer comando nos devuelve la ruta donde ruby esta instalado, y el segundo la versión de este.

3. Descargar las Gems

El procedimiento es muy similar, usamos curl para descargar y tar para descomprimir. Despúes procedemos a compilar GEM con ruby setup.rb

[shell]
cd ..
curl -O http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.3.5.tgz
tar xzvf rubygems-1.3.5.tgz
cd rubygems-1.3.5
ruby setup.rb
[/shell]

En este momento si corremos el comando gem list nos debe devolver una lista vacía de las gemas disponibles, esto es porque aun nos falta instalar rails, mysql y mongrel.

4. Instalando Rails y Mongrel

[shell]
cd /
gem install rails
gem install mongrel
[/shell]

Despues de haber corrido el comando para instalar rails, 8 gemas deben haberse instalado para ruby, si corremos el comando gem list, nos devolvera la lista de gemas instaladas, en este momento debemos poder ver rails version 2.3.5, rake 0.8.7 y compañía.

Una vez que mongrel este instalado tendremos 13 gemas en total, ya que mongrel instala a algunos de sus amigos consigo.

Creando la primera aplicación en rails bajo mongrel

Es hora de probar que nuestro trabajo ha funcionado. Hasta el momento, lo único que hemos hecho es instalar ruby, rails y mongrel.

Puedes cambiar ahora de usuario y abrir una nueva terminal para ejecutar el siguiente código

[shell]
cd /home/[type_username-here]/Desktop
rails demo
cd demo
ruby script/server
[/shell]

En este momento si has seguido todos los pasos en forma ordenada debes ser capaz de abrir en tu navegador favorito la dirección http://localhost:3000 y ver el mensaje de bienvenida de rails.

Felicidades, ahora tienes Rails instalado en CentOS 5. Por el momento me despido esperando que esto les pueda servir un poco, pero regresare pronto con mas sobre Ruby on Rails.

Próximos artículos

  • MySQL para Ruby on Rails
  • Creando un cluster de mongrel balanceado con Apache.

Iaax Page
User Experience Designer & Web Developer

Quien es que? Roles en el equipo de desarrollo de software

Equipo de Desarrollo de Software

El equipo de desarrollo de software, en las pequeñas y medianas empresas.

Los Desarrolladores

  • Arquitecto de Sofware
  • Gerente de Proyecto
  • Lider de Proyecto
  • Desarrollador Sr.
  • Desarrollador Jr.
  • Programador

Los Diseñadores

  • Arquitecto de Experiencia de Usuario
  • Diseñador de Experiencia de Usuario
  • Diseñador de Interaccion

En muchas orgranizaciones, estos puestos pueden o no estar presentes. Lo mas importante es tener un equipo organizado, aplicando metodologias de desarrollo modernas.

Saludos

Iaax Page y Cesar Reyes

Patron de Desarrollo Model View Controller

Arquitectura: El Domo de Roma.
Arquitectura: El Domo de Roma.

En esta ocacion en el podcast de Rock Developer Cesar Reyes y Iaax Page nos hablan sobre el patron de arquitectura Model View Controller. Y como este nos ayuda a desarrollar mejor.

Vinculos del podcast

Este es el episodio Numero 9 del podcast. Estamos trabajando para agregar un mejor feed que les permita descargar los episodios desde el iTunes. Un mejor plugin para el reproductor de MP3 y algunas otras cosas interesantes.

Queremos convertir a RockDeveloper en una mejor comunidad.

Muchas Gracias por su apoyo y no se olviden de hacer click en el boton retweet, en la esquina superior derecha de este post.

Saludos cordiales,

Iaax Page y Cesar Reyes

Ejecutar una tarea asincrona en java con spring

A veces necesitamos ejecutar una tarea que lleva un tiempo considerable y que el usuario no necesariamente necesita ser informado en el momento, por ejemplo el envío de un correo de notificación (en algunos casos), el hacer un proceso x que lleva tiempo, etc…

La clase TaskExecutor de spring abstrae la de java.concurrent.Executor de manera tal que es mucho mas facil con spring, SimpleAsyncTaskExecutor (asincrono), SyncTaskExecutor (sincrono), SimpleThreadPoolTaskExecutor y otros mas.

Pongo un ejemplo del uso del SimpleAsyncTaskExecutor
[java]
private TaskExecutor taskExecutor;

public void setTaskExecutor(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}

taskExecutor.execute(new Runnable(){
public void run() {

}
});
[/java]
Aquí mostramos la configuración de nuestra clase usando un TaskExecutor en spring.
[xml]
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>

<bean id="myBean" class="org.myproject.MyBean">
<property name="taskExecutor" ref="taskExecutor"/>
</bean>
[/xml]
Cuando usamos hibernate y tenemos relaciones “lazy” en nuestros objetos que son traidos con hibernate, esto nos puede traer problemas al usar simplemente el TaskExecutor, tenemos que hacer una especia de OpenSessionInThread para poder tener la session abierta y que se reutilice esa session a lo largo del codigo ejecutado.

Pongo un ejemplo de como seria esa implementación. El código es similar a la implementación del OpenSessionInViewFilter de spring.
[java]
public abstract class OpenSessionInThreadTask implements Runnable{

private ApplicationContext ctx;

public OpenSessionInThreadTask(ApplicationContext ctx) {
this.ctx = ctx;
}

protected abstract void runInternal();

public final void run(){
SessionFactory sessionFactory = lookupSessionFactory();
boolean participate = false;

// single session mode
if (TransactionSynchronizationManager.hasResource(sessionFactory)) {
// Do not modify the Session: just set the participate flag.
participate = true;
}
else {
Session session = getSession(sessionFactory);
TransactionSynchronizationManager.bindResource(sessionFactory, new SessionHolder(session));
}

try{
runInternal();
}

finally {
if (!participate) {
// single session mode
SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(sessionFactory);
closeSession(sessionHolder.getSession(), sessionFactory);
}
}
}

protected SessionFactory lookupSessionFactory() {
return ctx.getBean("sessionFactory", SessionFactory.class);
}

protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {
Session session = SessionFactoryUtils.getSession(sessionFactory, true);
FlushMode flushMode = FlushMode.MANUAL;
if (flushMode != null) {
session.setFlushMode(flushMode);
}
return session;
}

protected void closeSession(Session session, SessionFactory sessionFactory) {
SessionFactoryUtils.closeSession(session);
}

}
[/java]
Y por ultimo el uso de la clase OpenSessionInThreadTask, de hecho esta clase ya se encuentra en forza.
[java]
taskExecutor.execute(new OpenSessionInThreadTask(ctx){
public void runInternal() {
….
}
});
[/java]

Bueno espero que haya sido de su ayuda, no olviden dejar en los comentarios cualquier duda o aporte.