miércoles, junio 24, 2009

Ambientes de desarrollos en el lado obscuro

Durante las presentaciones de la Comunidad Tijuana.NET, talleres, cursos y otro tipo de eventos en los que me ha tocado participar y en los que muestro mi ambiente de trabajo, a algunas personas les parece extraño que trabajo con fondos obscuros y letras brillantes, para mi es un tanto curioso, ya que desde hace poco mas de 10 años he trabajado así.

En algunas ocasiones me preguntan el porque o cuales son las ventajas o desventajas, realmente no tengo una respuesta "inteligente" que ofrecer, simplemente comento que me siento a gusto con los fondos obscuros.

Durante este periodo de tiempo he escuchado comentarios a favor y en contra de los fondos obscuros en las herramientas de desarrollo, pero todos me habían parece un tanto subjetivos, ya que es su mayoría eran: "Yo creo...", "Yo pienso ...", "Yo opino ...", etc.

Googleando Internet, me encontré con con una pregunta en StackOverflow, sobre este tema, y la primer respuesta me pareció interesante, ya que publica una serie de ligas y referencias de estudios, al parecer, serios sobre el tema; ademas que el aporte de las siguientes respuestas también es interesante; pero creo que no se llega a una conclusión definitiva si es bueno o es malo y que es lo que afecta, la salud, el desempeño, el entendimiento, etc.

En el mundo *NIX, me es muy común encontrar gente desarrollado con fondos negros, sobre herramientas como Emac, VI. De hecho la configuración de mi MonoDevelop lo tengo precisamente de esta manera.

Mi ambiente de Ruby On Rails, para el cual hago uso del editor TextMate, hago uso del tema "Sunburst".

Y en el ambiente Windows donde ejecuto Visual Studio, no se ha quedado atrás, de hecho en las herramientas de MS, he usado fondos obscuros desde que programaba en VBx.

Para Visual Studio, utilizo el tema que modifico Rob Conery y que hizo disponible es su post "TextMate theme for Visual Studio, take 2", al igual que Rob hay varios personas en la comunidad .NET que se pasaron "al lado obscuro" y que publicaron sus versiones obscuras:

¿Y ustedes que opinan al respecto?, ¿Ya se pasaron al lado obscuro?, ¿Mitos o realidades, los pros y cons de usar temas obscuros?


viernes, junio 19, 2009

Como mover una DB o archivo de una DB MSSQL a otro disco

Curiosamente, esta pregunta me la hecho ya un par de ocasiones distintas personas en unos pocos días, por tal motivo realizo este post con la información pertinente de como hacerlo.

Pero antes de avanzar, la pregunta obligada es ¿Porque mover la DB o algún archivo de la DB a otro disco? Bueno, las causas pueden ser muchas, pero algunas de la posibles son:

  • El MSSQL Server por default instalo sus base de datos como master, model, tempdb en el mismo disco duro donde esta instalado el sistema operativo, esta es una mala practica.
  • El disco donde tenemos las DB ya esta a punto de llenarse o ya se lleno.
  • Por cuestiones de rendimiento es mejor mover tempdb, cuando se generan reportes complejos, a otro disco diferente a donde están las DBs con datos.
  • Igual por cuestiones de rendimiento es aceptable el mover los archivos de log del disco donde están los datafiles a otro diferente.

Para realizar esta operación hay que seguir los siguientes pasos:

Abrir el query analyzer y para mover, por ejemplo la db tempdb hay que ejecutar primero el siguiente comando para obtener información de ella:

USE TempDB
GO
EXEC sp_helpfile
GO

Esta nos va a mostrar información similar a la siguiente:

name fileid filename filegroup size
——- —— ————————————————————– ———- ——-
tempdev 1 C:Program FilesMicrosoft SQL ServerMSSQLdatatempdb.mdf PRIMARY 16000 KB
templog 2 C:Program FilesMicrosoft SQL ServerMSSQLdatatemplog.ldf NULL 1024 KB

Este resultado nos indica la ruta de donde están los archivos que deseamos mover.

Lo importante aquí es anotar los nombres de la primer columna porque los vamos a necesitar en el siguiente paso:

USE master
GO
ALTER DATABASE TempDB MODIFY FILE
( NAME = <FILE1>, FILENAME = '<FILEPATH1>.mdf' )
GO
ALTER DATABASE TempDB MODIFY FILE
( NAME = <FILE2>, FILENAME = '<FILEPATH2>.ldf' )
GO

Hay que reemplazar <FILE1> y <FILE2> con los nombre obtenidos en el primer script y también reemplazar <FILEPATH1> Y <FILEPATH2> con la ruta completa y el nombre de archivo a donde se van a mover - aunque todavía no se hayan movido - los archivos, una vez que el script esta correcto, hay que ejecutarlo; posteriormente hay que apagar el servicio del servidor de sql.

Una vez apagado el servicio de sql, hay que ir al disco duro y mover los archivos de su ubicación original - ver resultado del primer script -, para ponerlos en la nueva ruta que indicamos en el segundo script.

El ultimo paso consiste en iniciar el servicio del sql server y este ya debe de estar haciendo uso de la nueva ubicación de los archivos.


martes, junio 16, 2009

Agile CoffeCamp Tijuana

El día de hoy a través de twitter, y partir de una pregunta de @fcastellanos, surgió la idea de realizar un Agile CoffeCamp. Idea a la cual se sumaron rápidamente @gabo y @mariohcornejo; la idea se formalizo rápidamente, por lo tanto este post es precisamente para invitar a asistir al:

Agile CoffeCamp
En el Cafe D'Volada de Plaza Dorada - el café "oficial" para este tipo de reuniones -
El sábado 4 de Julio, a partir de las 9:00am, hasta donde dé la plática

¿Quienes pueden asistir?
Cualquier persona interesada en pasar un buen rato compartiendo experiencias en el uso de metodología ágiles en el desarrollo de software.

¿Que costo tiene?
Ninguno, solo se requiere consumo mínimo en el Café - para que no nos corran -.

Si no has participado anteriormente con nosotros en este tipo de eventos, esta es tu oportunidad, no hay platicas formales, no hay powerpoint, no hay expertos, la opinión de todos es importante.

Aquí les dejo una fotos de eventos pasados.


jueves, junio 11, 2009

Tiempo de Cruce en Garitas

El día de hoy oficialmente lanzo este proyecto que tenia guardado por algo de tiempo y que se llama CruceGaritas.

Es sitio web que proporciona información de tiempos estimados de espera para cruzar de México hacia Estados Unidos, para todas las garitas de cruce en la frontera norte del país, tanto para garitas turísticas, comerciales y las denominadas Sentry.

