Alfonso Marín López

Blog personal de un programador

15 April, 2011
by admin
1 Comment

Software a medida

El software a medida o los programas a medida o sistemas a medida, da igual como lo llames, la cuestión es hacer un programa a medida que cumpla con las necesidades exactas.

Lo curioso es que cuando hablo de desarrollo de software con clientes o amigos les resulta algo bastante confuso y nada claro. Como dice un amigo, toda la vida se ha llamado programas y ahora nos da por llamarlo software o sistema. Tiene razón en parte, aunque creo que la palabra programa se queda algo corta para definir los sistemas que desarrollamos ahora. Un programa que le das a ejecutar en un equipo no tiene nada que ver con los sistemas que muchos hacemos, bases de datos, servidores de aplicaciones, clientes pesados y ligeros, sistemas de transferencia de datos, transacciones, cola de mensajes, ajax, spring, gwt, google, y un largo etc … como podéis ver la cosa se ha complicado mucho desde hace unos años, y no os equivoquéis, no es malo, quizás confuso para alguien que empieza, incluso para mi hay ocasiones en que me gustaría que hubiera menos opciones, pero eso es lo bonito del desarrollo software, aprender cosas nuevas, o por lo menos para mi.

La programación es algo que al que le gusta le apasiona, y al que no le gusta lo odia. Afortunadamente a mi me encanta, y disfruto cada día de mi trabajo. Aunque tengo que admitir que cada vez que google saca una nueva versión de GWT, que suele ser cada pocos meses, me tiemblas las teclas del teclado, por que los cambios suelen ser mucho aunque impresionantes.

Pero a lo que estamos, la programación a medida, es caro, no hay duda, pero si se hace bien y siguiendo los estandares puede durar muchos años con poco mantenimiento y amortizar de sobra su inversión. Quiero hacer hincapié en dos puntos importantes:

  • Poca satisfacción del cliente: este punto lo he visto en algunos casos y he llegado a la conclusión de que es debido a las elevadas expectativas del cliente, principalmente por desconocimiento del desarrollo de software. Yo entiende que no sean expertos en la programación pero existe mucha fantasía a su alrededor. Algunos se creen que programar se hacer en dos minutos, quien no ha escuchado la frase “ese campo lo cambias en poco tiempo” , sin saber que puede que tengas que cambiar la base de datos, procurando no romper la consistencia de los datos, cambiar la capa de acceso a a datos, la de servicios, y por ultimo la vista, si no te toca cambiar la capa de servicios web o cualquier otra interfaz, vamos, facilísimo.
  • Por esto motivo me encanta desarrollar con metodologías ágiles, involucrando al máximo al cliente, que vea el día a día, y se enfrente a los problemas. Y por supuesto se consigue un desarrollo dirigido por el cliente y para el cliente, mejorando la satisfacción de este. Esto resulta muy interesante ya que se obtienen resultado rápidamente, aunque sea de escasa funcionalidad se parte en pocas semanas de algo tangible, aliviando la ansiedad del cliente. Y como pasa muchas veces, la teoría esta muy bien en papel, pero cuando se lleva a la práctica es cuando te das cuenta de lo poco que encaja, por eso si el cliente esta desde el principio, se puede corregir el rumbo del desarrollo sin llegar a tirar meses de trabajo.

Y por último destacar algunas ventajas, no todo son malas noticias, existen grandes ventajas y muy importantes. Si se hace bien y se mantiene correctamente, el software a medida puede durar mucho tiempo e ir evolucionando con la empresa, que en estos tiempos es un punto muy importante. Me he dado cuenta en estos últimos años que las necesidades han cambiado, la mayoría del software a evolucionando para añadir muchísimas funcionalidades llegando a ser muy complejo, más formación, mas errores cometidos, mas posibilidades para hacer el bien, pero también el mal. Pero programas como gmail, twitter y 37signal han demostrado que lo que la gente quiere es todo lo contrario, cosas sencillas y usables. Con lo que es un gran motivo para desarrollar software a medida. Y el punto mas interesante, que se pueda integrar con sistemas existentes, y eso si que es ahorro.

