La historia del zapatero de Ikea y la perspectiva del proyecto

September 11th, 2009 por nILaRT

zapatero


El siguiente artículo, del blog Andoni Arroyo  de geeks.ms, representa muy bien, con un ejemplo cotidiano real, lo que suele ocurrirle al programador a la hora de construir una aplicación, especialmente si se saltan todos los procesos “que no sirven para nada”, pero bueno, esto es otra historia…

Os dejo el fragmento de texto:

La historia que os voy a contar está basada en hechos reales. Aprovechando que tengo unos días libres antes de salir de viaje me he dispuesto a acabar con la fila india de zapatos que tengo por casa. Así que ni corto ni perezoso me fui al Ikea y me cogí un zapatero de esos tan apañado que te montas en casa.

Me puse manos a la obra y decidí seguir las instrucciones que tan amablemente incluyen los suecos a modo de ”paso a paso”. Tras una revisión previa combinada con mis nulos conocimientos en bricolaje y ebanistería, me decidí a seguir los pasos indicados al pie de la letra. El resultado, os lo podréis imaginar, un zapatero impresionante con una de las tablas del frontal colocada al revés, es decir, un precioso acabado en madera virgen…

Me ha dado por pensar los motivos de este pequeño desastre y la analogía de los mismos en los proyectos de desarrollo de Software. Podemos decir que yo he sido el programador currillo que he recibido una serie de pequeñas tareas bien definidas. Estas tareas fueron creadas por un gran analista sueco como resultado de un diseño basado en el análisis de la funcionalidad a cubrir.

Por supuesto, no tengo ninguna duda de que el señor analista sueco creó las tareas de manera correcta en su contexto y en su momento. Lamentablemente en el proceso de “codificación” de mi zapatero se han dado algunas circunstancias inesperadas.

  • Errores humanos
    Tras comprobar de nuevo las instrucciones observo que no se especifica explícitamente el lado que debe dar hacia el frontal y cual no. Obviamente mi decisión no fue la correcta.
  • Falta de comunicación
    La verdad es que el analista sueco no me pillaba lo suficientemente a mano para completar las dudas que me surgían sobre el manual mientras avanzaba el desarrollo del proyecto.
  • Falta de perspectiva e interiorización del alcance global del proyecto
  • He depositado mi confianza en el manual, sin llegar a interiorizar los componentes del proyecto. Si lo hubiese comprendido como un conjunto, me hubiera dado cuenta de que ese madero en el frontal dado la vuelta no encaja bien, pero para cuando  comprendí que eso era el frontal ya era demasiado tarde….

  • Falta de revisiones
    Una pequeña revisión al finalizar cada paso o conjunto de pasos podría haber evitado la desviación. Esto me habría limitado la cantidad de pasos a deshacer para recolocar el maldito madero y por lo tanto, el esfuerzo (dinero en proyectos reales) malgastado en problemas que yo mismo me he buscado.

En el mundo del Software tanto las especificaciones como los entregables son más abstractos. Si no comprendemos bien las necesidades del cliente, (las que nos transmite y las que ni él mismo ha identificado aún!) podemos llegar a las oficinas del cliente con un software que le produzca mas enfado que satisfacción. Dichas necesidades en la mayoría de ocasiones nos son totalmente ajenas y desconocidas puesto que no conocemos profundamente el sector del cliente (Al menos en los primeros proyectos tipo!).

Sin trabajar este proceso de interiorización apoyado en la empatía, podemos entregar el zapatero al cliente sin enterarnos de que tenemos el madero al revés aunque lo estemos mirando con todo detalle…

Así que dicho queda, me voy a por la caja de herramientas de nuevo…

Ahora bien, no creo que Ikea invierta demasiado en las instrucciones, ya que yo también tengo un caso similar, aunque viendolo por otro lado, la mayoria de las empresas tampoco invierten en los procesos de diseño y documentación necesarios…

entrevista

Fuente: Blog Andoni Arroyo – geeks.ms<


Publicado en Actualidad, Desarrollo, General | Sin Comentarios »

Top 10 frases más usadas por programadores

September 4th, 2009 por nILaRT

programador

De la mano de CyberHades nos llega este Top 10 de frases mas usadas por programadores que la verdad es bastante fiel a la realidad, ahi os lo dejo:

1.- WTF! (Que coñ…!)

wtfm-300x282

2.- It works on my machine (En mi equipo funciona).

3.- D´oh! (ouch!!).

homer-simpson-doh

4.- It will be ready tomorrow (Estará listo mañana)