Al seleccionar una de la ciudades, se muestra la información de todos los puertos fronterizos para esa ciudad y para todos los tipos de garitas disponibles en cada puerto.

Indica también cuando fue actualizada la información por ultima ocasión, mostrando la hora local de la ciudad seleccionada; ademas da información de en que horario esta abierto ese puerto, con cuantas lineas disponibles cuenta cada garita y cuantas linea esta abiertas o cerradas y el tiempo promedio de espera.

La información mostrada por el sitio web, es obtenida periódicamente del sitio del U.S. Custom and Border Protection, a través del servicio Border Wait Times (BWT), por lo tanto la frecuencia de actualización de la información depende del 100% del BWT, el servicio proporcionado a través de CruceGaritas, únicamente consume y muestra la información del BWT de una forma mas practica.

El sitio CruceGaritas esta pensado principalmente para ser consumido por dispositivos móviles que cuenten con un navegador Web, de hecho cuando se navega a CruceGaritas la interface gráfica Web mostrada es la que permite que se pueda visualizar sin problemas en teléfonos BlackBerry y aquellos que cuenten con Microsoft IE pocket, ademas el sitio puede determinar si se esta accediendo con un iPhone o iPod touch, en caso de ser así muestra una interface Web optimizada para tales dispositivos.

La interface gráfica optimizada para el navegador de un computador esta aun en proceso y va a estar disponible dentro de poco.

Técnicamente el sitio CruceGaritas cuenta con algunos detalles interesantes:

  • Hace uso de IP geolocalizacion para determinar la ciudad desde donde nos estamos conectando y mostrarla antes que otras, esta característica hace uso del servicio hostip.info para resolver la dirección IP a una ciudad.
  • La aplicación esta desarrollada en el lenguaje de programación Ruby, gracias al cual la cantidad de lineas de código para esta aplicación no pasan de mas de 500 para toda la aplicación, y una mayoría de ellas son parte de la declaración del ORM que se utiliza para mapear los objetos a la base de datos.
  • El framework MVC utilizado es Sinatra, es cual es micro-framework muy sencillo de utilizar para el desarrollo de aplicaciones Web con el patrón MVC, una aplicacion Hello World es tan simple como:

require 'rubygems'

require 'sinatra'

get '/hi' do

"Hello World!"

end

  • El framework ORM es DataMapper, al igual que Sinatra, un framework muy fácil de usar, aunque mas declarativo de ActiveRecord
  • Como herramienta para obtener la información de la pagina del BWT, hago uso Scrubyt!, excelente herramienta para Web Scrape
  • Para la interface gráfica Web de la versión iPhone/iPod hago uso del framework iUi, una vez mas, otro framework muy sencillo de utilizar para crear interfaces gráficas "a la iPhone"
  • Finalmente en la parte del "Deployment" hago uso de Git y Capistrano, una combinación explosiva para configuración e implementación en ambientes de producción.

Hay un par de puntos que es necesario mencionar antes de finalizar este anuncio.

Primeramente, es posible que el nombre de la garita para determinada ciudad no sea el correcto o el nombre común, si identifican uno así, por favor no duden en notificarlo a soporte {arroba} crucegaritas {.} com, de igual forma si tienen algún comentario, malo - pero constructivo -, bueno o sugerencia.

CruceGaritas cuenta con API para el consumo de objetos json, aunque de momento no esta activada, si te interesa tener acceso a la API, envía un email - a soporte {arroba} crucegaritas {.} com - explicando porque te interesa y en que tipo de aplicación vas a consumir la información de tiempos de espera del cruce de garitas.

Si te gusta CruceGaritas y te parece una aplicación útil.


jueves, junio 04, 2009

Voto en blanco o Voto nulo

Desde un par de días en mi timeline de Twitter se ha desatado una discusión sobre el valor o no valor del Voto nulo o voto blanco, discusión que no es exclusiva de mi timeline, y que se discute en diferentes ámbitos.

El caso es que votar por ningún partido, ha tomado relevancia y los partidos políticos y el IFE ya entraron a la discusión, obviamente los partidos políticos desestiman el no votar por ellos y solo se limitan a decir "no tiren su voto, voten por mi, porque? no importa algunas vez a importado? solo voten por mi y ya."

El IFE, por otro lado, creo que la situación los "agarro" desprevenidos, no creo que exista algún fundamento legal para que la acción de voto nulo no se pueda dar y al ultimas fechas solo se han limita a invitar a la gente a votar, y que esta vez como ha sucedido incontables veces en el pasado, el abstencionismo no sea el que gane.

En mi timeline hay voces a favor y voces en contra al voto nulo, obviamente todas respetables, y de las diferentes opiniones puedo resumir lo siguiente:

  • Anular el voto es tirar el voto
  • Anular el voto es regalarle el voto al PRI
  • Anular el voto no sirve de nada
  • Anular el voto es mostrar el nivel de descontento con la clase política

Y si tienen razón los que dicen que anular el voto no va cambiar nada, solo va a ser un dato mas para la estadística, un dato "curioso", pero va a reflejar el sentimiento real hacia la clase política de quienes así lo hagan.

Lo que me llama intensamente la atención es que se le este dando importancia a si la gente anula o no su voto, tanto por lo medio de comunicación, los partidos y el IFE, en lugar de estar preocupados por el indice de abstencionismo, el cual me atrevo a predecir va a ser mayor que la cantidad de votos, nulos y no nulos recibidos.

Yo voy a anular mi voto, como un acto personal, no es una invitación a que alguien mas lo haga, que cada quien decida por cuenta propia - si es que puede -.

Lo bonito es que cada quien vote como le dé la gana, pero que vote - Carlos Loret de Mola

A continuación reproduzco la siguiente opinión de Carlos Loret de Mola, de quien no comparto muchas de sus opiniones, pero en esta ocasión definitivamente si, las partes en negritas fueran acentuadas por mi, ya que considero que son importantes.

¿Nerviositos?

Nerviosos y erráticos han respondido políticos de todos los partidos a la decisión de mucha gente de anular el voto. Este reportero, como fue expuesto ayer en EL UNIVERSAL, se decidió desde 2006 a acudir a las urnas para tachar por completo la boleta y ha decidido hacerlo de nuevo en cinco semanas. No me interesa invitar a nadie a hacer lo mismo ni formo parte de algún grupo u organización que esté promoviendo el voto nulo, y no me interesa. Lo bonito es que cada quien vote como le dé la gana, pero que vote.