Algún día hablare de las historias que he tenido con algunos cliente, solo diré que los clientes que mas contentos han estado con mis desarrollos son precisamente lo que mas sabían del tema.

¿Y vosotros?¿ Habéis tenido experiencias parecidas?

 

 

1 April, 2011
by admin
0 comments

Crear una instancia en Amazon

Desde que Amazon ofreciera la instancia micro por un año de forma gratuita, llevo tiempo queriendo montarme una, y ahora que estamos terminando el proyecto tenemos la escusa perfecta.

Así que me he puesto manos a la obra, tutoriales un montón. Solo aportare los problemas que he tenido y sus soluciones. Aquí y aquí tenéis unos buenos tutoriales. Yo comenzé siguiendo los pasos que te da Amazon, pero hay algunas diferencias que hacían que no me funcionara.

Lo primero es aclarar algunos términos y condiciones a tener en cuenta:

  • AMI (Amazon Machine Image): Es decir, las imágenes de los sistemas operativos. Hay muchas, unas son las que proporciona Amazon pero parece que son un poco mas complicadas de administrar, y otras son las de la comunidad. Yo he utilizado ubuntu y me he guiado por esta lista actualizada de imágenes de ubuntu. Importante, elegir la zona correcta, por temas de latencia.
  • EBS (Elastic Block Store): Es un volumen, como un disco duro, que no se pierde al apagar o terminar la instancia. Por que realiza snapshot en S3 (Simple Storage Service). Con este volumen podeis asociarlo a cualquier instancia, si cambiais la instancia podeis mantener el EBS, eso si, asociado a una sola instancia a la vez.
  • Estados, reboot, stop y start, que no requieren de explicación, salvo que si paráis una instancia se perderán los datos almacenados, salvo que se almacenen en EBS. Y Terminate, que se para la instancia y posteriormente se elimina, tarda un tiempo pero desaparecerá.

Una vez creada la instancia y almacenado en un buen sitio la key part, ojo que no se puede volver a descargar, así que guardarla muy bien, si no nos toca crear una nueva y  crear una nueva instancia, porque tampoco se puede cambiar la key de una instancia creada. Una vez la tengais en el ordenador hay que darle permisos al archivo, amazon nos dice de hacer chmod 400 pero a mi me ha funcionado chmod 600, que lo indican en la guia de ubuntu. Si queréis usar putty deberéis convertir las claves de pem a ppk, lo cual se puede hacer con puttygen.

Modificamos la seguridad en Security Groups para añadir el puerto ssh (22). Y ya solo nos queda conectarnos al servidor para seguir con lo que queramos hacer, solo un ultimo apunte, Amazon nos dice que nos conectemos por root, pero las imagenes de ubuntu utilizan el usuario ubuntu y sin contraseña.

Ya os ire contado la experiencia con estos servidores en la nube, que resultado dan y si realmente es algo interesante, por el momento lo parece, montar un servidor dedicado en pocas horas y aun coste que parece bajo, ya te lo dire cuando se termine la promoción.

¿Alguno a utilizado estos servicios en alguna aplicación? seria interesante saber con que condiciones de carga y programación funcionan estos servidores.

 

NOTA: He estado probando instancias ubuntu lucid de 32 bits, y hay un error conocido al instalar java. Las soluciones son instalarlo con la instancia que no sea micro y luego cambiar a micro. O si se puede reinstalar una instancia de 64bis.

12 March, 2011
by admin
0 comments

WordPress desde el móvil

Ahora que tengo el samsung galaxy S, hacer cosas con el móvil es mucho más fácil. Una buena pantalla, un buen micro y memoria abundante hacen el trabajo mucho más fácil.
Pero sin duda es el sistema android el gran estrella, hago prácticamente de todo. Gestiono los blog de forma rápida y cómoda, todos desde el móvil, no son muchos pero su unos cuantos. En estos días con tantos spams si lo dejas un poco puede ser un infierno.
Cómo último apunte, estoy escribiendo con el sistema de teclado swype y tengo que decir que es impresionante, rápido cómodo, preciso. Así da gusto usar el móvil.

