Posteado por: eocampo | mayo 4, 2011

Síntomas de un diseño en rompimiento.

Hay cuatro síntomas principales que indican que un diseño se encuentra en rompimiento: Rigidez, Fragilidad, Inmovilidad y Viscosidad.

Rigidez

La rigidez es la tendencia a que el software sea difícil de cambiar. Cada cambio causa una cascada de modificaciones subsecuentes en los módulos de desarrollo. Lo que comienza como un cambio simple de dos días en un módulo se convierte en un maratón de una semana alterando módulo tras módulo.

Cuando el software muestra esta tendencia, los administradores temen permitir a los desarrolladores arreglar problemas no críticos. Esta actitud restrictiva deriva del hecho de que no saben, con ninguna certeza, cuando se terminarán las correcciones y cambios. El diseño de la aplicación empieza a requerir más y más ingenieros, éstos entran en el proceso de diseño e implementación y nunca salen de ahí.

Cuando lo temores del administrador se presentan con tal fuerza que finalmente se rehúsa a hacer cambios la rigidez ha llegado oficialmente. Por lo tanto, lo que empieza como una deficiencia en el diseño, termina por convertirse en una política administrativa adversa.

Fragilidad

La fragilidad, altamente relacionada con la rigidez, es la tendencia del software a romperse en lugares diferentes cada vez que se cambia. A veces el rompimiento ocurre en áreas que no tienen relación conceptual con el área modificada. Cada vez que el administrador autoriza una corrección, teme que el software tendrá un rompimiento en alguna forma inesperada.

A medida que la fragilidad se agrava, la probabilidad de los rompimientos se incrementa, de forma que se acerca al síntoma de rigidez visto anteriormente. Este tipo de software es imposible de mantener. Cada vez que se corrige empeora, introduciendo más problemas de los que resuelve.

Los administradores y clientes sospechan que los desarrolladores han perdido el control de su software y la credibilidad se pierde por completo.

Inmovilidad

La inmovilidad es la incapacidad de reutilizar software en otros proyectos o en partes del mismo proyecto. Normalmente ocurre que un ingeniero descubre que necesita un módulo que se comparta de forma similar a uno ya escrito. Sin embargo, también descubre que el software es demasiado grande como para tolerarlo. Así que el software simplemente es reescrito en lugar de reutilizarlo.

Viscosidad

La viscosidad viene en dos formatos: la viscosidad del diseño y la viscosidad del ambiente. Cuando se enfrentan con un cambio, los desarrolladores encuentran más de una forma de realizarlo adecuadamente. Algunos de estos mecanismos preservan el diseño original y otros no. Cuando los métodos para preservar el diseño original son más difíciles de implementar que las modificaciones que se brincan todas las políticas y reglas de diseño, entonces la viscosidad del diseño es alta. En otras palabras, es más fácil hacer las cosas mal que bien.

La viscosidad del ambiente llega cuando el ambiente de desarrollo es lento e ineficiente. Por ejemplo, si los tiempos de compilación son muy largos, los ingenieros se verán tentados a realizar cambios que no fuercen largas re-compilaciones, aún cuando estos cambios no sean óptimos desde el punto de vista de diseño. Si el control de código fuente requiere horas para checar o introducir algunos archivos, entonces los desarrolladores empezarán a realizar cambios que requieran los menores registros en el sistema de control de cambios, sin importar si el diseño se mantiene.

Estos cuatro síntomas son los signos clave de una arquitectura pobre. Cualquier aplicación que los exhiba está sufriendo de un diseño deficiente que se está destruyendo desde dentro hacia afuera.

Posteado por: eocampo | abril 24, 2011

Reflexiones de Semana Santa 2011

Esta semana santa tuve la oportunidad de acompañarla con el Libro Jesús de Nazaret del Papa (el segundo), evidentemente los oficios de la Semana Santa y el Evangelio según San Juan. Sobra decir que es un magnífico libro y que las reflexiones aún cuando muchas son profundas, Benedicto XVI nos las presenta cercanas. Por otra parte en Cuernavaca hemos estado viviendo una situación difícil debido al crimen y últimamente la sociedad ha realizado varias expresiones importantes, esto de alguna forma también influye en mi pensamiento.

Como partida iniciaré con mis reflexiones derivadas de una plática a la que asistí con el Padre Roberto Mercado del Collado sobre el ciego de nacimiento.