Y ahí viene la primera diferencia. Cuando le preguntaron sobre el voto nulo, López Obrador dijo que “absteniéndonos de votar se le hace el juego a la derecha”. No entendió (otra vez). El abstencionismo electoral se conoce como el acto de tener credencial pero no ir a las urnas (por cierto, posición mayoritaria en la sociedad, que si fuéramos puristas implicaría que en la próxima Legislatura 300 curules deberían estar vacías). Anular el voto es ir a la casilla para demostrar la confianza en la democracia, pero rechazar la oferta política que representan los partidos que en México se cuelgan de ella.

El senador panista Santiago Creel tampoco entendió. Declaró: “No se puede construir una democracia desdeñando el voto”, porque se renuncia al derecho a elegir. No ha captado que no se desdeña el voto, se ejerce, y se le olvida que decir “No” es siempre una alternativa.

El símbolo del rechazo social implícito no le importa al coordinador del PRD en el Senado, Carlos Navarrete, quien en una declaración desdeña a 60% de la ciudadanía que no irá a votar, más los votos anulados. Dice Navarrete, soberbio: “El 1 de septiembre vamos a instalar la nueva Cámara de Diputados”, o sea, háganle como quieran, nosotros aquí nos repartimos el pastel con o sin invitados.

Va más allá el presidente de la Cámara de Diputados, el priísta César Duarte, quien califica de “irresponsable” a quien vote nulo y expresa: “Debemos fortalecer el proceso político-democrático que ha venido evolucionando en el país, lo debemos fortalecer, así sean las posiciones más complicadas”. Esto de “las posiciones más complicadas” es un eufemismo para decir: vote por mí aunque no se identifique conmigo. Es una apuesta por mantener alejada la política de la ciudadanía, por que siga siendo un asunto de élites y, curiosamente, separarse del ideal democrático.

Josefina Vázquez Mota, panista, dice que el voto en blanco “beneficia a las fuerzas políticas que han apostado por el clientelismo”. ¿Hay alguna que no lo haya hecho? ¿No opera el PAN con el empresariado? ¿No lo hace el PRI con los campesinos? ¿El PRD con los ambulantes? ¿Elba Esther con su sindicato?

Y todos, a coro, cantan que se trata de un debilitamiento de la representación popular. O sea, que el Congreso va a ser menos un retrato de México. ¿Menos? Difícilmente. Lo que pasa es que no es fácil aguantar una estampida contundente de rechazo.

SACIAMORBOS

Se volvió a despachar con la grande el “negrito de todos los arroces”. El Consejo Coordinador Empresarial denunció que en los estados, los gobernadores fundan CCE’s patito para tenerlos de aplaudidores. En el feudo del Golfo, ¡hay tres!

Carlos Loret de Mola
Historias de reportero
04 de junio de 2009
Periódico El Universal http://www.eluniversal.com.mx/columnas/78529.html


miércoles, mayo 13, 2009

Hacienda y la carabina de ambrosio

Hace un par de días me toco ir a perder el tiempo a Hacienda, para realizar el tramite de mi clave FIEL, que no es otra cosa que una firma criptografica para poder enviar mis declaraciones firmadas de manera electrónica.

Mi contadora me hizo el favor de generar el archivo de requerimiento (.REQ), el cual según entiendo, es mi información fiscal empaquetada en el formato PKCS#7, el cual es posteriormente firmado por mi llave privada (.KEY), y que sigue el estándar PKCS#8; ambos archivo me los puso en un CD-ROM.

El caso es que llegue a hacienda y espere mi turno a ser atendido, me asistió un tipo, hasta eso amable y de buena manera, le doy mi documentación - que entre los documentos piden el acta original, para que? NPI -, le paso el CD con mis archivos criptograficos y primer problema, no lo puede leer su maquina, me pregunta si no los traigo en un "floppy" de 3.5" y yo me quedo WFT? Floppy? esta hablando en serio? mi ultima maquina con floppy de 3.5" la tuve hace mas de OCHO años!.

Dije, ok no hay problema, le pedí el CD y saco mi MAC, el tipo la ve y me dice "uhh joven si solo genero en la MAC ..." y no lo deje continuar ya que la MAC solo estaba "dormida" y aparte tenia activa una maquina virtual con Windows, así que en cuestión de segundos ya estaba leyendo el CD en Windows, saque un USB formateado con FAT32 y copie los archivos ahí, le paso el USB y segundo problema su maquina no reconoce el USB.

Total que me dice que hay un laboratorio donde puedo volver a genera mis archivos, lo sigo y me asignan una maquina con Windows, inserto el CD, que había "fallado" previamente, y si lo lee, inserto mi USB y también lo lee !!, procedo a formatear el USB nuevamente, por aquello de las malditas dudas, le copio los archivos del CD al USB y todo bien, no problemas.

Después de otra espera mas, me asignan otra persona para generar mi certificado digital FIEL, el cual es un certificado que cumple con el estándar X.509, le paso el USB a la persona y abre mi archivo de requerimiento con el programa SOLCEDI, sin problemas; continuo con el tramite donde entre otras cosa te toman todas la huellas digitales y te toman una fotografía, como a cualquier mal-viviente que lo fichan en la delegación de policía.

Finalmente me generan el certificado y me imprimen un comprobante de inscripción a la "Firma Electrónica Avanzada", listo ya paso lo peor, ja! iluso de mi, por pensar eso.

Le envío los archivos a mi contadora para que realice el tramite para el cual necesitaba la firma y gran problema, aparece una leyenda indicando que el certificado no esta activo, me dije ok a la mejor algo le paso al certificado, no hay problema voy al sitio del SAT y lo descargo de ahí, que al cabo si se puede hacer.

Me conecto al sitio https://www.acceso.sat.gob.mx/Acceso/CertiSAT.asp desde OSX y con Firefox, primer problema me dice que el certificado SSL no corresponde a la pagina web que estoy accediendo y me recomienda no abrir la pagina, digo "putss el wey web master no fue capaz ni de poner el certificado SSL correcto para la conexión segura", ok ignoro la advertencia de Firefox y procedo, llego a la pantalla donde me pide mi información para poder descargar el certificado y hago "click" en aceptar, el Firefox se pone a cargar una nueva pagina, espero, espero, espero, espero .... y espero y finalmente nada solo un triste "Timeout", la pagina no pudo ser cargada!!.

Lo primero que pensé, ok a la mejor es otro sitio estúpidamente realizado para funcionar solo con IE, digo en el gobierno Mexicano y banca electrónica, ese tipo de sitios abundan; abro la maquina virtual con Windows y corro el IE8 me dirijo sitio y misma advertencia sobre el certificado SSL de la pagina, ignoro la advertencia, introduzco mis datos, y hago "click" en aceptar, espero, espero, espero ... y espero y BANG! otra vez "Timeout"!

