Monthly Archives: enero 2010

Spam por relay

A la mayoría no solo le sonará este artículo, sino que lo habrá experimentado en propias carnes. Esto se detecta fácilmente, cuando comienzan a llevar emails que vienen con el remitente MAILER-DAEMON. En este momento puedes planteartes dos posibles escenarios:

  • han entrado en tu servidor y han comenzado a enviar un montón de emails desde tu cuenta de usuario, o
  • alguien ha comenzado a enviar un montón de emails a servidores mal configurados, con tu dirección de email como remitente, para hacerte llegar todos esos mensajes.

Visto por cualquiera de las formas pinta mal, pero a la que nos referimos cuando hablamos de spam por relay es la segunda. Tu sistema está bien configurado, nadie ha entrado y no has enviado ningún email, pero sin embargo comienzan a llegar emails de MAILER-DAEMON o similares, diciendo que no han podido entregar tu email (y te lo ponen completo) porque no se encuentra el usuario, porque está mal formado, o por cualquier otro error intencionado que ha introducido el spammer.

El problema se da, y lo sé porque lo he vivido, cuando abres la bandeja de entrada y ves nada más y nada menos que de 30 a 60 mensajes diarios con el mismo asunto. Después, leyendo las cabeceras del email (esas que no se ven a simple vista, ni desde MUAs como Outlook), se puede ver, en la lista de los Received, el último que aparece (que es el primero que se escribió):

Received: (from nj.ua@localhost)
	by nj.ua (8.13.8/8.13.8/Submit) id a862dvhn858019;
	Thu, 21 Jan 2010 09:36:45 +0800

Ha sido enviado por alguien que no se conoce, la siguiente línea es la del que recibe el email, directamente, por lo que no ha pasado, siquiera, por nuestro servidor. Estamos seguros… pero eso no nos quita el problema… y realmente, y lamentablemente, no hay una solución real a este problema, ya que al intentar comunicar a cada uno de los sitios la configuración que deben de poner para que esto no pase (validación de SPF, uso de EHLO o HELO,…) o no saben cómo hacerlo y pasan, o pasan directamente.

Por lo que, el spam ha conseguido otra vía de acceso a través de los sistemas de email más pobremente configurados (y hay muchos así) de Internet. ¿Habrá forma de pararlos?

Los sabores de Windows

Las liberaciones de Windows, de Microsoft, suelen realizarse siempre por triplicado, es decir, de cada línea interesante que saca la compañía, hay tres versiones, después es abandonada por los motivos que se verán obvios.

La triada de Microsoft consiste en sacar una versión primera, una versión más elaborada gráficamente y mejor recibida por el público en general, y una última versión que termina siendo un fiasco, que dura poco en el tiempo y en la memoria de muchos usuarios, afortunadamente para Microsoft.

La línea light

Cuando los equipos no eran tan potentes como para soportar todas las características que tenía incluídas Windows NT, la empresa tuvo que realizar un sistema operativo mezclado con el sistema DOS que ya tenía, para obtener un sistema mixto llamado, en un principio, Windows 95.

Después llegó la versión bonita, que fue Windows 98, la cual era una versión gráficamente superior de Windows 95 y mejor preparada para Internet.

El punto final a esta línea lo puso Windows ME (Millenium Edition), del cual, pocos se acuerdan, salvo los que lo sufrieron y la mayoría coincide en que tenía multitud de fallos y las mejoras gráficas y de incorporación de elementos multimedia no compensaba esos fallos.

La línea NT para particulares

Cuando la potencia de las máquinas de uso cotidiano alcanzó a poder ejecutar sistemas NT, la compañía recuperó su sistema base, sin recortes, y aprovechó el cambio de siglo para sacar su primera versión, la cual tuvo una expansión hacia los sistemas servidores y un gran lanzamiento en lo que respecta a la empresa (que era la que podía hacer el mayor desembolso). Esta versión fue Windows 2000.