5.- Have you tried turning it off and on again? (¿Has intentado apagarlo y encenderlo de nuevo?

6.- Why? (¿Por qué?)

7.- It is not a bug, it´s a feature (No es un error, es una característica).

bug_vs_feature-300x225

8.- That code is crap (Ese código es una mierda).

9.- My code is compiling (Mi código está compilando).

xkcdCompiling-300x261

10.- No, I don´t know how to fix your microwave (No, no sé como arreglar tu microondas).

Yo tambien añadiría:

11.- Has probado a tracear?

12.-Yo creo que…

13.- Seguro que es el antivirus…

14.- Estoy en ello…

15.- $·@#~€”·$%!!!

16.-Me tendría que haber dedicado a…

17.-Error humano

18.-Puta mierda de [pon aqui un lenguaje]

19.-Quiero irme a casa.

20.-Siempre ha funcionado perfectamente

Fuente: CyberHades


Publicado en Actualidad, Desarrollo, Friki, General, Humor | Sin Comentarios »

La cruda realidad de la gestión de proyectos (aka Burdel 2.0)

August 24th, 2009 por nILaRT

projects

Blogeando por eso que llaman “El interné” he encontrado un artículo interesante sobre la gestión de proyectos en el que comparan este con el proceso de ir a comprar un coche, los resultados son bastante cómicos.

Cita:

Buenos días, me gustaría comprar un 750i, blanco, que le gusta a mi mujer de eso color, aunque a mi me parece un poco taxi. Taxi, un 750i, ni aunque le ponga lucecita verde hombre, ha dicho el comercial. Ya que estamos, no lo vamos a mirar, he seguido yo… póngamelo con llantas de 20’’, como no y todos los extras, lo quiero todo, todo y todo… si si el paquete M también, como no, yo soy un joven, dinámico y profesional, no puedo ir por el mundo sin el paquete M, faltarías más.

¿No sería interesante añadir también la garantía extendida? Por su tranquilidad, ya sabe. Ha dicho el comercial. Y claro, pues yo he pensado… como no se me habrá ocurrido, póngalo, póngalo. Quizás no lo use pero que le vamos a hacer, nunca se sabe lo que puede pasar.

Y la bola de caravana, ¿no la necesitará usted?… Hombre, yo no tengo caravana, pero ya que lo comentas, y como nunca se sabe, a lo peor me da por cambiar el pueblo por un camping… venga vale, total, molestar tampoco molesta.

Y claro, seguro que un profesional, joven, dinámico, con paquete M y toda la zarandaja es una avezado ciclista, de los de mountain bike molona, de esos de los de gafas Oakley, maillot, culotte, zapatillas y pedales automáticos ¿no? Seguro que necesita el exclusivo portabicicletas de BMW para pasear, digo transportar sus bicis. Pues no, he dicho yo, eso si que no, que yo hace mucho que deje la bici y soy de pelota mano y tal y cual. Hombre, recuerde que nunca se sabe, ha dicho el comercial, y se lo dejo a precio de risa, a añadido. Así que he pensado, por si acaso, con portabicis, ¿voy a saber yo más que el comercial?.

Ya solo nos quedan dos detalles menores. Empecemos por el plazo de entrega. El comercial a empezado a farfullar no se que de disponibilidad, que si las opciones retrasan no se que y no se cual. Yo he pensado, coño, aquí el cliente soy yo ¿no? y le he dicho… a ver si yo lo entiendo todo, pero me lo tienes para dentro de dos semanas, son fiestas del pueblo y tengo que fardar. El comercial no ha dicho ni mu, es más me ha dicho, que quizás lo tenga un poco antes.

El segundo tema menor, el precio. Aquí yo he tomado la iniciativa que para algo soy el cliente ¿no?. Para esto tengo treinta mil euritos, entiendo que tengo que poner otros dos cientos, por la llantas, pero esto es lo que hay. Me han dicho que en la india hay unos concesionarios que lo hacen más barato y mejor, eso sí, por evitarme el papeleo que sino te iba a comprar al ti el BMW Rita… la cantadora.

Entonces me he despertado. Claro. ¿Por qué estas cosas solo nos pasan en el mundo del software? La historia no se sostiene, claro está, pero cambiad BMW por aplicación de software, y dar sudores fríos el pensar realismo que se añade. ¿Alguno de vosotros le suena? ;)

Es bueno, ¿verdad?

Fuente: Geeks.ms


Publicado en Actualidad, Desarrollo, General, Humor | Sin Comentarios »

ASP.net: Mostrar número de linea del error en los registros del servidor

July 31st, 2009 por nILaRT

Una técnica frecuente cuando realizamos grandes proyectos web es crear un log o registro de todos los errores que suceden en el servidor de nuestra aplicación web, de manera que, aunque no estemos depurando podamos conocer cuando y donde falla nuestra aplicación. Es especialmente útil cuando es utilizada por un gran numero de usuarios, pues estos siempre acaban encontrando fallos.

Sin embargo, en muchos casos, nos habremos dado cuenta de que la descripción del error que nos aparece, a pesar de ser muy detallada, no nos da una información esencial, la clase donde ocurre el error y la linea.

Estos datos se obtienen facilmente en el equipo local cuando depuramos, pero se pierden cuando la aplicación se ejecuta en el servidor con el debug desactivado. Para añadir esta información a la descripción del error deberemos hacer dos cosas:

1.- En las propiedades del proyecto, dentro del Visual Studio, debemos ir a la pestaña Compilar y a Opciones de compilación avanzadas. Dentro cambiaremos “Generar información de depuración” a pdb-only.

2.- Ahora solo tenemos que volver a generar nuestra aplicación  y recordar subir el fichero .pdb del proyecto que se genera junto a la dll en la carpeta “bin”.

Con este método obtendremos en la información del Stack, el nombre del fichero donde ocurre el error y la linea exacta en la que se lanzó la excepción.

Otro día explicaré el método entero parar generar un log de errores, pero esto, mediante un poco de Google, es bastante sencillo.
Saludos


Publicado en Desarrollo, General | Sin Comentarios »

¿Por qué web?

April 30th, 2009 por nILaRT

Esto es lo que me preguntaron cuando presente mi proyecto de fin de carrera en forma de aplicación web en lugar de aplicación de escritorio.