Pensé muchas cosas sobre la ineptitud de Hacienda y que no puedo repetir porque mi educación no me lo permite, pero dejo el siguiente espacio: < espacio > para que quien se aventure a imaginar lo que pensé de Hacienda lo pueda poner ahí.

Conclusión final, ya perdí tiempo en ir a hacienda a generar un certificado que no sirve y que ademas fallas en sus equipos me hizo invertir mas tiempo del necesario; ya le hice perder tiempo a mi contadora por el certificado que no sirve, ya perdí tiempo escribiendo este post, sobre algo que debería de quedar en el olvido y mañana voy a perder mas tiempo en ir a Hacienda a ver que paso con el certificado y que me lo vuelvan a generar, y todo para que? para darle una parte de mis ingresos que me costo ganar ...


domingo, abril 26, 2009

Programa del Congreso Innov@Tec 2009


Actualización: Debido a la emergencia sanitaria por la influenza tipo A (H1N1), el congreso a sido movido de las fechas 12 y 13 de Mayo del 2009, a los días 26 y 27 de Mayo del 2009, con el programa previamente indicado.

Hace un par de semanas comente sobre el Congreso Innov@Tec 2009, el cual se llevara a cabo los días 26 y 27 de Mayo del 2009 en el teatro Calafornix, que se encuentra en las instalaciones del Instituto Tecnológico de Tijuana, en Tomas Aquino.

El congreso es de acceso gratuito. Y ya esta disponible el programa del evento:

Conferencias 26 de Mayo

9:00 am Inauguración

9:30 am Programas y Mecanismos de fondeo para emprendedores y empresas de TI
Ing. Antonio Álamos
CANIETI

10:30 am WinDev Herramienta CASE para el desarrollo rápido de aplicaciones
Ing. Iván González
Nabu Tecnología en Software

11:30 am Descanso

11:45 am BlackBerry en los Procesos de Negocio
Ing. Carlos A. Garza
BlackBerry México

12:45 pm Metodología Agiles en el Desarrollo de Software
Mario Chávez
Vértigo Soluciones

1:45 pm Descanso

2:00 pm Clúster de Tecnologías de Información
Ing. Ricardo Aguerrebere
IT Baja

Conferencias 27 de Mayo

9:00 am Servicio S3 de Amazon para una Aplicación Web más Escalable
Ing. Armando Andrade
Mirage Appliances Inc

10:00 am L.I. Cómputo en la nube con Windows Azure
Gabriel Flores
Comunidad.NET

11:00 Descanso

11:15 am Metodología Ágil Utilizando SCRUM
Iván González
Nabu Tecnología en Software

12:15 pm Aprendizaje Automático en Aplicaciones Web
Dr. Mario García
ITT

1:15 pm Descanso

1:30 pm Moprosoft y los Sistemas de Estandarización de los Procesos de Trabajo
MA. Eduardo Ahumada
Uabc


viernes, abril 17, 2009

Microsoft, you did it again !

A principios de este año, se origino una polémica por una parte de la comunidad de desarrolladores de Microsoft, en relación a la mala calidad de diseño y código de la aplicación Oxite, la cual inicialmente en su sitio web citaba que era una aplicación que podría ser usada como guía para el desarrollo de aplicaciones con el framework ASP.NET MVC.

La polémica causo que se quitara la leyenda de que era una aplicación de referencia y que entrara sobre una fuerte re-factorizacion para cubrir los puntos criticados por la comunidad.

Pues, Microsoft lo ha hecho otra vez. En esta ocacion Microsoft libero en su centro de arquitectura la aplicación Kobe: Kit de recursos de desarrollo y servicios Web 2.0; la cual segun su descripcion es:

El proyecto Kobe es un kit de recursos de iniciación para la planeación, arquitectura e implementación de aplicaciones y servicios Web 2.0 que usen la plataforma de Microsoft. Este kit de recursos tiene como enfoca a los que toman decisiones tecnologicas, arquitectos de soluciones, gerentes de desarrollo y programadores que aspiran al desarrollo de empresas "Startups" y de negocios - corporativas, que buscan invertir en nuevas aplicaciones/servicios Web 2.0

Hasta aquí todo esta bien, pero el problema se origino una vez mas cuando la comunidad comenzó a analizar el código fuente de Kobe y se encontró con que repitió muchos de los errores iniciales de Oxite, ademas de introducir sus propios errores, simplemente voy a lista algunos de los puntos que se trataron ya en los blogs en Ingles:

  • Controladores "Gordos", demasiado código dentro de los controladores
  • Métodos complejos y muy largos
  • Uso de cadenas de texto "mágicas"
  • Un controlador puede regresar diferentes vistas bajo una gran cantidad de condiciones
  • Bloques try-catch usados de forma absurda
  • No hay separación en la lógica y la vista
  • Uso de dos diferentes frameworks de JavaScript
  • Manejo extraño CSS
  • Inconsistencia en el código y los nombres de variables
  • Código que nunca se ejecuta
  • Abuso de ViewData
  • Entre otros muchos mas
El día de hoy Microsoft opto por retirar el código fuente de la aplicación, usando la siguiente nota como explicación:

Esta aplicación de ejemplo esta siendo actualizada para incorporar la retro-alimentación de la comunidad. Una versión actualizada va a ser publicada nuevamente en corto tiempo.

Mi pregunta, es ¿Porque?, ¿Porque Microsoft? ¿Porque no se tomo como base la experiencia previa con Oxite?, ¿Porque si gente como Scott Hanselman, Phil Haack y Rob Conery, que trabajan para Microsoft y que en Mix09 evangelizaron sobre como debe de ser la anatomía de una aplicación ASP.NET MVC no se tomaron en cuenta para desarrollo de Kobe?, o ya de perdida los desarrolladores de Kobe hubieran comprado el libro "Profesional ASP.NET MVC 1.0", en donde también participa Scott Guthrie ademas de los antes mencionados.

¿Que esta pasando, acaso las aplicaciones de referencia de Microsoft cada vez son mas malas? o ¿Ya antes eran así, solo que nadie levantaba la mano para criticarlas?, o ¿Simplemente la comunidad hace mucho escandalo por detalles insignificantes?

Sitios donde se comenta sobre Kobe:

Ayende - Kobe – In the nuts & bolts and don’t really liking it
Karl Seguin - Kobe - Oh Dear Lord Why?!
Kazi Manzur - KOBE – MS NEW WEB 2.0 RESOURCE KIT IN ASP.NET MVC AND MY THOUGHTS
Phil Haack - Code Sample Taxonomy


jueves, abril 09, 2009

StackOverflow Hispano