Dos años después, esta versión ya era posible en su incorporación al mercado residencial y se potenció su interfaz gráfica, así como sus elementos multimedia, liberándose como Windows XP. Esta versión supuso un cambio drástico a aquellos que cambiaban directamente desde Windows 98 (un sistema basado en el kernel de DOS) a este (con un kernel NT que no permitía ya la ejecución de aplicaciones de 16 bytes de DOS).

Al igual que en la línea anterior, se intentó potenciar la línea multimedia y de interacción gráfica para el sistema pero, parece que la historia se repitió y la tercera entrega, al igual que Windows ME, fue otro fiasco. Esta liberación tuvo el nombre de Windows Vista.

Re-escritura y nueva vida

Después de topar con la imposibilidad de seguir con la infraestructura NT tal y como estaba, la compañía necesitaba un nuevo lavado de cara y comenzó el desarrollo de Windows 7, el cual ha sido una reescritura completa, desde cero, así como lo fue Windows 95 y Windows 2000. Con lo que conforma el principio de otra línea, en la que la siguiente versión será, o eso se espera, muy buena, llegando una tercer que marcará el final de la línea… con otro fiasco.

Alternativas

Microsoft no es la única compañía que, después de 15 años, ha realizado un sistema basado en el kernel de NT para la ejecución de programas. Estos sistemas, desde simuladores para otros sistemas operativos a sistemas operativos en sí mismos, han hecho que el uso de sistemas tipo Windows no sea monopolio de Microsoft.

Entre otros, los emuladores más conocidos, desde el mundo GNU/Linux, son Wine, Cedega y CrossOver (basados en wine).

Uno de los sistemas operativos, que trabaja junto con wine en el desarrollo y emulación del kernel NT bajo sistemas Unix, es ReactOS. El desarrollo de este sistema es muy activo desde que comenzó y ya tienen un LiveCD en el que se pueden probar aplicaciones para Windows. Una alternativa muy a tener en cuenta, y sobre todo porque es GPL, es decir, software libre.

¿Qué se busca conseguir en un desarrollo?

La respuesta rápida y obvia podría ser: que lo desarrollado cumpla con los requisitos pactados.

La realidad, muchas veces, nos demuestra que esto no su cumple, ya que, o los requisitos pactados se engordan, o nos fijamos más en que se cumpla el tiempo pactado, lo cual realmente no es un requisito, en muchos casos. Al final, parece que premia más el tiempo invertido y el dinero gastado que lo que se ha adquirido.

Imagina que vas a comprar unos pantalones, quieres unos pantalones para diario, simples, pero dado que es invierno, que te los puedas pasar sin pasar frío. Ese es nuestro valor a conseguir. Si vamos a comprar los pantalones y hablando con el encargado los pedimos: que sean azules oscuros, con un diseño radical, moderno, de mi talla, … ; quizás al final tengamos unos pantalones que sean como unas mayas… ¡a ver quién se las pone en invierno!, pero claro, por el dinero que dábamos, lo que pedíamos, y el tiempo que le dábamos al encargado para que los buscase… pues es normal.

En desarrollo de software pasa igual. Al principio, el cliente tiene la idea de un software, por ejemlo, para gestionar su almacen. Después piensa que, si se va a invertir mucho tiempo en su desarrollo, entonces puede pedir que venga con sistema de nóminas, contabilidad, gestión de pedidos a mayorista y generación de facturas a clientes… y por el camino, mientras ve algunos proyectos de portfolio, pues se le ocurre pedir también un sistema de carro de compra para internet… y todo eso en el tiempo que se tiene para hacer solo la primera idea… ¿saldría bien?… ¡no!

Volviendo a la pregunta inicial, la respuesta después del planteamiento desarrollado, sería, más concretamente: busco que resuelvan un problema específico que tiene mi empresa, el cual no le permite crecer al ritmo que queremos que crezca.

Por ello, el desarrollo de una aplicación de software debe realizarse siempre con la idea clara en mente de que, el desarrollo, va a cubrir una necesidad detectada, o a automatizar una tarea, que ya se realiza, pero se necesita realizar de forma automática para que los trabajadores puedan realizar más tareas a lo largo de un día. Si el software desarrollado no cumple esta espectativa, no solo no aporta valor, sino que es posiblemente un lastre para la empresa.