- “Si con una aplicación de escritorio tienes más potencia, puedes hacer más cosas, es muchísimo más fácil de programar, ¡¡¡y te pondríamos más nota!!!” (bueno, esto último no lo dijeron, pero lo sé yo ;D )

A lo que yo, haciendo uso del típico cliché, contesté:

- “¡Porque la web es el futuro!”

Obviamente esto no convenció demasiado.

Ahora, entiendo que erré en la respuesta, pues esta tendría que haber sido:

-”¡Porque lo dice Google!”

Y es que Google lleva apostando por las aplicaciones web desde que se lanzó a la piscina con su archiconocido buscador. Desde entonces, decenas de aplicaciones web han ido detrás.

Ahora, Google vuelve a doblar la apuesta con O3D, una plataforma para crear aplicaciones interactivas en 3D en el navegador. Actualmente está en periodo de prueba, pero ya tiene versiones compatibles con Windows, Linux o Mac.

Funciona en los principales navegadores como Google Chrome, Firefox, Internet Explorer y Safari. Y requiere, además, unas tarjetas gráficas específicas, como las Nvidia GeForce 8 o las ATI Radeon HD.

O3D se programa mediante Javascript y abre nuevas puertas a la hora de realizar diversos desarrollos para la web.

Lo dicho: “Todo desde el navegador”.

Fuente: Genbeta


Publicado en Actualidad, Desarrollo, General, Tecnología | Sin Comentarios »

Consejos a la hora de programar en ASP.NET

March 19th, 2009 por nILaRT

Buscando información en mi amigo Google he encontrado un artículo muy interesante a la hora de programar en ASP.NET. Es muy interesante, yo conocia y uso algunas, pero otras me han sorprendido y van a pasar a mi lista de mandamientos…

El texto esta en inglés y no me motiva demasiado traducirlo:
There are certain things you should take into account when you are developing your applications. Over the last 12 years or so of working with asp and asp.net, I have learned to avoid and do certain things that increase your application performance by a massive amount! Below are my top tips to improving ASP.net application Performance.

1. Disable Session State
Disable Session State if you’re not going to use it. By default it’s on. You can actually turn this off for specific pages, instead of for every page: You can also disable it across the application in the web.config by setting the mode value to Off.

2. Output Buffering
Take advantage of this great feature. Basically batch all of your work on the server, and then run a Response.Flush method to output the data. This avoids chatty back and forth with the server. Then use:

2. Avoid Server-Side Validation
Try to avoid server-side validation, use client-side instead. Server-Side will just consume valuable resources on your servers, and cause more chat back and forth.
3. Repeater Control Good, DataList, DataGrid, and DataView controls Bad
Asp.net is a great platform, unfortunately a lot of the controls that were developed are heavy in html, and create not the greatest scaleable html from a performance standpoint. ASP.net repeater control is awesome! Use it! You might write more code, but you will thank me in the long run!
Take advantage of HttpResponse.IsClientConnected before performing a large operation:

if (Response.IsClientConnected)
{
// If still connected, redirect
// to another page.
Response.Redirect(“Page2CS.aspx”, false);
}What is wrong with Response.Redirect? Read on…

4. Use HTTPServerUtility.Transfer instead of Response.Redirect
Redirect’s are also very chatty. They should only be used when you are transferring people to another physical web server. For any transfers within your server, use .transfer! You will save a lot of needless HTTP requests.
5. Always check Page.IsValid when using Validator Controls
So you’ve dropped on some validator controls, and you think your good to go because ASP.net does everything for you! Right? Wrong! All that happens if bad data is received is the IsValid flag is set to false. So make sure you check Page.IsValid before processing your forms!

6. Deploy with Release Build
Make sure you use Release Build mode and not Debug Build when you deploy your site to production. If you think this doesn’t matter, think again. By running in debug mode, you are creating PDB’s and cranking up the timeout. Deploy Release mode and you will see the speed improvements.
7. Turn off Tracing
Tracing is awesome, however have you remembered to turn it off? If not, make sure you edit your web.config and turn it off! It will add a lot of overhead to your application that is not needed in a production environment.

8. Page.IsPostBack is your friend
Make sure you don’t execute code needlessly. I don’t know how many web developers forget about checking IsPostBack! It seems like such a basic thing to me! Needless processing!
9. Avoid Exceptions
Avoid throwing exceptions, and handling useless exceptions. Exceptions are probably one of the heaviest resource hogs and causes of slowdowns you will ever see in web applications, as well as windows applications. Write your code so they don’t happen! Don’t code by exception!
10. Caching is Possibly the number one tip!
Use Quick Page Caching and the ASP.net Cache API! Lots to learn, its not as simple as you might think. There is a lot of strategy involved here. When do you cache? what do you cache?
Create Per-Request Cache
Use HTTPContect.Items to add single page load to create a per-request cache.
11. StringBuilder
StringBuilder.Append is faster than String + String. However in order to use StringBuilder, you must new StringBuilder()Therefore it is not something you want to use if you don’t have large strings. If you are concatenating less than 3 times, then stick with String + String. You can also try String.ConcatTurn Off ViewState
If you are not using form postback, turn off viewsate, by default, controls will turn on viewsate and slow your site.

public ShowOrdersTablePage()
{
this.Init += new EventHandler(Page_Init);
}