Primero, como muchos piensan aún hoy, se presenta la injusticia del mundo como proveniente de la voluntad de Dios: Maestro ¿Quién ha pecado para que esté ciego: él o sus padres? Por una parte el hombre no comprende a Dios y a la creación, y esto es algo que no es sólo de una época sino es de nuestro presente. Pero también hay otra parte en esto, no todo el sufrimiento viene de la naturaleza o de nacimiento, mucho viene del hombre mismo y esto es por su libertad. Como la violencia que tenemos ahora en todo nuestro país. Por esta misma cualidad que nos separa de las bestias, pero que nos puede poner por encima de ellas o por debajo de ellas. Aunque podríamos tratar de hacer múltiples teorías acerca de si Dios quiere o permite el dolor, la violencia, etc., lo que tenemos por realidad concreta es que el hombre ante la libertad de elegir, muchas veces actúa en contra de si mismo y de sus semejantes. Esto es parte de la libertad. La respuesta de Jesús es: No es por haber pecado él o sus padres, sino para que unas obras de Dios se hagan en él. La cuestión es que el actuar de Dios es también a través del hombre y de su libertad. En esto ¿Somos parte o no lo somos? El ciego al ser curado comienza a ver, y cree pero no comprende aún. Todo es nuevo para él. Los demás empiezan a notar el cambio y se extrañan hasta el punto de desconocerlo. Es cuestionado por las autoridades e incluso rechazado por su propia familia para evitar cualquier represalia. Es expulsado de la comunidad, él sabía perfectamente las implicaciones de aceptar la verdad, pero él ya es un hombre libre así que no teme. Aún así reconociendo a Jesús como profeta no ha terminado de comprenderlo en toda su dimensión. Es hasta que vuelve a encontrarlo, después de ser expulsado, cuando Jesús lo cuestiona ¿Tú crees en el hijo del Hombre? luego le contesta ¿Y quién es, Señor, para que crea en él? Jesús le dijo: Tú lo has visto, y es el que está hablando contigo. El entonces dijo Creo, Señor. (Jn 9 35-38)

Esta transformación es la más dificil para el hombre porque vivir libre, conforme la verdad, en concordancia con el pensamiento interior es quedarse sólo, es el último camino y el camino de la contradicción, donde se llega a la exigencia máxima que parte del corazón mismo. Reconocerse y entrar en comunión con Cristo es volver a nacer a una vida nueva.

El ciego de nacimiento representa el proceso de llegar a la verdad en Jesús. Primero necesita un encuentro con el hombre perfecto y en la medida que empieza a reconocerlo como profeta y a entender su mensaje llega a la transformación de su vida a un punto tal que no existe el regreso, porque ahora también es él testigo de la verdad. Esto no es algo lejano a nuestra vida, es por demás algo diario. El cristiano no puede negar la Verdad porque la conoce, no puede negarla en los actos pequeños y grandes de su vida. La Verdad no es una cuestión relativa como esquiva el mismo Pilato.

Si tomamos de Jn 18 desde el versículo 36 al 38, ante los cuestionamientos de Pilato sobre la realeza de Jesús, leemos:

Jesús contestó: Mi realeza no procede de este mundo. Si mi fuera rey como los de este mundo, mis guardias habrían luchado para que no cayera en manos de los Judíos. Pero mi reinado no es de aquí. Pilato le preguntó: Entonces ¿Tú eres rey?, Jesús respondió: Tú lo has dicho, Yo soy rey. Yo para esto he nacido y para esto he venido al mundo, para ser testigo de la verdad. Todo el que es de la verdad, escucha mi voz.

Benedicto XVI indica en su segundo libro de Jesús: Con estas palabras Jesús ha creado un concepto absolutamente nuevo de realeza y de reino … Junto con la clara delimitación de la idea de reino (nadie lucha, impotencia terrenal), Jesús ha introducido un concepto positivo para hacer comprensible la esencia y el carácter particular del poder de este reinado: la verdad (pag 223). Vale la pena terminar toda la reflexión de Benedicto XVI pero sería muy extenso y está mucho mejor explicada en el libro así que los que tengan la oportunidad de leerlo, se los recomiendo. En mi reflexión personal me llama la atención nuestra cuestión como hombres y sociedad: ¿Cuántos podemos hablar y defender la verdad pero no hacer nada al respecto en nuestro trabajo y vida diaria? ¿Cuántos permitimos o nos hacemos de la vista gorda en las cuestiones que “son del mundo”?

Esta es la cuestión en realidad acerca del reino y su diferencia con el hombre también apoyándome en el Papa:

La cruz es revelación. Pero no revela algo, sino a Dios y a los hombres. Manifiesta cómo es Dios y cómo son los hombres. La filosofía griega preanuncia extraordinariamente esta idea: la imagen platónica del justo crucificado. En su obra sobre el estado se pregunta el gran filósofo Platón cómo podría obtenerse en este mundo un hombre completa y plenamente justo. Llega a la conclusión de que la justicia de un hombre sólo llega a la perfección cuando el mismo asume la apariencia de injusticia sobre sí mismo, ya que entonces muestra claramente que no sigue la opinión de los hombres, sino que se orienta a la justicia por amor a ella. Así, pues, según Platón, el verdadero justo de este mundo es el incomprendido y el perseguido. Platón no duda en escribir: “dirán, pues, que el justo en esas circunstancias será atormentado, flagelado, encadenado y que después de esto lo crucificarán …”. Este texto, escrito 400 años antes de Cristo, impresiona profundamente a todo cristiano. La seriedad del pensamiento filosófico ha puesto de manifiesto que el justo en el pleno sentido de la palabra tiene que ser el crucificado. Se ha vislumbrado así algo de la revelación del hombre ofrecida en la cruz. (Ratzinger Introducción al Cristianismo, p. 254-255)

La Verdad te compromete como ser humano en todas dimensiones, el que ha comprendido, poco a poco va transformando su vida de acuerdo a esa Verdad, que es el mismo Cristo. Pero Dios es tan grande y tan profundo que siempre hay aspectos de nuestra vida en donde seguiremos profundizando, cambiando y mejorando. Mientras más cerca estemos de la Verdad más comprendemos la grandeza del amor, el valor del sacrifico, sobre todo en las pequeñas cosas de nuestra vida diaria, que aparentemente parecen ser insignificantes pero es ahí precisamente donde comienza la lucha diaria para ir venciendo nuestro YO dejando paso a Cristo que da la fuerza y el sentido de una vida llena de riqueza que busca llegar a su plenitud en la Verdad.

El hombre está llamado a alcanzar su perfección y a buscar la verdad. Hoy el mundo nos presenta una tesis totalmente inversa, a través del consumo, el hombre debe buscar el máximo de placer o de satisfacción sin importar si lo necesita o si lo quiere incluso. Al igual que Pilato muchos quieren evitar enfrentar la Verdad creando un relativismo en ella. “¿Y qué es la verdad?”.

Regresando de nuevo a la Introducción al Cristianismo termino la cita, es grande, pero muy relevante:

El hecho de que cuando apareció el justo por excelencia fuese crucificado y ajusticiado nos dice despiadadamente quién es el hombre: eres tal que no puedes soportar al justo; eres tal que al amante lo escarneces, lo azotas, lo atormentas. Eso eres, porque, como injusto, siempre necesitas de la injusticia de los demás para sentirte disculpado; por eso no necesitas al justo que quiere quitarte la excusa; eso es lo que eres. Esto es lo que ha resumido Juan en el ecce homo de Pilato; fundamentalmente quiere decir eso son los hombres, eso es el hombre. La verdad del hombre es su carencia de verdad; el salmo dice que el hombre es engañoso (Sal 116,11); manifiesta así lo que el hombre es realmente. La verdad del hombre es que él siempre se levanta en contra de la verdad.

El justo crucificado es el espejo que se presenta ante los ojos del hombre para que vea claramente lo que es, mas la cruz no sólo revela al hombre, sino a Dios. Dios es tal que en este abismo se ha identificado con el hombre y lo juzga para salvarlo. En el abismo de la repulsa humana se manifiesta más aún el abismo inagotable del amor divino. La cruz es, pues, el verdadero centro de la revelación, de una revelación que no nos manifiesta frases antes desconocidas, sino que nos revela a nosotros mismos, al ponernos ante Dios y a Dios en medio de nosotros.

En concreto, en la vida diaria nos enfrentamos a situaciones que nos piden coherencia con la Verdad y muchas veces creyendo que no son tan importantes las dejamos pasar de largo, sin darnos cuenta que estamos alejándonos de la perfección. Como por ejemplo, cuando defendemos la ecología y al planeta y terminamos pensando que un árbol tiene más derechos que un niño en el vientre de su madre. O somos muy tolerantes y respetuosos con todas las formas de pensar, pero condenamos cualquier expresión religiosa considerándola retrógrada. Creemos que rechazamos la violencia, pero insultamos al vecino o al que no nos deja pasar cuando vamos al volante. Nos quejamos de los gobernantes, pero no estamos dispuestos a asumir ninguna responsabilidad social. Pensamos que los salarios son muy bajos, pero nos creemos justos cuando nosotros pagamos lo que exige la ley, sin esforzarnos demasiado por pelear por un sueldo justo para nuestros subordinados o empleados.