El día de hoy Fabian Figueredo (@fabianober), lanzo el reto en Twitter a @rene_silva, @diosmercurio, @ebersys, @ajlopez y un servidor @mario_chavez para unir esfuerzos y aventurarnos en el desarrollo de StackOverflow Hispano.

StackOverflow, para los que no tengas idea de que se trata, es un sitio de Internet cuya función principal, es ser un lugar colaborativo para programadores de software en donde se puedan realizar preguntas y recibir respuestas por parte de la comunidad, sin importar la plataforma o lenguaje.


Este sitio desde su creación ha sido recibido con buena aceptación, y me atrevo a decir, sin temor a equivocarme, que es definitivamente uno de los lugares a dirigirse cuando tengamos alguna duda sobre programación.

StackOverflow, alcanzo un buen nivel de popularidad por su facilidad de uso y la cantidad de usuarios que responden a las preguntas, pero también su popularidad se debe a que sus creadores son Joel Spolsky y Jeff Atwood, pero por si fuera poco, decidieron desarrollar StackOverflow en el incipiente ASP.NET MVC, volviendose en la primera aplicación grande que se ejecuta en el Framework MVC de Microsoft, y por lo tanto se volvió de la noche a la mañana una aplicación de referencia e inspiración para los desarrolladores de .NET.

Desde mi punto de vista muy personal sobre el llamado de Fabian, a mi me parece buena idea tener una herramienta de colaboración similar en el mundo Hispano, aunque como lo apunto @ebersys en Twitter, muchos desarrolladores hispanos, buscan información en recursos en ingles, por lo tanto cabe la posibilidad de que simplemente se ignore este esfuerzo por tener contenido en nuestro idioma.

Sobre la parte tecnológica de este desarrollo, creo que Fabian quiere realizarlo en ASP.NET MVC, idea que no me desagrada, pero si se usara otra tecnología, también para mi no habría problema alguno, ya que lo realmente importante, desde mi punto de vista, es contar con esta herramienta de colaboración.

Ustedes que opinan o que sugerencias tienen sobre este esfuerzo que aun esta en proceso de gestión.


Congreso Innov@Tec 2009

El Instituto Tecnológico de Tijuana, esta anunciando el Congreso Nacional Innov@Tec 2009, a llevar se a cabo los días 12 y 13 Mayo del presente año, en el Teatro Calafornix, en las instalaciones del campus Tomas Aquino.

El congreso esta enfocado a las áreas de de Ingeniería en Sistemas Computacionales y Licenciatura en Informática.

Aun no hay un listado sobre las conferencias que se van a llevar a cabo, pero espero poder tener mas información al respecto una vez concluido el puente vacacional de semana santa.


sábado, abril 04, 2009

ALT.NET

Desde principios del 2007 en las comunidades de Microsoft, principalmente es Estados unidos, se comenzó a generar un movimiento: ALT.NET, el cual de manera muy simplista me atrevo a decir que propone una mente abierta sobre las cuestiones de desarrollo y el uso de principios y practicas sobre el uso de herramientas, es decir las herramientas pasan a un segundo plano, ya sean de Microsoft, terceros u open source.

Algunos grupos dentro de Microsoft no han visto con malos ojos este movimiento, de hecho la primera presentación de ASP.NET MVC, cuando aun era un concepto se realizo en un evento Open Spaces de ALT.NET.

Realmente no voy a abundar sobre este tema ya que me encontré un excelente post de Jorge Gamba al respecto, en donde él realiza una completa descripción del concepto ALT.NET, y aparte propone la creación de ALT.NET Hispano, idea que en lo personal me parece excelente, mientras tanto ya hay un grupo de discusión en Google: ALT.NET Hispano.

Por cierto en este momento en Huston se esta llevando a cabo el evento ALT.NET Huston y se están transmitiendo grabado las sesiones para Internet: http://www.kyte.tv/ch/272888-altnethouston


miércoles, abril 01, 2009

ASP.NET MVC 1.0 es open source

El día de hoy Microsoft ha anunciado que su oferta de patrón MVC para el desarrollo de aplicaciones Web, ASP.NET MVC 1.0, ha sido liberado bajo la licencia MS-PL, la cual es compatible Open Source.

Esto implica que cualquiera puede tomar el código fuente, hacerle cambios, realizar un "fork" o adaptarlo/compilarlo para que se ejecute legalmente en las plataformas soportadas por Mono.

No me extrañaría que Miguel de Icaza y su equipo anuncie en un periodo corto el soporte oficial para el ASP.NET MVC

Nota: No es una broma de April fools

miércoles, marzo 18, 2009

ASP.NET MVC 1.0

Después de que la versión final del ASP.NET MVC 1.0 no fue liberada a finales de Febrero como se había mencionado, no era un secreto que iba a ser liberada en el Mix09, y así fue.

Ya se puede descargar la versión 1.0 del ASP.NET MVC.

Ademas aquí hay una lista de aplicaciones de ejemplo.

Y en caso de que alguien se lo hubiera perdido, aquí se puede descargar todo un capitulo del libro "Professional ASP.NET MVC 1.0", donde explica como crear el sitio nerddinner.com


martes, marzo 10, 2009

Comparación del ciclo de vida de una página ASP.NET Webforms y ASP.NET MVC

El ciclo de vida de una página de una aplicación ASP.NET Webforms

  1. Page.OnPreInit
  2. MasterPageControl.OnInit (for each control on the master page)
  3. Control.OnInit (for each contol on the page)
  4. MasterPage.OnInit
  5. Page.OnInit
  6. Page.OnInitComplete
  7. Page.OnPreLoad
  8. Page.OnLoad
  9. MasterPage.OnLoad
  10. MasterPageControl.OnLoad (for each control on the master page)
  11. Control.OnLoad (for each contol on the page)
  12. Page.OnXXX (control event)
  13. MasterPage.OnBubbleEvent
  14. Page.OnBubbleEvent
  15. Page.OnLoadComplete
  16. Page.OnPreRender
  17. MasterPage.OnPreRender
  18. MasterPageControl.OnPreRender (for each control on the master page)
  19. Control.OnPreRender (for each contol on the page)
  20. Page.OnPreRenderComplete
  21. MasterPageControl.SaveControlState (for each control on the master page)
  22. Control.SaveControlState (for each contol on the page)
  23. Page.SaveViewState
  24. Page.SavePageStateToPersistenceMedium
  25. Page.OnSaveStateComplete
  26. MasterPageControl.OnUnload (for each control on the master page)
  27. Control.OnUnload (for each contol on the page)
  28. MasterPage.OnUnload
  29. Page.OnUnload