10 March, 2011
by admin
0 comments

Fuentes para la web

Estamos de enhorabuena, Google ha sacado una muy interesante solución para las fuentes en nuestras webs. Por fin dejamos de estar atados a los tipos Arial y Times.

El sistema es muy sencillo, cuando nuestra web la necesita, la solicita al servicio de Google y automáticamente la ve el cliente en su navegador. Y me viene de perlas para el proyecto en el que estoy, porque un amigo diseñador no hace mas que hacer hincapié en las fuentes estándares, un coñazo.

Así que ya sabéis, en Google Fonts Web tenéis un montón de fuentes, incluso un editor para poder ajustar el css de forma visual, muy práctico.

9 March, 2011
by admin
0 comments

Layout y resize en GWT

El sistema de layouts de GWT cambio en la versión 2.0. Desde entonces se usan las interfaces RequiereResize y ProvidesResize. El mecanismo se usa en cascada y debemos tener en cuanta varias cosas:

  • Partir desde el RootLayoutPanel, que ya implementa RequiereResize y ProvidesResize.
  • Modo estándar: hay que poner en el html la siguiente instrucción <!DOCTYPE html>
  • No romper la cadena, si tenemos una estructura un poco compleja y el cambio de tamaño afecta a toda la cadena, todas las clases intervinientes deben implementarlo, si nos dejamos una ya no funcionara.

Tenemos dos tipos de clases o paneles, los que son layout e implementan la interfaz RequiereResize y los que no.

Entre los que los tienes son las clases nuevas como RootLayoutPanel, y todos los paneles que contengan la palabra layout. Aunque el problema viene con los paneles que utilizan las tablas como estructura interna. Algunos elementos de html como los divs, dependiendo de los navegadores, interpretan el 100% de forma diferente, por ejemplo, si pones un div en una celda que mide 100px de ancho y tiene un borde de 1px y padding de 5px, el div cogerá y pondrá que mide 112px de ancho más su propio bode, padding y magen, con lo que se sale el div de la celda. Y resulta difícil arreglarlo salvo implementando el onResize y teniendo en cuenta todos estos margenes. Aunque poco se puede hacer por el momento para sustituir el HorizontalPanel y el VerticalPanel.

Si se quiere implementar esta interfaz solo hay que implementar onRiseze() modificando los tamaños que queramos

En el caso de los Composites podemos hacerlo de dos maneras

  • ResizeComposite: Si extendemos de esta clase, ya viene implementada onResize() y lo único que hace es comprobar que el objeto que tiene como hijo sea RequiereResize y llama a su onResize(), pero el hijo debe ser un objeto RequiereResize, si no dará una excepción nada mas ponerlo en marcha.
  • Implementar RequiereResize: esta es lo mismo que lo anterior pero seremos nosotros quienes implementemos el método onResize() y no tendremos la restricción de que el hijo sea RequiereResize, pudiendo poner cualquier widget.

Después tenemos la interfaz ProvidesResize que solo indica que la clase que la implementa propaga sobre sus hijos el onResize(), es decir, que si alguna de vuestras clases o componentes en su método onResize() lo propaga por todos sus hijos, entonces debería implementar esta interfaz. Aunque a efectos prácticos funciona igual, es más aclaratoria en la documentación.

Esto es lo que he aprendido de su uso en este último año, que ha sido muy intenso, pero como siempre acepto y agradezco cualquier corrección o aportación.

NOTA: En ocasiones el calculo del tamaño de un widget lleva su tiempo, y pueden haber discrepancias con respecto a lo pintado. La solución que he encontrado por internet es la de poner un Timer en el onResize de pocos milisegundos para darle tiempo al recalculo.

new Timer() {

@Override

public void run() {

int width = ResizeContainer.this.getOffsetWidth();

}

}.schedule(100);

Aunque no resulte muy elegante.