Los grandes cambios empiezan en las cosas pequeñas y dentro de nuestra vida el gran compromiso es hacer de esas cosas “insignificantes” el inicio del cambio que necesita la sociedad. No podemos pelear por una sociedad justa y equitativa sino empezamos a cambiar primero nosotros. Sólo a través de un verdadero compromiso de vida personal podremos ser luz en nuestra sociedad para poder impulsar y ser parte de los grandes cambios. Esto será una utopía mientras el hombre no esté dispuesto a abandonar los criterios del mundo y fijar su mirada en lo alto.

Finalmente, no hay que luchar por la verdad. Hay que Ser en la verdad, en cada instante, en cada gesto.

Posteado por: eocampo | abril 20, 2011

Código Abierto o Socialización del Conocimiento

English

Estoy convencido que una de las grandes revoluciones en la industria del software ha sido el código abierto u “open source”. No sólo por las oportunidades y los nuevos modelos de negocio que ha introducido sino por la revolución social a la que apoya.

Hoy vivimos en un mundo altamente comunicado, donde cada vez hay menos barreras impuestas por la distancia, por las culturas o el idioma. Más que nunca es importante que nosotros, los seres humanos, tengamos mayor disposición para la ayuda mutua y para resolver los problemas mundiales.

Siempre he creído que si otras industrias empezaran a liberar el conocimiento y hacerlo propiedad de todos tendríamos un mundo muy diferente. Así ha sido siempre en las matemáticas, en donde se reconoce al autor del nuevo conocimiento, pero cualquiera puede aprovecharlo de inmediato.

Aún cuando el desarrollo de las matemáticas es y ha sido siempre libre, la aplicación de las mismas puede ser patentado, lo cual es perfectamente comprensible en su tiempo y espacio. Esto también ha permitido en cierta medida capitalizar y extenderla innovación tecnológica.

¿Cuál será el modelo que prevalecerá en un futuro? ¿Los medicamentos serán algún día también abiertos? ¿Las industrías se ayudarán entre si para encontrar nuevos medicamentos y buscarán un modelo económico fuera de las patentes? ¿Esto será sustentable? ¿Qué pasará con otras industrias como la automotriz, construcción, etc?

¿Qué podemos aprender de las matemáticas y de la industria de software? Al final no parece detenerse la innovación sino incluso hacerse más competitiva.

Un buen amigo mío me dijo, es la etapa de la socialización del conocimiento y el mejor ejemplo que te doy es Wikipedia.

¿En realidad estamos alcanzando la socialización del conocimiento?

Posteado por: eocampo | abril 4, 2010

Visión por Computadora

English

Me parece que la visión por computadora no tiene hoy esa “aurea” de magia y grandeza de hace unos años pero ahora si tiene mucho de aplicación práctica. Si recuerdo mis años en la universidad cuando junto con algunos amigos intentábamos obtener algunas ventajas las nuevas funciones matemáticas del Pentium MMX o utilizar las tarjetas Voodoo y las librerías de glide para hacer algunos procesamientos con la técnica de Douglas-Peucker entre otras y lo comparo con lo que tenemos hoy, entonces me siento algo impresionado, no tanto por el avance en el campo sino por su simplificación y acercamiento a la utilización práctica. Hoy no se necesitan para los usuarios las matemáticas, toda la teoría de matrices, etc y además prácticamente cualquier computadora puede utilizarse para esto.

Creo que lo más importante de todo esto es que ahora hay buenas empresas y algunos emprendedores por ahi que están empezando a construir negocios muy interesantes en donde antes sólo existía el interés académico.

Microsoft por ejemplo siempre tuvo investigación en el campo de la visión, e incluso tenía algunas librerías por ahí, pero ahora está haciendo negocios con compañías menores para uno de sus mejores productos, el XBOX 360, esto gracias a que la compañía “pequeña” se enfocó en tener la mejor tecnología y esto le permitió ser parte de un producto con mayor distribución y alcance de mercado. Esta puede ser una gran oportunidad para emprendedores o compañías que claramente tienen una estrategia orientada a una tecnología única en particular.

Para el que tenga algo de interés en ese tipo de compañías pueden checar por ahí a PrimeSence y a Seeing Machines, aunque hay muchas más.

Inglés

Recientemente tuve una revisión de código de un proyecto de uno de mis colegas en el trabajo y me encontré esta implementación:

public sealed class TheClass {
   private TheClass() {}
   private static _theClass value;
   private static object obj = new Object();
    public static Instance Value {
          get {
                 if (TheClass.value == null) {
                        lock (syncRoot) {
                               if (TheClass.value == null) {
                                      TheClass.value = new TheClass();
                               }
                        }
                 }
                 return TheClass.value;
          }
   }      
}

Sí, estamos hablando del clásico patron “Singleton”, pero no implementado de la forma más propia, o más importante, de la forma más segura. Esta implementación podría permitir que se instancie doble la clase en algún punto. En resumen yo recomendaría al menos modificar el campo _theClass marcandolo como “volatile”. En realidad esta no es la única manera y no necesariamente funciona en todas las plataformas, así que buscando en Internet para ver que más información nueva existía del tema me encontré algunas variantes interesantes así que para los que quieran disfrutar de una lectura de bajo nivel ahí les van las ligas:

volatile and MemoryBarriers
Double-checked locking in .net at Stackoverflow

Alois Kraus incluso muestra el código a nivel de ensamblado!
Lazy Vs Eager Init Singletons / Double-Check Lock Pattern

http://www.yoda.arachsys.com/csharp/singleton.html

Por último, no podía faltar, La implementación oficial del patrón publicado por Microsoft

Inglés

Como lo habrán notado no se puede serializar este Tipo. Esto es por dos razones; la primera sus clases base no están marcadas con el atributo [Serialize], la segunda y más importante, la clase tiene dependencias con recursos no administrados y tiene que mantener la conexión hacia ellos. Así que aún utilizando los trucos más obscuros podríamos llevar esta clase al cliente puesto que esperaría poder conectarse al Active Directory, y finalmente si esto fuera posible perdería todo el sentido. Si uno puede conectarse al Active Directory desde el lado cliente pues sería probablemente más simple conectarse desde el principio al AD y no ha nuestro servicio en el back end.

Así que si únicamente se necesita serializar los datos o algunos de ellos de la información de UserPrincipal lo más recomendable sería utilizar el patrón memento.

Si tenemos muchas propiedades que establecer y no nos importa mucho el acoplamiento entre la clase memento y la origina ( por ejemplo si la clase memento se va serializar a través de un web service de forma que para el cliente sólo van a sobrevivir las funciones y propiedades públicas) podemos agregar un constructor interno que reciba como parámetro la clase original:

[Serialize]
public class UserInfo
{
  private string displayName;
  ...

  public UserInfo()
  {
  }

  internal UserInfo(UserPrincipal user)
  {
      this.displayName = user.DisplayName;
      ...
  }
}

De esta forma podemos modificar nuestro valor de retorno creando el memento al momento:

return new UserInfo(user);
Posteado por: eocampo | febrero 12, 2010

Ludwig Wittgenstein

Inglés

¿Sería posible que algunas de las teorías iniciales de Ludwig Wittgenstein pudieran utilizarse para construir sistemas que puedan presentarle al usuario final una forma organizada de ver las relaciones y expresiones al rededor de sus “sujetos informacionales” como los son, contactos, notas, correos, música, etc?

Posteado por: eocampo | enero 28, 2010

Own Cloud

Inglés

Este proyecto, Own Cloud, puede ser una excelente iniciativa y creo que podría ser la cuna de muchos proyectos nuevos e interesantes. Aún están formándose las primeras ideas así que vale la pena participar.

Posteado por: eocampo | enero 11, 2010

Jeff Atwood Una Democracia de Netbooks

Inglés

No puedo estar más en acuerdo con Jeff Atwood en su post: A Democracy of Netbooks.

Referencias:
http://www.codinghorror.com/blog/archives/001318.html

Posteado por: eocampo | diciembre 11, 2009

My nueva Netbook

Inglés

Estaba en la búsqueda de una Netbook pero antes de que pudiera decidir cual comprar tuve la suerte de ganarme precisamente una Acer Aspire One D150. Así que aún cuando no era precisamente el modelo que tenía en mente creo que siendo gratis puedo vivir con eso.

Uno tiene que acostumbrarse al teclado porque es el modelo con las teclas más pequeñas del mercado pero realmente no me tomó mucho tiempo acostumbrarme y ahora ya tengo muy buena velocidad de escritura. Este modelo es mucho mejor que la primera Acer Aspire One (mi Tía tiene una así que pude compararlas). Lo único que le agregué fue memoria para que quedara con 2 GB de RAM y en rendimiento es sorprendente lo que este pequeño modelo puede hacer.

Older Posts »

Categorías