private void Page_Init(object sender, System.EventArgs e)
{
this.EnableViewState = false;
}

12. Use Paging
Take advantage of paging’s simplicity in .net. Only show small subsets of data at a time, allowing the page to load faster. Just be careful when you mix in caching. How many times do you hit the page 2, or page 3 button? Hardly ever right! So don’t cache all the data in the grid! Think of it this way: How big would the first search result page be for “music” on Google if they cached all the pages from 1 to goggle
13. Use the AppOffline.htm when updating binaries
I hate the generic asp.net error messages! If I never had to see them again I would be so happy. Make sure your users never see them! Use the AppOffline.htm file!
14. Use ControlState and not ViewState for Controls
If you followed the last tip, you are probably freaking out at the though of your controls not working. Simply use Control State. Microsoft has an excellent example of using ControlState here, as I will not be able to get into all the detail in this short article.
15. Use the Finally Method
If you have opened any connections to the database, or files, etc, make sure that you close them at the end! The Finally block is really the best place to do so, as it is the only block of code that will surely execute.
16. Option Strict and Option Explicit
This is an oldy, and not so much a strictly ASP.net tip, but a .net tip in general. Make sure you turn BOTH on. you should never trust .net or any compiler to perform conversions for you. That’s just shady programming, and low quality code anyway. If you have never turned both on, go turn them on right now and try and compile. Fix all your errors.


Publicado en Desarrollo | Sin Comentarios »

El programador matando al dragon…

October 30th, 2008 por nILaRT

Bueno, esto tiene su tiempo, pero ha ido evolucionando con el tiempo añadiendo muchos lenguajes, seguro que hay alguna que entiendes:

Java.- Llega, encuentra al dragón, desarrolla un framework para aniquilación de tragones en múltiples capas, escribe varios artículos sobre el framework… pero no mata al dragón.

.NET.- Llega, ve la idea del desarrollador de Java y la copia, intenta matar al dragón, pero el bicho se lo come

C.- Llega, mira al dragón con mirada de desprecio, tira de espada, degüella al dragón, encuentra a la princesa… y la ignora para ver los últimos checkins del cvs del kernel de Linux

C++.- Crea un pincho básico y va juntando funcionalidades hasta tener una espada compleja que apenas consigue entender… mata al dragón pero se atasca en medio del puente por culpa de pérdidas de memoria (memory leaks)

COBOL.- Llega, ve al dragón y piensa que es demasiado viejo para conseguir matar un bicho de ese tamaño y quedarse con la princesa, y entonces se va

Pascal.- Se prepara durante 10 años para crear un sistema de aniquilación de dragones… cuando llega el momento descubre que el programa sólo acepta lagartijas como entrada

VB.- Monta un arma de destrucción de dragones a partir de varios componentes, salta encima del lomo del dragón, y en la hora H descubre que la espada sólo funciona durante las noches de lluvia…

PL/SQL.- Recoge datos de otros matadores de dragones, crea tablas con n relaciones de complejidad ternaria, datos en tres dimensiones, OLAP, tarda quince años para procesar la información… y para entonces la princesa se volvió lesbiana.

Ruby.- Llega con muchísima fama, diciendo que es el mejor en hacer cualquier cosa y cuando va a enfrentarse al dragón muestra una peliculita en la que él mismo aparece matando a un dragón… el dragón se lo come de puro aburrimiento

Smalltalk.- Llega, analiza al dragón y a la princesa, se da la vuelta y se pira: ellos son muy inferiores

Shell.- Crea un arma poderosa para matar dragones, pero en la hora H no recuerda como usarla

Shell.-El tío se acerca al dragón con un script de dos líneas que mata, corta, destripa, empala, pica en pedacitos y empaca al bicho, pero a la hora de ejecutarlo el script aumenta, engorda, enfurece y pone alcohol en el fuego del dragón.

Ensamblador.- Cree que está haciendo lo más correcto y eficiente… pero pone un A en lugar de un D y mata a la princesa para terminar follándose al dragón

Fortran.- Llega y desarrolla una solución con 45 mil líneas de código, mata al dragón, va al encuentro de la princesa… pero ella le llama tirillas y se va corriendo detrás del programador de java que era elegante y además es rico

Fox Pro.- Desarrolla un sistema para matar al dragón. Por fuera es precioso y funciona, pero por dentro está todo parcheado y cuando va a ejecutar el aniquilador de dragones recuerda que olvidó indexar los DBF.

Analista de procesos.- Se acerca al dragón con dos toneladas de documentación desarrollada sobre el proceso de matar un dragón genérico, desarrolla un DFD para liberar a la princesa y casarse con ella, convence al dragón de que es lo mejor para el y que no va a doler. Al ejecutar el proceso estima el esfuerzo y el tamaño del daño que causará con la firma del papa, de Buda y de Joan Manuel Serrat para el plano, y entonces compra dos bombas nucleares, 45 cañones, un portaaviones y contrata a 300 hombres armados hasta los dientes… cuando en realidad tan sólo necesitaría la espada que tenía en la mano desde el principio

Clipper.- Monta una rutina que carga un array de codeblocks para insultar al dragón, cantarle a la princesa, cargar la espada a memoria, moler al dragón, limpiar la suciedad, preparar un vaso de leche condensada con moras para la princesa, follar a la princesa, darse un baño, encender el coche, ponerle gasolina y volver para casa. A la hora de ejecutar recibe un “Bound Error: Array Access” y el dragón se lo come con patatas