Ciclo de vida de una página de una aplicación ASP.NET MVC

  1. La tabla de routeo es creada
  2. El UrlRoutingModule intercepta la solicitud
  3. Se ejecuta el MvcHandler
  4. Se ejecuta el Controller
  5. El método RenderView es ejecutado

Más información
ASP.NET Page Events Lifecycle
Stackoverflow
Stephen Walther blog

lunes, marzo 09, 2009

Video y fotos del Web 2.0 CoffeCamp TJ

Gracias a @gabo que publico el video y algunas fotos del Web 2.0 CoffeCamp TJ en la página de la Comunidad Tijuana.NET.


También en la página del evento en Facebook se están agregando los recursos del evento.

También @ilescasp ha publicado en si Facebook algunas fotos que tomó.


¿Que podcasts escuchas?

Hoy en día es mas común el uso de medios independientes como podcast en lugar de los medios tradicionales como la radio.

Parte de esto es que generalmente un podcast se enfoca únicamente sobre un área o tema en particular, por lo tanto es muy sencillo el subscribirse a un podcast con contenido que realmente nos interesa.

Existen podcast de ocio, noticias, música, y áreas de especialidad como:

  • Diseño gráfico
  • Fotografía
  • Desarrollo de aplicaciones
  • y otras mas

Los podcast ademas ofrecen la versatilidad de poder descargar se al computador e inclusive a nuestro teléfono móvil, para así escucharlo cuando deseemos.

En mi caso en particular principalmente los podcasts que escucho están relacionados con desarrollo de software. La imagen al inicio del post es mi iTunes de la sección de podcasts, ¿Y ustedes que podcasts escuchan o recomiendan?


domingo, marzo 08, 2009

Web 2.0 CoffeCamp Tj


El pasado sábado 7 de Marzo, se llevo a cabo el primer Web 2.0 CoffeCamp en el D'Volada Café de Plaza Dorada en Otay, lugar del cual literalmente nos apoderamos por un espacio de poco mas de 2 horas.

Al evento asistieron @gabo, @webcool, @ilescasp, @agamenong, @bitfon, @mariohcornejo, @fcastellanos, @jesus_chavez, Carlos Hurtado, Jessica y @mario_chavez, ademas en linea creo que llego un punto en donde había como 10 personas mas, de los que recuerdo @stanmx, @angelnyo, ryozero y velocitj.

El inicio se retardo un poco por "problemas técnicos", el Internet en el lugar no funcionaba muy bien que digamos y la idea era transmitir el evento en vivo, ademas de la grabación de audio y video. Afortunadamente @bitfon nos presto un modem/router 3G con el cual pudimos sortear la situación y gracias a @gabo y @webcool se grabo audio y video, el cual una vez que este procesado, se va a hacer disponible.

A continuación voy a realizar una pequeña reseña de lo que ocurrió el día de ayer, aunque para un detalle mas completo hay que esperar que el audio y video este disponible.

El inicio fue con la pregunta obligada, ¿Que es el web 2.0?, lo interesante es que se pudo obtener la perspectiva de gente del área de desarrollo de sistemas y de diseñadores gráficos, y aunque no legamos a un acuerdo al 100% si se pudieron identificar algunas características en común:
  • Enfocadas principalmente a redes sociales
  • Twitter
  • Facebook
  • MySpace
  • YouTube
  • Flickr
  • Los usuarios participan en la creación del contenido
  • Co-participan en el contenido ofrecido, por lo tanto el sitio les es mas interesante
  • Digg
  • Enchilame
  • Ofrecen una mejor experiencia de usuario
  • Estándares Web
  • Intercambio de datos XML, JSON
  • Comunicación Asincrona
  • Lógica del lado del clientes, JavaScript
  • Se ofrecen como SaaS (Software as a Service)
Otras características que se mencionaron que pueden ser parte, pero no precisamente implican Web 2.0 son:
  • Botones redondos y diseño de letras grandes y logotipos brillosos
  • Ofrecer un API para, llevando las aplicaciones mas alla del Web
También se comento si las aplicaciones RIA (Rich Internet Applications), como las aplicaciones en Flash y Silverlight deberían ser consideradas Web 2.0 o no.

Posteriormente se discutió del modelo de negocio de las aplicaciones Web 2.0, ya que muchas no cuentan con un modelo definido y sobreviven de "Venture Capitals".

Se menciono que la publicidad es una forma de monetizar, pero no es la única forma, algunas de las aplicaciones tienen versiones lite gratuitas y la funcionalidad avanzada se ofrece con un costo el cual generalmente suele ser accesible.

También se comento que hay empresas que están utilizando a estas aplicaciones para promocionar sus productos y servicios, formando así un ecosistema económico.

Igual se comento que no por todas las aplicaciones Web 2.0 que usamos estaríamos dispuestos a pagar por usarlas, aunque el costo sea muy pequeño, de forma general coincidimos que pagaríamos por las aplicaciones que nos ofrecen un beneficio a forma de servicio, y las aplicaciones de ocio las seguiríamos usando si siguen siendo gratis.

Otro punto fue la parte tecnológica, comentamos que si para hacer una aplicaciones Web 2.0 se debe de utilizar una tecnología en particular o no, el consenso fue que no, pero la tendencia de aplicaciones Web 2.0, es que están desarrolladas en plataformas de lenguajes dinámicos, como PHP y Ruby On Rails. Java y .NET prácticamente no figuran en este ámbito. Desde el punto de vista de los diseñadores mencionaron que, por ejemplo, PHP les ofrece un mejor control sobre el HTML generado a diferencia de .NET.

Después tratamos de conjuntar una lista de aplicaciones Web 2.0 en México y prácticamente nos fue imposible, el único sitio que se menciono fue Enchilame. Buena parte de la conversación se nos fue en mencionar la dis-funcionalidad de los sitios Web de los bancos "Mexicanos", sitios de Gobierno, sitios web de empresas que no ofrecen ningún valor a sus clientes.

Se cuestiono sobre el movimiento Web 2.0 en México, aunque existen movimientos como Café de Altura y Tequila Valley, el desarrollo Web 2.0 es poco visible, ademas de que no existe una forma de acercase a inversionistas si es que los hay. También se comento que es importante seguir el modelo de Estados Unidos, conocido como "Startups", es decir empezar el desarrollo de la aplicación y tratar de ponerla en linea con la finalidad de una vez teniendo el producto funcionando, quizás así sea mas fácil el obtener financiamiento.

Finalmente se discutió si se debe de "clonar" aplicaciones exitosas en Estados Unidos o no, el consenso fue que una copia fiel, no es buena idea, lo mejor es tomar ese "know-how" y complementarlo con necesidades especificas de la zona y si la idea a final de cuentas no es muy original, entonces evitar tratar de competir con la aplicaciones original y mejor enfocarla al mercado hispano.

