Y Tu Cuanto Cuestas? Podcast Temporada 2

y tu cuanto cuestasBienvenidos a la segunda temprada del podcast RockDeveloper.

Es el mes de Febrero y nosotros estamos gustos por saludarles nuevamente, En esta oportunidad estaremos hablando sobre nuestras opiniones sobre como cobrar por nuestro trabajo como desarrallodores, desde los puntos de vista de la empresa y de la consultoria (Free Lance)

[display_podcast]

Vinculos relacionados

Hasta el proximo capitulo, somos sus colegas, Iaax Page y Cesar Reyes

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

Jet Brains Libera IntelliJIdea en Open Source

intellijidea-Open-source

El IDE mas avanzado del mundo IntelliJIdea ha sido liberado por sus desarrolladores los genios en Jet Brains, ahora en Open Source y completamente libre de costo.

IntelliJIdea 9, incluye soporte para Java y Groovy, con las caracteristicas que lo hacen superior a sus competidores, y que provocan addicion a la experiencia de desarrollo Jet Brains.

Gracias Domingo Suarez, por compartir esto en twitter.

Saludos

Iaax Page

Vacaciones en el podcast

Estimados podescuchas, el presente articulo es solo para informarles que estaremos tomando unas breves vacaciones, debido a que estamos trabajando para ofrecerles mejor contenido y mas temas sobre desarrollo de software en el Podcast de Rock Developer.
Estaremos de regreso pronto con mas megabytes de audio descargable.

De antemano muchas gracias por su comprension.

Iaax Page y Cesar Reyes

No mas «redeploy» al estar desarrollando aplicaciones java

Hace unos días leí un post del blog de IntelliJ IDEA sobre un producto que se llama JRebel y la liberación de una nueva versión de un plugin de JRebel para IDEA y pues lo estuve probando.

Sabemos que para los que desarrollamos aplicaciones web en java una de las cosas mas tardadas y frustrantes es el tiempo que pasa uno re-desplegando nuestra aplicación al servidor de aplicaciones para probar los cambios hechos. Ahora con la ayuda de JRebel cuando hagamos un cambio a una clase o recurso dentro de IDEA el cambio es reflejado inmediatamente en la aplicación que se esta ejecutando, así que no tenemos que esperar los 1 – 3 minutos promedio que toma el arrancar el servidor de aplicaciones. Y pues esto genera un ahorro enorme de tiempo, dado el numero de veces que se re-despliega una aplicación durante el día. Segun una encuesta realizada por estos cuates que hacen JRebel (ZeroTurnaround) dicen que podemos pasar de 2 a 8 semanas re-desplegando aplicaciones.

Por cierto el producto JRebel no necesariamente se usa con IntelliJ IDEA, aunque la verdad yo no lo he usado fuera de IDEA.

Hay un trial del producto para que lo prueben y soliciten presupuesto para su compra, jejejeje.

Y aqui les pongo la liga para el tutorial de como echarlo a andar con IntellJ IDEA.

http://www.zeroturnaround.com/intellij-idea-jrebel-tutorial-formerly-javarebel/

Saludos…

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.