Lisp.- Donde el famoso caballero andante, tras hablar con numerosos expertos en matar dragones y modelar el conocimiento que ellos poseen programa el sistema y se da cuenta… de que se ha dejado algún paréntesis

HTML.- Monta una web sobre espadas famosas usadas para matar dragones, pero se pasa los estándares W3C por el forro. Cuando se encara con el dragón descubre que el código no es compatible con su navegador, por lo que se queda compuesto y sin espada. El dragón se lo merienda como aperitivo.

Prolog.- Piensa que para matar al dragón necesita un arma. Busca en un catálogo 182014 armas. Para cuando la princesa muere de vieja ya ha logrado descubrir como fabricar todas las armas que empiezan por la A: Armas atómicas, Alabardas, Alfanjes, Asesinos contratados, Armas blancas, Antiaéreos, Arcos, …

PHP.- Crea una página web que al ejecutarla eliminará al $dragón tirando de una base de datos de armas en mysql y sobre un servidor apache. Sin embargo, se olvidó el Where en la query de delete y mata a la princesa, al dragón, a los campesinos, a la bruja, al hechicero y al propio programador.

JavaScript.- El programador intenta matar al gran dragón verde que lanza fuego por la boca. Crean un script que borrará al dragón cuando cargue una página web para unos segundos después crear unas damiselas que lancen flores y hagan soniditos de aplausos. Por desgracia no tuvo en cuenta la estructura Dom del lagarto, también conocido como Mozilla, y lo único que consigue es rellenar su consola de errores y que el libro de Mozilla narre como acabó devorado.

ActiveX.- Los programadores crean un túnel para entrar a la guarida del dragón desde el castillo y ejecutar un programa que matará al dragón desde una distancia segura y prudencial. El dragón descubre el túnel, se come a los trabajadores que cavaban, a los matadores de dragones y esclaviza a todos los siervos del castillo que pasan a ser sus esclavos. El castillo pasa a ser un lugar de cría de dragones lleno crías que manda en pop ups a otros castillos. Los restos poco apetitosos de los caballeros los mete en latas de Spam y manda también a otros castillos como advertencia.

Basic.- Crean un arma capaz de matar a dragones de papel, pero mucho que la perfeccionan descubren que no sirve para matar a ningún dragón más grande que una cría de caniche.

Matlab.- Crean un bucle que calcula las trayectorias para lanzar una flecha gigante contra el dragón. El programa funciona perfectamente. Sólo faltan los voluntarios capaces de lanzar la flecha con la fuerza y puntería necesaria.

Programador de videojuegos.- Se pasa dos años programando una espada state of the art, con shaders y todo. A la hora de matar al dragón se encuentra con que la mitad de los caballeros no tienen fuerza para mover la espada. Luego alguien programa un parche que revela las escenas de sexo con la princesa y Hillary Clinton le monta un escándalo

Perl.- El caballero decide matar al dragón con una expresión regular, pero se equivoca en los caracteres de comodín y acaba incluyendo en el patrón de mortalidad a Dragones, Iguanas, lagartos, perros, gatos, osos, princesas y ratones.

HyperCard.- Crea en 5 minutos una pila con un catálogo de armas, con fotos, gráficas y vídeos sobre su utilización y los distintos tipos de dragones que puede matar, y que además fabrica el arma elegida utilizando las herramientas de dibujo, con una interfaz impecable y fantásticos efectos visuales, lo guarda como ejecutable, le pone un bonito icono, pero cuando va a fabricar la espada no funciona porque se dejó un XCMD en casa (Home)

Macromedia Director.- Crea una magnífica interfaz destellante mata dragones, con una espada deslumbrante, fabricada a bases de Xtras de terceros fabricantes, al primer intento de matar al dragón “Script Error”, entonces a duras penas se esquiva el mordisco, y se procede al segundo intento… pero el ejecutable va tan lento que se los come a todos .

Mathematica.- Se crea y modela el objeto lógico dragón. se modela y crea igualmente la princesa, la espada, al príncipe. se modela el caso especial de la articulación mano-espada, y la discontinuidad piel de dragón-espada.
Cuando todo esta hecho, se le pide a Mathematica que lo resuelva, y el resultado es: “Hay que matar al dragón con la espada, y quedarse con la princesa”

A partir de aquí, son los comentarios y añadidos puestos en comentarios y que se generaron a partir del post inicial…

Perl.- Se bajo el kit de matadragones de CPAN, lo ejecutó, el dragón murió aunque tardó un poquillo y generó algo de basura por pantalla. Al rato, se bajo el kit de noche de amor de CPAN y la princesa paso una nochecita de cuidado ;)

En realidad, el kit matadragones del CPAN tenía un bug en una regexp, y el programador, antes de matar al dragón, tuvo que parchearlo (y envió un mail al desarrollador indicándole el problema y su solución).

PHP.- Hace una búsqueda en Google con las palabras “matar dragón fornicar princesa” y encuentra cientos de espadas y condones.
Mata al dragón de un simple sablazo GNU/GPL, y once meses más tarde, la princesa tiene trillizos debido a que los condones se quedaron obsoletos en los dos primeros meses.

ADA.- Programa un misil de los EEUU para acabar con el dragón… pero se olvida de manejar un excepción y se carga al dragón, a la princesa, al castillo, al pueblo debajo del castillo y todo el terreno en un radio de 15 km.