TDD, ¡libro en castellano!

Ayer leí un email de la lista de TDD en la que se anunciaba el publicación del libro TDD de Carlos Ble.

Diseño Ágil Con TDD

Es de agradecer que se haya publicado en castellano un libro sobre esta metodología (o técnica) de programación que es el desarrollo dirigido por pruebas (o test driven development). Casi que puedo asegurar que es el único libro escrito hasta el momento en castellano sobre este tema, que ya abordaba hace muchos años Kent Beck, en su libro Xtreme Programming Explained.

El libro de Carlos está cargado de información sobre lo que significa la programación ágil, ser ágil y las ventajas que ofrece, sobre el modelo tradicional este tipo de técnica de programación, que roza a ser incluso una disciplina, la importancia de aprender y renovarse, así como una crítica y justificación al sistema de enseñanza universitario con respecto a la informática, con el cual coincido.

Además, las aportaciones de los co-autores realizadas al libro son de gran calidad, desde el prólogo, escrito por J.M.Beas hasta el Apéndice sobre integración continua, de Fran Reyes Perdomo, así como las aportaciones y correcciones de Juan Gutiérrez Plaza y Gregorio Mena.

Lo mejor es que el libro no es solo teórico, sino que aporta muchos escenarios y ejemplos, con lo que constituye uno de los mejores libros que he leído sobre el tema en bastante tiempo. Por lo que recomiendo su lectura, de principio a fin.

Los sectores del software

De siempre, se va viendo que las empresas de software se decantan por una forma de hacer las cosas, mientras que otras eligen otro camino distinto y, muy pocas, mezclan elementos de doctrinas tan establecidas y dogmáticas como son: el mundo del software libre, el mundo java o el mundo .net.

El mundo .NET

Como todo lo que tiene que ver con Microsoft, el mundo .NET se mueve, casi exclusivamente, con productos y herramientas desarrolladas por esta misma compañía. Funciona sobre Windows, con base de datos de Microsoft y se diseña con herramientas de Microsoft.