En general esto fue lo que se comento durante la platica, como recomendación, se comento que es necesario vencer la apatía, no renunciar todavía a sus trabajos de día, pero tratar de llevar nuestras ideas para que se materialicen y con un poco de suerte poder crear un negocio exitoso en Internet.

Estén pendientes a las fotos, audio y video a publicarse en los próximos días.
Gracias otra vez por haber participado y compartido con nosotros.

viernes, marzo 06, 2009

DevLab: TDD, pruebas de unidad.

En el desarrollo de software, ya sea usando metodología "formales" como la ingeniería de software o metodología ágiles, incluyen una fase que se denomina de pruebas.

Hay diferentes forma de realizar las pruebas, una de ellas, y quizás la menos optima, es darle la responsabilidad al programador que esta implementando la funcionalidad a que el mismo realice las pruebas.

Otra forma de hacer es tener un equipo formalmente de aseguramiento de calidad o Q&A.

Ambas opciones generalmente no son pruebas automáticas o que nos aseguren que la mecánica de la prueba va a ser siempre igual o que accidentalmente se omita alguna parte de la prueba.

El resultado derive en que cabe la posibilidad de que nuestro programa presente "bugs" al momento de llegar a producción.

Ante esta situación en la industria de desarrollo de software ha ideado practicas para poder realizar pruebas automáticas sobre el software.

Una de estas practicas es la llamada Pruebas de Unidad o Unit Testing. Las pruebas de unidad consisten en pequeños bloques de código que se ejecutan para probar el código de nuestra aplicación.

Las pruebas de unidad tiene como alcance el probar únicamente la funcionalidad propia de clase en cuestión y no su interacción con otras clases del sistema.

Como una extensión a la realización de pruebas de software, la Técnica Desarrollo Dirigido por Pruebas o Test Driven Development (TDD), nos indica que "alguien" tiene que escribir las pruebas de nuestro código a partir de las especificaciones del mismo, antes que esa funcionalidad sea implementada. Esto se debe a que el objetivo de TDD es dual, primero al escribir las pruebas para código que no existe, estamos realizando el diseño del software que vamos a construir y el segundo objetivo es que las pruebas realizas obedecen a una especificación, por lo tanto es posible identificar en que parte de nuestro software se implemento la especificación requerida.

Referencias


DevLab: TDD, pruebas de unidad from Mario A Chavez on Vimeo.

Material del Screencast

lunes, marzo 02, 2009

Fútbol, matemáticas y otras mentiras

Futbol picanteHace un par de días viendo el programa de Fútbol Picante de ESPN, los comentaristas criticaban la forma en como asignan los partidos a cada arbitro, ya que igual ponen a novatos en partidos donde errores arbitrales pueden causar controversia - por ejemplo partidos donde estén jugando equipos con probabilidades de descender a la 1ra división A -.

En los comentarios se decía que la comisión de árbitros - De la liga Mexicana de Fútbol - en "teoría" no asigna a los árbitros manualmente, para eso existe un "ordenador" que se encarga de asignar a los árbitros, pero los comentaristas se preguntaban cual es el criterio que utiliza dicho "ordenador" para realizar la selección.

Ya que mencionaron que no parece que utilice la información del torneo ni el desempeño previo de los árbitros para decidir que arbitro debe participar en que partido.

Y bueno uno que no tiene nada que hacer, empece a racionalizar sobre como esta funcionando ese "ordenador" y como debería de funcionar.

Tomando como premisa los comentado por los participantes del programa, donde no se puede apreciar un patrón en la asignación de los árbitros, la primera idea que me viene a al mente, es que posiblemente este usando un algoritmo de números pseudo-aleatorios.

Existen varios algoritmos para la generación de numero pseudo-aletorios, en donde se busca que los números generados a partir de una semilla, estén distribuidos lo mas uniformemente posible en una distribución normal, es decir que los números no estén "cargados" hacia algún lado, que tengan un periodo largo, es decir que no se repitan frecuentemente y que sean reproducibles una y otra vez con la misma semilla.

Uno de estos algoritmos es el Congruencial Mixto Lineal, es cual utiliza el numero previamente generado para la generación del numero siguiente:

pseudo

Donde:
X0 = es la semilla ó numero inicial (X0 > 0)
a = el multiplicador (a > 0)
c = es la constante aditiva (c > 0)
m = el modulo (m > X0, m > a y m > c)

Para mas información ir a "Generador congruencial lineal mixto"
Este tipo de generadores se emplean en el desarrollo de aplicaciones de Simulación para eventos discretos, los cuales permiten "modelar" escenarios mediante sistema de computo.

Volviendo al tema principal, si tal "ordenador" es el que asigna los árbitros y utilizar simplemente la asignación aleatoria a partir de numero pseudo-aleatorios, entonces las asignaciones de los árbitros van a seguir siendo como hasta ahorita "erráticas" e ignorando la gran cantidad de información historia que se genera partido tras partido durante un torneo de fútbol.

Si lo que se busca es tomar esa gran cantidad de información disponible y que sistema de computo la analice para determinar cuales son los árbitros mas óptimos para cada partido, entonces estamos entrando en el campo de la Inteligencia Artificial.

La inteligencia Artificial en términos simples, consiste en hacer que un programa de computo funcione lo mas parecido posible al razonamiento humano. Por ejemplo áreas como la lógica difusa son utilizadas para resolver problemas que por medio de algoritmos seria muy complejo describirlos, pero sin embargo se cuenta con mucha información sobre el problema, por lo tanto se utiliza un razonamiento "casi" humano para tomar una decisión a partir de los datos disponibles.

Para hacer uso de IA, se parte de que quizás la información sea necesario "normalizarla", es decir atenuar picos que se van a extremos, el siguiente paso consistiría en modelar una red neuronal en base a la arquitectura elegida para nuestra red neuronal.



En la entrada de los datos a nuestra red neuronal se asigna un peso especifico para cada tipo de dato - por ejemplo a la mejor tiene mas peso especifico el desempeño de un arbitro durante los partidos del torneo, que el peso que tiene el desempeño en el partido anterior, ya que un partido malo lo puede tener cualquiera - los valores de entrada y los pesos para cada tipo de datos conforman lo que se conoce como la función de propagación, esta función se encarga de combinar las entrada y los pesos; una función de propagación común es la sumatoria de los productos entrada-peso.

Activacion