Haskell.- Define una lista infinita de espadas y una lista infinita de métodos para enfrentarse al ataque del dragón y matarlo.
Hace un map entre los métodos y las espadas y va a enfrentarse el dragón.

El dragón lo ve, no le suena de nada, lo ignora y se va. El caballero se queda para siempre combinando espadas y métodos de matar dragones

Modula 2.- Implementa un método académicamente impecable para matar al dragón, pero no encuentra ninguna espada de verdad con la que usar dicho método.
Así que se va a aprender Pascal que le han dicho que es como Modula pero que funciona con espadas de verdad. El resultado ya lo habéis visto ;)

Miranda.- Igual que el de Modula 2 pero se pasa a Haskell en lugar de Pascal

Miranda.- El programador, luego de analizar detenidamente el problema llega a la conclusión de que lo mejor es que el dragón sea muerto a manos de la princesa, por tal motivo decide darle la espada a la princesa cuando termine de fallársela lo cual ocurrirá luego de liberar al dragón.

Analista funcional.- Define todos las posibles ataques del dragón, llamaradas, posibles puntos débiles y fuertes, su árbol genealógico, etc.
Para cuando tiene listo un primer prototipo, los tataranietos de la princesa se cargan al caballero por el solo hecho de insinuar el matar a su mascota preferida.

Prolog.- Crea un programa que es capaz de buscar el punto débil del dragón, buscar la espada, y buscar el momento en el que usar la espada con el dragón. Pero cuando ejecuta la sentencia para que resuelva el problema, el interprete le dice “No.” (que viene a ser algo así como, no me sale de los webos ^^)

Mono.- El caballero viene saltando, contento con su fiel espada Gtk# diseñada con Glade2 y encomendándose a San Miguel de Icaza. Esquiva las llamaradas del dragón con un par de objetos, lanza una excepción contra las garras del bicho que le salva por un pelo, y cuando se presta a dar la estocada mortal, resulta que las estocadas matadragones del objeto espada no están implementadas todavía, y tampoco hay documentación al respecto. Sus últimas palabras fueron “To: lista@mono Subject: ¿Alguien sabe como…”

Ocaml.- El programador se curra una función recursiva terminal que mata a dragones de tamaño “n” con alta eficiencia y aún encima se puede modificar en pleno asesinato y terminar follándose a la princesa sin llenar la pila.
En el momento de utilizarla se da cuenta de que la función acepta un tipo ‘a como tipo de entrada y mata a la princesa y lo sodomiza.

Sinclair Basic.- El programador introduce la cinta para cargar el compilador en el sistema y escribe LOAD “”. Esta tan concentrado escuchando los piip piip de la cinta que no se da cuenta que la princesa, cansada de esperar, le coge la espada y se la clava a si misma para evitar morir de aburrimiento.

Cuando el programador termina de picar, guardar y cargar el programa el dragón ya se ha ido a otro país y ya ha encontrado otra princesa a la que comerse.

El ingeniero de Software.- Se le ocurre hacer una especificación de requerimientos para desarrollar la espada que matará al dragón. Para lograrlo, debe realizar entrevista los stakeholders involucrados, por lo tanto va donde el dragón para saber las características de este para construir la espada.

Realiza con la entrevista con el dragón y desarrolla la especificación y la espada y decide volver. Cuando vuelve, el Dragón le dice que esto no era lo que quería y se come al ingeniero por no satisfacer sus requerimientos.

El PhD en Ciencia Computacional.- Resuelve que la matanza del dragón es un problema NP-Completo y que no tiene solución con la computación existente en la actualidad. Así que decide que mientras no se popularice la computación cuántica, no ira a matar al dragón.

El experto en IA.- Decide crear una red neuronal que mediante casos de asesinatos de dragones pueda converger a una acción que permite realizar la matanza con el mínimo de error posible.

Cuando la red estaba lista, el programador en C ya había matado el dragón, y la princesa esta sola esperando que la follaran, pero el experto era virgen y tuvo que hacer otra red neuronal que le enseñara a tener sexo.

ActionScript.- El programador utiliza un servicio web para consultar las armas de las que dispone para matar al dragón, pero entre que tarda dos eternidades en inicializarse y completar la transferencia y que la variable poema de amor se escribe sobre la variable escudo (a pesar de ser de tipos distintos) el dragón y la princesa acaban cenando caballero a la brasa para cenar

M4.- El programador se preparó una macro que enviaría al dragón a otra dimensión (divert), se le olvidaron unas comillas y acabaron apareciendo 4 réplicas iguales del mismo dragón.

Este programador se acojonó y salió corriendo. Aprendió a usar XSLT y volvió con una plantilla para transformar a los dragones en lagartijas y aplastarlos a todos.

Cuando la princesa vio al programador se horrorizó de ver lo feo que era. Éste se sintió herido emocionalmente y decidió hacerse un arreglo estético, lamentablemente el estándar XSL-FO nunca será una realidad.

PHP.- El programador Stehen prepara un while con sockets apuntando al dragón suelta los tiros con un intervalo de 1 ms pero recibe un Connection closed: Too many connections from your host y el dragon cheka en sus /var/log/httpd localiza al programador vuela a su pequeño antro y lo hace mierda y se da cuenta de que el programador no estaba ahi sino que con AJAX puso su web para un intervalo X controlado desde su PALM, entre tanto a la salida del dragon la princesa logra escapar con su programador(Stehen) y ejecuta otro proceso con AJAX para usar la api de google en busca de hoteles baratos con condones de regalo.