Lo bueno de Microsoft es que desarrollan los productos para un público general y sin conocimientos extensos. Los lenguajes suelen ser o muy fáciles (Visual Basic) o muy complejos (C++, C#), pero cumplen con todas las necesidades de los programadores a los que van dirigidas las herramientas. Así mismo, tienen un alto nivel de operatibilidad entre los diferentes productos, es decir, escribir código ASP con SQL Server es simple, gracias a ese nivel de compactación y simplificación.

Lo bueno de la simplificación lleva a lo malo de la complejidad también. Un programa que se hace de forma simple y fácil, siguiendo los pasos que Microsoft ha pensado para dar es simple, sencillo y rápido. Pero cuando la aplicación debe tener una forma específica o salirse un poco del camino típico, comienzan a surgir problemas solo saldables con código complejo.

Ximian, absorbida por Novell, ha realizado muchas aproximaciones a este mundo para portarlo al mundo del software libre a través de su escritorio Gnome y su proyecto Mono. No obstante, es un tema un poco espinoso, ya que quien usa software libre, por lo general, se aleja de las tecnologías propuestas por esta gran multinacional, por lo que, aunque es usada y tiene su cuota de mercado, Mono no llega a ser usado tanto como podría esperarse.

El mundo Java

El mundo de Java ha estado siempre en una lucha constante y abriéndose camino en el desarrollo de software, sin mucho éxito al principio, sobre todo en lo que respecta a las aplicaciones de escritorio. Esto fue debido a su naturaleza de pseudo-compilación y pseudo-interpretación, ya que es un lenguaje compilado e interpretado que se ejecuta sobre una máquina virtual, y las labores de interpretación de los bytecodes son algo costosos, en relación a código que se ejecuta de forma nativa.

No obstante, en la parte web, de interfaces, desde que comenzó, ha tenido una gran aceptación, puesto que permite el desarrollo de las aplicaciones en cualquier infraestructura (windows, linux, solaris, …) y se han desarrollado grandes herramientas para el desarrollo en este sentido.

Java siempre es el favorito y preferido de las consultoras (a menos en España), donde es empleado para el desarrollo de aplicaciones, tanto de escritorio como web en todos los sectores donde son contratados.

La mayoría de empresas que han tenido relación con Microsoft y han salido de malas con la grande, han terminado montándose al carro de Java y aportando a esta comunidad en modo de open source herramientas, conocimiento, etc. Además de Sun Microsystems (su fundadora), hay otras como IBM, RedHat, Oracle, etc. que se han sumado al carro de Java para el desarrollo y ampliación de esta comunidad.

Hay comunidades de software libre que se han sumado a la aportación de código para el mundo Java. Esto supongo que será erróneamente aportado como el voto útil, sin saber que en nada se beneficia al software libre en sí, sino solo al mundo Java que, aunque pueda parecer atractiva la idea de luchar contra el tirano, no es más que ayudar a una empresa a derrocar a otra. Esto puede ser muy discutible, sobre todo por los defensores de Java :-D

El mundo del software libre

Al margen de la guerra entre .Net y Java, surgen los entornos, sistemas y elementos de software libre. Pensar que todo el mundo tiene que ser Java o .Net es un craso error, ya que hay muchos elementos que se pueden combinar a gusto propio del desarrollador y emplearlos como mejor convenga para obtener los mejores resultados para una tarea concreta.

A este respecto, una de las comunidades con más auge es la de desarrolladores de PHP, por ejemplo, que es el lenguaje que más proyectos de software libre tiene desarrollados, y es el más usado para el desarrollo de sitios como Facebook, Menéame, WordPress, etc.

Otra de las comunidades más activa en los entornos web es la de Ruby, Ruby on Rails más específicamente, que tiene un entorno fácil y profesional para el desarrollo rápido de sitios web. También Python, con su framework Django. Ambos presentes en el mundo Java a través de JRuby y Jython, respectivamente.

Entornos también desarrollados en lenguajes más específicos como Perl, Erlang, Tcl, etc. hacen que se complete el abanico de posibilidades para el desarrollo de software a través de las soluciones que aporta el software libre.

La nota negativa, es que los elementos no son altamente cooperativos, es decir, aunque se basan en estándares, normas y todos son abiertos, hay que realizar desarrollos para poder tener funcionando cosas entre unos y otros, debido a que en el software libre, no todo está hecho o viene dado fácilmente. Pero la nota positiva sobre esto, es que la dificultad que eso entraña es mucho menor que la que entrañaría el desarrollar algo no hecho o no pensado para hacerse, en Java o .Net.

Conclusión

En principio, no te quedes solo con uno, esto no son tres equipos a los que haya que apoyar a muerte, estas son tres formas de ver la tecnología y puede convenir cualquiera de las tres según el contexto en el que haya que ponerse.

Por ejemplo, en una empresa que se haya invertido en infraestructura y software Microsoft, se tenga todo montado en SQL Server, con ASP e interfaces desarrolladas en Visual Basic, desarrollar cualquier nueva ampliación o una nueva herramienta, cabe pensar que será siempre más fácil si nos ceñimos a lo ya establecido que si comenzamos a cambiar lo que hay.

Igualmente, en otra empresa en la que se haya realizado una inversión para Java, incluso con servidores Solaris, y bases de datos Oracle, no conviene pensar en desarrollar nada con Visual Basic, ni PHP, sino pensar en agregar más aplicaciones de tipo J2EE, que será lo más fácil de implementar.

Por último, en una empresa pequeña, con aspiraciones a crecer, que tengan todo desarrollado en PHP y MySQL, se podría cambiar a un framework de desarrollo para PHP, así como agregar elementos más complejos en caso de ser necesarios (como memcached).

En definitiva, no intentar cambiar lo que ya hay si funciona. Otro caso es que no funcione o que haya que realizar adaptaciones y se pueda aprovechar para agregar elementos más generales o estándares.