Donde w representa el vector de peso de la entradas y x el vector de entradas a la red neuronal. Una vez que se calcula el resultado de la función de propagación, este valor se pasa a la función de activación o transferencia, la cual puede ser una función lineal, pero es mas común el uso de funciones sigmoidales - logaritmicas -

activacion sig

El resultado de la función de activación se puede comparar con un valor de umbral, para determinar si los datos entrada activan la neurona o no.

La asignación de los valores correctos de los pesos generalmente se hace de manera iterativa, donde a la red neuronal se van asignando valores de entrada, denominados grupo de entrenamiento, y en base al resultado se ajustan los pesos, con la finalidad de ir "creando conocimiento" en nuestra red; a este proceso se le conoce como entrenamiento de la red neuronal.

Una vez que a red ha cumplido con su proceso de entrenamiento, ahora si se le asignan datos de entrada para que con el conocimiento adquirido nos ayude a tomar decisiones factibles, es decir tomar la información del torneo actual, el desempeño de los árbitros y tratar de asignar al arbitro correcto para cada partido.

Aunque el concepto de redes neuronales se escuche muy de ciencia ficción y mas si lo tratamos de emplear a un problema tan vanal como el expresado en el post, la realidad es que muy probablemente utilicemos la inteligencia artificial mas seguido de lo que nos imaginamos, por ejemplo:
  • La cámara fotográfica que realiza focus automático de nuestros objetivos
  • La cámara que busca y enfoca rostros en nuestras escenas
  • La cámara fotográfica que se dispara cuando alguien sonríe
  • El programa que de gestión de fotos que reconoce rostros y nos ayuda a catalogar nuestras fotos
  • La TV HD que toma información de iluminación del programa que se esta transmitiendo e información de luz del ambiente donde se encuentra la TV para así auto-ajustar el brillo y el contraste.
Entre otros muchas aplicaciones mas. Para mas informacion sobre redes neuronales visitar:

Tarjetaroja

En fin un momento de ocio me llevo a un estado de análisis y razonamiento mas alla de lo que yo hubiese querido. Señores de la FemexFut si quieren menos criticas en los árbitros, aquí esta la propuesta de solución, ah y estoy disponible para implementarla ;)

domingo, marzo 01, 2009

Lo importante es que funcione

Hace unos días me encontré con este post titulado "Lo importante es !!! que funcione !!!" y no puede evitar recordar platicas pasadas en donde precisamente me comentaban lo mismo, "lo importante es que funcione".

Y si, en buena medida se tiene la razón, de nada sirve una aplicación que hace uso de todas las practicas y patrones si la aplicación nunca ve la luz.

Pero también existe la otra contraparte - la mencionada en el post -, en donde nos olvidamos por completo de cualquier norma o reglas implícitas o explícitas y simplemente "tiramos" código hasta hacer que nuestro programa funcione.

Ambos extremos son malos desde cualquier punto que se les observe.

La sobre ingeniera de una aplicación, solo viene a causar complejidad excesiva en el desarrollo y mantenimiento de una aplicación, esa complejidad se multiplica cuando se busca realizar cambios o simplemente darle mantenimiento a la aplicación.

El aplicar todas las buenas practicas y patrones, perdiendo de vista el objetivo final, que es el realizar un producto funcional, en tiempo y forma; solamente lleva a que el proyecto sea cancelado en algún momento, causando mal sabor de boca a los desarrolladores, ya que el esfuerzo empleado para lograr una buena aplicación no sirvió de nada, y si se es una empresa pequeña o mediana, obviamente también se refleja en un daño económico, por la perdida del proyecto y posiblemente del cliente.

El no "disponer" del tiempo para realizar un diseño y especificar una arquitectura de nuestra solución, y simplemente "hacer que funcione", desafortunadamente es algo común en las empresas pequeñas a medianas de desarrollo de software, como también en las empresas que no son TI pero tienen sus propios departamentos de desarrollo.

Buena parte de la ideología de "no perder tiempo" en el diseño, patrones y guías, viene de la necesidad de tener el producto terminado cuanto antes, ya que eso significa que se esta en posición de poder cobrarle al cliente cuanto antes, por lo tanto cualquier situación que "retrase" el tiempo de entrega se ve como un enemigo a tener los recursos económicos a tiempo en las empresas.

En las empresas no TI, desafortunadamente en muchos de los casos gente no TI compromete tiempos de desarrollo, en base a prácticamente nada, ante esta situación, pues también se piensa en "no perder tiempo" en el desarrollo y hacer que la aplicación funcione.


El argumento más común para implementar el proceso "haz que funcione", viene de la idea que para poder implementar un diseño y una arquitectura de nuestra aplicación implica "perder tiempo", quizás evitando esta parte fundamental del desarrollo de software, si sea posible tener un entregable en tiempo, pero la pregunta es: ¿A que costo?

Si bien todo software tiene un tiempo de vida antes de volverse "legacy", siguiendo la "metodología" "haz que funcione" acelera esta situación por las siguientes razones:
  • Es muy difícil entender el código, posiblemente únicamente la persona que lo desarrolló, es el que "puede" tener un entendimiento aceptable.
  • Existe una mayor posibilidad de tener "bugs" extraños y difíciles de duplicar y corregir.
  • El realizarle cambios al programa se vuelve cada vez mas complejo, porque no entendemos hasta que punto esos cambios van a afectar otras áreas de nuestro programa.
  • No hay forma de reproducir situaciones muy particulares que ocurren con nuestro software y si este inter-actua con otro mas, lo mas común es culpar al otro software.
  • Inicialmente quedamos "bien" con el cliente por entregar el software a tiempo, a la larga los errores y fallas de nuestro software nos ponen en una situación no muy buena, y si a esto le agregamos que le cobramos al cliente por arreglar nuestros "errores", pues todavía peor.

El caso es encontrar el punto medio, si como empresa de desarrollo no seguimos buenas practicas para el desarrollo de nuestras soluciones, tratar de implementarlas de un momento a otro, únicamente va a producir un desastre y volveremos a las viejas practicas al instante.

Es necesario identificar las practicas que pueden traer un beneficio mayor a nuestra organización y primeramente "evangelizar" entre nuestro grupo de desarrollo antes de siquiera intentar implementarlas, una vez que decidimos implementarlas, es importante comenzar un tanto relajados en su aplicación, una vez que el equipo se haya acostumbrado, entonces empezar a "apretar" poco a poco para que estas se cumplan.


Actualización: En el blog de Eber Irigoyen, el comenta sobre la idea de "Deuda Técnica" a este problema de únicamente hacer que funcione.

Imagén notebook MyImageCollections
Imagén diseño subWiz
Imagén de los problemas de software Ryan Coleman
Imagén Programador frustrado Sybrem A. Stuvel