PHP.- El caballero paso horas mirando al dragon pero en elinstante de ejecutar el ataque noencontró su espada. Le dijeron que estaba en el castillo asi que fué a buscarla a la habitacion de la princesa, a la que pudo sobar pero fue achicharrado por el dragon ya que su espada realmente estaba donde se quedó a observar al dragon. Dias despues la princesa mira porla ventana y ve 18 princesas, 40 dragones y 4 principes. Quedandose sola esperando el porvenir.

DIV 2.- Crea el programa matadragones en 2 minutos con todos los detalles, planos 3d, sprites, y demas , pero cuando lo va a correr se da cuenta de que el dragon es joven y DIV 2 no lo soporta… Entonces es devorado por el dragon…

PHP.- El caballero paso horas mirando al dragon pero en el instante de ejecutar su ataque no encontró su espada. Le dijeron que estaba en el castillo. Fué a buscarla a la habitacion de la princesa, pudo sobar pero fue achicharrado por el dragon ya que su espada realmente estaba donde se quedó a observarle. Dias despues la princesa mira por la ventana y divisa 18 princesas, 40 dragones y 4 principes. Quedandose sola esperando el porvenir de los excasos principes.

CSS.- Tras crear el caballero un contenedor y un supercontenedor para mantenerse centrado y estable a pesar de las envestidas del dragón, olvida definir un DOCTYPE correcto y el dragón se lo merienda cual pincho de calamares.

Perl.- Lee peldoc perlrun y decide utilizar un one liner. Justo al acabar se da cuenta que sed bastaba para la tarea.

WEB 2.0.- Desarrolla una forma de matar al dragon utilizando XML, tonos pastel y letras grandes, y permite que todos los guerreros del mundo opinen sobre la mejor forma de matar al dragon con un sistema de tags y puntuaciones.

En medio de la discusión, una horda de trolls revienta la convencion y mueren todos.

Como no podía ser de otra manera.

CSS.- Oculta al dragon con un display: none; pero lo unico que ha conseguido es hacerlo invisible y ponerselo más jodido al proximo programador que venga.

ASP (el primo de .net).- Quien no fue invitado a matar el dragon demanda a esta Web poe 2.000.000? por discriminacion, se reparte el dinero con el dragon y se van a vivir juntos a Florida

Consultor externo.- Aconseja una estrategia planificada con un incremento progresivo de medios y personal empleado, dosificado a partir de un comite de expertos internos y externos que se reuniran con periodicidad bimensual para analizar los informes de progreso. Una actitud proactiva debe ser impulsada en general en la seleccion de personal, asi como un buen ambiente interno. De hecho su propia empresa tiene expertos especializados en la seleccion de personal de programacion y en la dinamizacion de ambientes laborales. Una ciudadela de programacion es lo mas adecuado para dar estabilidad y solidez a la empresa. Conviene que se asuma desde el principio que el gasto de formacion de personal no debe ser cicatero, si queremos que la cosa avance, asi como que el sistema de pruebas debe de estar estandarizado y documentado para cada programa, para evitar sorpresas indeseables de ultima hora.
Si en el transcurso del proyecto se produjera la extincion de los dragones o de las princesas, ya fuera por la desaparicion de su entorno natural por deforestacion o sepultamiento bajo informes documentados o por el advenimiento de la revolucion francesa, entonces habria que redirigir el proyecto-ciudadela a los canales publicos de reconversion industrial de urgencia social, para lo cual seria conveniente un comite de expertos internos y externos que se reunieran con periodicidad bimensual para establecer las politicas de reconversion y los ajustes necesarios a la luz de los informes de progreso.

Python.- Como solo hay UNA forma obvia de matar al dragon:
>>> from muertesObvias import hacerBrocheta
>>> dragon
dragon malo que dice agggh y tira fuego at 0×3007c370>
>>> hacerBrocheta(dragon)
>>> dragon
>>> brocheta de dragon traigan vino asi empedamos a la princesa at 0×3007c370>

Hacer brocheta tambien manda un mail de invitacion a que hagan reportaje de los canales de cable locales, publica una entrada diciendo que el caballero mato al dragon en su blog, da de baja todos los dominios que tenia registrados el dragon a su nombre y se conecta con un servidor jabber para avisar a los familiares del dragon que lo mataron a tito. (el nombre del dragon)

NQC.- Crea un robot con el Lego Mindstorms para manejar la espada para aprovechar el tiempo y llevarse a la princesa. A la hora de desarrollar el codigo, el limite de 32 variables globales le fastidia sus aspiraciones de grandeza y tiene que reflashear el RCX con BrickOS y programarlo en C. Como no tiene ni idea de C, termina matando al dragon dandole con el robot en la cabeza. La princesa termina no haciendole caso porque tiene miedo de los robots, y como el programador no se atreve a decirle que la quiere termina en su casa viendo paginas de Teens. :-P

GAMBAS.- Define la clase dragon, la clase princesa, la clase espada y la clase principe sin saber ni siquiera que es una clase, y sus profesores se rien de el y le dicen que aprenda C.
A la hora de compilar el programa en su iBook, le sale un error de violacion de segmento porque Gambas no corre sobre LinuxPPC por problemas de endian y termina aprendiendo C+x (C con prisas y extres) y OpenGL para matar al dragon dentro de un juego de plataformas 3D, que es mucho mas seguro que enfrentarse al bicho… La princesa piensa que la protagonista del juego se parece mucho a ella :-P

REDCODE / COREWAR.- El programador ejecuta un programa trasgo ( mov 0,1) contra el dragón, que termina convertido en otro un trasgo forzando un empate.
Después de varias ejecuciones, el dragón consigue acabar con el programa trasgo, desempata, y se queda con la princesa.
Al programador le quedan varios ciclos de CPU para salir por patas y evitar ser merendado.

Python.- “Python lo mata en dos o tres lineas después de instalar un módulo para matar dragones.”

LOGO.- Programa a su “tortuga” para que dibuje una cuerda alrededor del cuello del dragón, y así ahogarle. Pero como la tortuga trabaja sólo en 2 dimensiones, el plan fracasa.
Además, la tortuga y el dragón se hacen amigos, luego amantes; y de su amor nace un bicharraco inmundo, un dragón con caparazón de tortuga, que es mucho más fuerte que su papi-dragón.
Deciden hacer un asado con la princesa y el programador, ya que:
1.- El dragón ya tiene a la tortuga para desfogar sus más bajos instintos.
2.- El hijo bicharraco les sale homosexual, y aunque podría pensar en el programador para soltar todo su “amor”, lo cierto es que el programador no hace ninguna clase de ejercicio, y se pasa los fines de semana metido en su casa viendo pelis (porno) y jugando al Quake; así que está bastante ceporro y al bicharraco no le atrae.
Al menos, en el momento en que depositan a la princesa y al programador en la parrilla, éste aprovecha y “se la pasa por la piedra” (algo es algo).

Algoritmos geneticos,. El principe trata de descubrir la mejor manera de aniquilar el dragon con un cultivo de 10.000 cadenas de ADN. En el tiempo en que se desarrolla el algoritmo, el dragon es matado por el bisnieto de la princesa, que al ver que nadie la hacia ni caso se apunto a una secta satanica. Cuando el programa termina, resulta ser el elixir de la eterna juventud, haciendo que el dragon resucite con 10 años menos.

Lisp.- Antes de de escribir una función que mate al dragón, el programador de Lisp escribe una función que mate al dragón.

Ajax.- Prepara una Interface para mentenerse alejado del Dragon y Atacar. Arma la Espada de DIV’s y viste a su caballero de hermosos CSS’s y lo manda a combatir. Cada vez que su caballero necesitaba algo, lo solicitaba y recibia inmediatamente lo que necesitaba, super armas, cambio de armaduras, invisibilidad, etc etc. Pero el dragón pendejo con unos escupitazos de fuegos crea una Firewall que hace lento al caballero Ajax. y de aburrido se lo come y lo caga al lado de Web 2.0

Delphi.- Crea una aplicacion rapidamente, mata al dragon, enamora a la princesa pero cuando va a donde su padre (el Rey) este le niega el matrimonio porque le dijeron que los caballeros de verdad conocen C…

ABAP para SAP R/3.- El funcional le ha dicho a la princesa que el SAP estandar cubre todas las funcionalidades necesarias (acercarse a la guarida del dragon, hacer que este salga a campo abierto, proteger al caballero del fuego y matar al dragon). La princesa convence al caballero para que use SAP. Cuando este se enfrenta al dragon descubre que SAP sólo contempla matar dragones alemanes y sólo protege del fuego de los dragones vietnamitas, mientras el dragon cocina a fuego lento al caballero el funcional de SAP pone una nota OSS para conseguir un add-on sobre el estandar, despues de 50 dias de reuniones con 3 gerentes de cuentas, dos comerciales y 6 key-user financieros que no han visto un dragon en su vida, el segundo caballero es cocinado al papillon por el dragon porque los 6 programadores indios que hicieron la modificacion al estandar no entendieron las especificaciones

ADA.- El programador tiene a varios grupos de personas, con distintas armas, que coordina con cuidado, para que, todas combinadas, consigan matar al dragón. Así, primero tendrá un grupo que acorrale al dragón con lanzas, otro grupo de arqueros que le lancen flechas para herirlo, y luego un grupo de caballeros para ir a rematarlo. A la hora de la verdad, primero irán los caballeros, que al ver que el dragón tiene fuerzas todavía, huirán, pero no podrán hacerlo porque les acorralarán los lanceros, que llegarán después, y al final vendrán los arqueros, para que, por la lluvia de flechas, mueran todos, menos el dragón. Los arqueros, además, se quedan agilipollados, pidiendo cuentas al programador.

El profesor de informática.- Explica cuidadosamente una clase entera cómo follarse a la princesa (algo que no ha hecho en su puta vida). Al final, dice que el matar al dragón es trivial y lo deja como ejercicio para el estudiante.

Python.- Crea una funcion con GTK para la espada, le da unos retoques a la princesa y le agrega unos pixeles de más a sus bobbies, genera el modulo matar() con llamada al elemnto Dragon y otra funcion de follar() con llamada a la princesa, al ver que el dragon es una serpiente pero en grande el compilador hizo
>>matar(princesa)
>>follar(dragona) //Ya que al final era chica el dragon


Publicado en Desarrollo, Friki, General | 1 Comentario »