Diego's profileZonaDiegumPhotosBlogListsMore ![]() | Help |
|
August 22 Objetos Inmutables: Se Mira y No Se TocaLa idea de este post surgió de casualidad, por una discusión que nada que ver -o, en realidad, aparentemente nada que ver- en el Foro de Arquitectura MSDN El que abría el debate preguntaba si era objetable adoptar como estándar de constructores de clase la llamada al constructor base, es decir el clásico
La discusión siguió y no viene al caso reproducirla (está disponible haciendo click acá si te interesa), pero la parte que yo quiero destacar, la que me pareció seria, es que -aunque el autor no necesariamente afirmaba pensar eso- todas las clases heredables tendrían que incluir el constructor por defecto (así se llama al constructor sin parámetros)
El problema de que una norma de buena programación conlleve a que todas las clases -al menos las heredables- lleven un constructor por defecto choca de frente con la posibilidad de tener clases inmutables (immutable classes) Qué son estas clases, para qué podríamos quererlas? Te lo voy a ilustrar con un ejemplo: Imaginate que estás trabajando en un proyecto grande donde tu equipo se encarga de codificar una parte y otros equipos se hacen cargo de otras partes, etc Suponete que tu equipo va a generar una API financiera que otros equipos van a usar, pero sin abusar (attenti, ahora te explico). Tu API, a grandes rasgos, consiste en una clase principal llamada Cotizador, con un método Cotizar() de las siguientes características
Estimo que los nombres de las propiedades de ICotizacion son autodescriptivos. La interfaz prevé un indexador sobre las distintas cuotas, cuyas propiedades (de nuevo read-only!) son
En este punto no falta quien me pueda tildar de exagerado, de que alcanza con avisarle a los desarrolladores que no deben cambiar los valores de una ICotizacion y sus ICuota una vez que fue creada y ya está. Pero mi punto no es ése Sin ser peronista, quiero citar una frase de Perón que decía "los hombres son todos buenos, pero si se los vigila son mejores" En proyectos grandes donde la gente viene y va, unos pasan, otros quedan, esas "puertas traseras" que uno va dejando en el código son las vulnerabilidades que pueden a la postre ser explotadas por quienes se propongan cometer fraudes Hay que salir al cruce de las mismas sin caer en tontos positivismos de "acá nunca va a pasar eso"
Sólo para curiosos, incluyo una posible implementación de ICotizacion, en la que preferí usar struct en lugar de class, que me almacena en forma contigua en memoria el contenido de una cotización en forma consecutiva (si en cambio fuera una clase, lo que se almacenaría en forma contigua serían las referencias a sus campos. Fuera de eso no vas a encontrar nada paranormal, excepto quizás el modificador de acceso del constructor de la clase (internal en lugar de public, ahora te sigo contando qué es eso)
Por esto se dice que Cotizacion es inmutable (immutable). Se mira pero no se toca. El responsable de la clase (o de la lógica de negocio de este módulo) puede quedarse tranquilo de que, una vez que Cotizador.Cotizar() devolvió una instancia de Cotizacion, al menos esa instancia no va a poder ser manipulada o adulterada en ninguna forma
La polémica se inicia cuando, como requisito, se pide poder persistir una Cotizacion (algo que seguramente ocurrirá). O más precisamente, la polémica se inicia cuando haya que recuperar una Cotizacion que se había persistido ya que, si la arquitectura de la aplicación separa la capa de acceso a datos en otro ensamblado... Cómo construir desde aquella capa las instancias recuperadas de cotizaciones? Entonces mejor lo volvemos a dejar público al constructor, pero ahora de nuevo corremos el riesgo de que alquien, en lugar de llamar al Cotizador, se crée una Cotizacion a mano y nos la haga pasar por buena! Parece el cubo mágico, no? Para armar una cara tenés que desarmar lo que tengas hecho de las otras. Cómo salir de aquí? Yo en verdad opté por dejar de lado el internal, volviendo a contar con un acceso público al constructor de Cotizacion pero impidiendo, vía Code-Access Security (CAS), que desde ningún ensamblado se lo pueda llamar, excepto el del módulo Cotizador y el del DAO de ICotizacion. Yo mostré CAS en acción en el webcast sobre Arquitecturas Seguras
Si, como parecía plantear el participante del foro al principio, las clases tuvieran que tener un constructor por defecto (esto es, sin argumentos) de esa manera estaríamos obligados a definir las propiedades como lectura/escritura para poder asignar un valor inicial. Pero una vez que las propiedades son writables (sí: accesibles para escritura), el riesgo de tampering está presente Si bien la inmutabilidad (immutability) juega un rol clave en evitar tampering, debe ser aplicada junto a otras medidas que refuercen la barrera contra la violación de precinto a lo largo de todo el ciclo de vida de una instancia Un par de datos más sobre inmutabilidad:
Será hasta la próxima (me voy al cobán a ver si me aprobaron el crédito) August 19 Suben las Papa', Bajan lo' Limone'Actualmente se viene dando algo curioso en ciertas distribuciones de las conocidas como market share (reparto del mercado), ya que ciertos nichos parecieron durante años tener dueños prefijados, y sin embargo ahora eso está en franca discusión. Concretamente me refiero a lo que está pasando en los segmentos de los clientes web y sus respectivos servidores Por un lado, es innegable el avance de Firefox sobre el -por ahora- líder Internet Explorer
Un detalle no menor es que hacia el año 2004,Internet Explorer gozaba de un 91.16% (siempre según Market Share). Qué está pasando que el drenaje no se corta? La explicación más racional es el surgimiento, hacia finales de 2004, del potente rival que se va comiendo una porción cada vez mayor de la pizza. En efecto, Firefox venía con capacidades no disponibles en el Internet Explorer de aquellos días, como por ejemplo la habilidad para suscribirse a contenidos RSS(algo que, en realidad, a Doña Rosa le pasó por al lado) y sobre todo la habilidad de manejar navegación múltiple mediante pestañas individuales, todo en una misma ventana (algo que incluso Doña Rosa notó y celebró). Finalmente se podría mencionar como razón la percepción de seguridad que en general rodea a todo el soft que no es de Microsoft (o, dicho en otras palabras, la percepción de inseguridad que rodea a todo el soft que es de Microsoft, aunque esta percepción negativa se ha reducido bastante ultimamente) En concreto, Firefox presentaba innovación verdadera frente a un obsoleto Internet Explorer 6.0 datado en el año 2002 y con planes de una renovación alejada en el tiempo. Cuando el drenaje comenzaba a hacerse demasiado evidente, se adelantó, hacia enero del 2006, la beta 2 de la versión 7 cuya fecha de liberación también se anticipó para finales de ese mismo año (más de cuatro años entre una versión y otra, hmmm...) Esta beta 2 era pública (comparada con la Beta 1, liberada en forma restringida seis meses antes) y también posibilitaba suscripción RSS, navegación en múltiples pestañas así como también soporte AJAX nativo (algo que hasta el momento venía siendo soportado mediante un componente ActiveX) Aunque Abril pasado fue el punto más bajo y a partir de allí la situación se amesetó al menos hasta hoy, Firefox viene con mucha fuerza y dispuesto a que la distribución de la torta no esté tan desbalanceada. Desde el punto de vista del consumidor, esta competencia es más que provechosa. Incluso para el que prefirió no moverse de IE y migró a su versión actual, hoy tiene un navegador que ofrece una experiencia de usuario mejorada. Por consiguiente, bienvenida la competencia
Una lectura alternativa del éxito del Firefox con que me he topado es que, por ser freeware, es inmediatamente más atractivo que su rival. No tiene mucho asidero esa versión ya que Windows está presente aún en más del 90% de las compus de escritorio (es decir, las que no son exclusivamente servidores). Por lo tanto, ese más del 90% eligió un sistema operativo pago que incluye el navegador Internet Explorer. Entendería que instalen Firefox por preferencia personal en cuanto a lo que Firefox brinda. En cambio, me parecería impensable que lo adopten para ahorrarse unos mangos (de qué? Si al pagar el sistema operativo el browser les vino de arriba) Entonces, claro, ahora toca la parte que se para alguno y me dice "bueno, pero y los que usan Linux!? Esos prefirieron Firefox como parte de un pack completamente freeware". Los linuxeros? Hablamos de los que usan Linux como sistema operativo de su compu (o sea, no los servidores Linux dedicados)? Según Market Share, el uso de Linux como sistema operativo de escritorio fue de un 0.75% al término de Julio. Muy por detrás de MacOS, que cerró el mes con un casi 6% Dicho sea de paso, venga la siguiente observación: MacOS es pago. Precio de lista u$129 (ciento veintinueve dólares). Es más barato que Vista, cuya versión más básica, no el upgrade sino el instalador full, vale u$199 (ciento noventa y nueve dólares). Lo real es que MacOS hoy puede correr en arquitectura Intel pero los equipos siguen siendo Mac. El precio de una notebook Mac arranca de los u$1099 (mil noventa y nueve dólares) y de ahí para arriba. Notebooks con Windows Vista incluído tenemos una variedad mucho más amplia, partiendo de los u$550 (quinientos cincuenta dólares) y de ahí para arribeños La conclusión que quiero sacar es que el principal factor a favor de Linux como desktop ("es freeware") no parece estar siendo tenido en cuenta si menos del 1% optó por él
Normalmente es en esta parte en la que se vuelve a parar el que me sacó el tema de Linux y me dice "okay, admitido que Linux si bien tiene una arquitectura abierta y que permite que cada uno se arme la película que quiera, a la mayoría de los usuarios eso los confunde porque prefieren algo ya hecho y listo para usar. Pero no obstante Linux tiene su potencial en la seguridad y la estabilidad y es por eso que la mayoría de los servidores web corren alguna combinación de Linux y Apache" Bueno, desde hace un tiempo a esta parte que la combinación Windows Server más su servidor web Internet Information Services (IIS) viene recuperando parte del considerable terreno que el servidor web Apache ha venido perdiendo
El crecimiento de Internet Information Services representaría un doble triunfo ya que Apache está especialmente desplegado sobre plataforma Linux, lo que viene estando confirmado por otros sondeos que muestran a Windows Server creciendo más rápido que el sistema operativo del pingüinito (esto no de ahora: ya se comentó algo el año pasado y también el anterior). Volviendo a Apache, Netcraft sugiere que de seguir las tendencias actuales, en algún momento del 2008 IIS lo alcanza (verlo en http://adtmag.com/article.aspx?id=21092). De todas maneras, pase o no, la competencia es interesante y sana De nuevo quiero extraer acá la conclusión de que ese preconcepto de que el software abierto y sin fines de lucro ofrece lo mismo que el software comercial es más aparente que real: si no hay un negocio atrás que lo sustente (que reinvierta en investigación y desarrollo), es cuestión de tiempo (el autor de esta nota admite, sin ponerse colorado, no ver como un pecado que quién desarrolle software gane dinero por ello)
Epílogo: El Mundo Al Revés Habitualmente se asocia a Microsoft con "software cerrado", "propiedad intelectual", "licencias", etc. Y son conocidas las presiones que la Unión Europea y otros países le ponen para que libere parte del código de Windows, como una forma de equiparar las posibilidades de vendors locales de distribuir productos para esta plataforma con la misma calidad con que podría hacerlo la misma Microsoft Pues bien, Microsoft ha inaugurado semanas atrás un portal dedicado al software que distribuye en forma abierta (no Windows y Office, por ahora Como contrapartida, Optaros (una consultora de Boston) lanzó también semanas atrás el Enterprise Open Source Directory: un catálogo de aplicaciones de código abierto listas para las empresas (con revisiones, casos de estudio, etc). La idea de Optaros es acercar a los que desarrollan código abierto con las potenciales empresas que utilicen sus productos. El de Optaros no parece ser el único caso: recomiendo la lectura del artículo "El Open Source Empresarial Consiguió Algunas Recomendaciones" de John Waters, para el canal de Arquitectura del portal FTPOnline
Habrá una batalla interesante aquí. Enhorabuena y que gane el mejor Por 6 No Fueron 1300La verdad es que no me gusta mucho la idea de hacer un post sobre el blog en sí (es decir, que no agregue ningún valor respecto del objetivo del mismo -Arquitectura de Software y algo más allá sobre la vida misma-). Pero lo que pasó esta semana merece ser destacado, y simplemente este metapost quedará sin categoría asignada
En la semana en que terminó anoche, 1294 (mil doscientas noventa y cuatro) páginas de mi blog fueron visitadas. Debo darle las gracias a San Google que me viene indexando bastante lindo. Me acceden mayormente desde México y Colombia, al que se ha añadido ahora Perú. También recibo visitas -en un segundo orden- desde Chile y Brasil, y en menor medida desde Argentina y España De mantenerse este ritmo (no lo creo, es demasiado, pero soñar no cuesta nada) en 10 (diez) semanas estaría superando las 100000 (cien mil) visitas desde que el blog se inauguró, el 11 de Agosto de 2005 Mil doscientas noventa y cuatro GRACIAS a todos. A los que me visitan voluntariamente y también a aquellos que dieron conmigo mientras buscaban algo (espero, en ese caso, haberles servido) August 16 -= 2 Años de DiegumZone =- Anuario 2006/2007 Para ColeccionarAmigazos, a Uds que léen siempre lo que tengo para decir, a aquellos que incluso se suscribieron a mi RSS para no perderse ni un post -incluso los que son más de ocio que de Arquitectura-, aquellos que he ido conociendo por sus comentarios sobre mis posts y que me encantaría tener la chance de conocer personalmente (tengo fé de que va a pasar), a los que me hicieron preguntas adicionales (y con eso me hicieron sentir importante por un rato)... A todos Uds gracias. El pasado 11 de Agosto (el sábado último) cerramos el segundo año de este blog que, si bien está lejos de ser lo que me gustaría que sea si tuviera más tiempo para dedicarle, sí puedo anticipar que tiene cuerda para rato A modo de balance voy a destacar los posts más salientes de cada mes
Mientras escribo esto me quedo pensando en lo que contaba de esa semana en que estuve en Orlando, durante el TechEd, y no me puedo borrar charlas con algunos arquitectos que me decían "todo esto me parece muy cool, pero por darle pelota me pasa que lo que antes hubiera hecho en una hora -seguramente sin buscar que sea reusable, compatible con el futuro, modular, componentizable, etc- ahora me lleva no menos de tres y me queda una sensación incómoda de si no estaba mejor cuando hacía cosas que seguramente no me iban a servir para siempre, pero que en lapsos breves estaban andando" Qué amarga conclusión si se comprobase que todo esto para lo único que sirve es para convertir soft barato y presuntamente berreta (habría que confirmar esto último, ya que no necesariamente) en soft que promete mucho pero no concreta tanto, y cuesta valores saladitos (recursos humanos escasos o no siempre a la altura de los últimos avances; horas / hombre que, baratas o no tanto, finalmente terminan siendo muchas más que las presupuestadas) Estará yendo todo el mundo a SOA, realmente? O SOA es algo que genera curiosidad, todos quieren leer algo sobre, pero pocos están firmemente decididos a ir para aquel lado? Y los que fueron a SOA, habrán encontrado una bolsa con moneditas al final del arco iris? Tendrán arco iris, o todavía están esperando que aparezca cuando pare la tormenta eléctrica, granizo incluído, que amenaza con enterrar el datacenter? La verdad es que SOA, como todas las restantes tendencias son resultados evolutivos de intentos anteriores que por alguna razón fracasaron. SOA no es más que una respuesta desacoplada al CORBA de los '90 Y REST, qué es? Es una salida elegante y liviana a escenarios donde las complejas extensiones WS-* de los servicios web no sean necesarias Algunas nuevas tecnologías llegan a ponerle la tapa al cajón de los intentos anteriores, en tanto que otras vienen sólo a complementar (a sumarse a) soluciones aportando una dosis de sencillez allí donde no hacía falta poner toda la carne a la parrilla
Qué pasos debe dar un arquitecto para aconsejar determinada tecnología? Preliminarmente, mantenerse informado de las tendencias actuales (sin tomar todo al pié de la letra, sólo estar alerta) Posteriormente organizar una Prueba de Concepto (Proof of Concept, o PoC) para aquellas tecnologías que considere que verdaderamente van a permitir mejorar el soporte del área de tecnología a los objetivos del negocio (tanto por el aseguramiento del revenue como por la reducción de costos). La PoC es un primer filtro a las tecnologías testeadas, que le deberían permitir al arquitecto hacerse una idea de hasta dónde esta aparente solución no podría ser un nuevo foco de complejidad Si la PoC resultase exitosa el arquitecto puede aconsejar al líder del proyecto (eventualmente a la gerencia de tecnología) de invertir más en esa tecnología para una posible adopción (sea en un dado proyecto o sea a nivel estratégico en un portfolio más amplio de aplicaciones). La aceptación por parte del líder de proyecto y/o de la gerencia dependerá en qué tan hábiles seamos en mostrar que estas tendencias realmente van alineadas con objetivos de la organización. Va a ser difícil, si no, que nos suelten un mango (pasa que nadie se quiere quemar después, viste? Entendé eso primero y se te va a hacer la vida mucho más fácil) Si hay luz verde, se abre una etapa donde se debería capacitar tanto a desarrolladores como a profesionales de TI (infraestructura) en las tecnologías a aplicar, así como eventualmente contratar profesionales ya entrenados en las mismas (y, de ser posible, "estrenados" también: con experiencia) Personalmente creo que el arquitecto no debería competir con los desarrolladores senior a ver quién la tiene más clara en las nuevas APIs. Suele pasar esto en aquellas personas de carácter inseguro de sí mismas que temen verse desplazados por aquellos que dominan mejor las nuevas tecnologías, como si la visión de negocio detrás de las mismas -se las domine o no- no le importase a la gerencia. En cambio, el arquitecto debería aprovechar el training en las nuevas tecnologías para, con la ayuda de los desarrolladores senior, definir frameworks (componentes, generadores de código, etc) que permitan esconder la complejidad inherente de las nuevas tecnologías, de manera de adoptarla en una forma commoditizada. En castellano, esto significa poder montar un framework de componentes y herramientas que permitan hacer uso de APIs nuevas, complejas, por parte de desarrolladores de nivel intermedio -que quizás, con suerte, ni sepan que lo que están desarrollando termina haciendo uso de estas nuevas tecnologías-. En suma, el arquitecto juega acá un rol primordial en bajar todo lo que se pueda el costo de adopción
Balas de plata, ya lo había dicho Frederick Brooks Jr, no hay ni va a haber: aún siguiendo las tendencias más noveles, de las que haya casos de estudio exitosísimos por todos lados, nada nos garantiza que a nosotros nos deba ir bien también. La clave es no dejar de lado las reales motivaciones, en términos de resultados de la organización, de subirse a nuevas tendencias. El arquitecto que pasa demasiado tiempo con la vista baja mirando las tecnologías, y no la levanta cada tanto para mirar lo que la organización demanda es como el tenista que no mantiene en todo momento la vista en la pelota
Y con esto dicho se inaugura DiegumZone Año III August 13 [Serie] Enterprise 2.0: Parte 5- Los Últimos Serán los PrimerosAl principio de esta serie te había explicado el concepto económico conocido como "efecto red" con un ejemplo cotidiano de los que que van a canjear cosas usadas a Parque Rivadavia. Acá se viene mi segunda explicación de barrio: te presento a The Long Tail (Larga Cola, modelo económico atribuido a Chris Anderson, editor de la revista Wired y autor del libro homónimo, que ilustra la apertura de este post) Situate: estás caminando por la avenida Santa Fé de Buenos Aires, Providencia en Santiago, 18 de Julio en Montevideo o cualquier avenida importante y llena de comercios de la ciudad que vivas. Te metés en la librería más grande que encontrás. Tiene varios pisos, hacia arriba y también uno o dos subterráneos. Está llena de vendedores y cajas registradoras por doquier para poder pagar sin cuellos de botella (sin colas largas, je Pero atendeme una cosa: no te compraste los libros que vos querías en realidad. Te compraste libros de un conjunto más restringido que ése: te compraste los libros que más te gustaron de entre los que la librería tenía disponibles. No tenés que ser un premio Nobel para entender que el espacio físico es finito y por ende no podrías meter allí TODOS los libros que se hayan escrito alguna vez. Por esta razón, los libreros tratan de llevar libros que saben que en el corto o mediano plazo van a vender. Esos son los libros disponibles y de entre esos puede haber varios que te interesen a vos. Pero no necesariamente todos los que a vos te interesaban, por muy grande que sea la librería, puede estar en stock Bueno, eso es el mundo real, físico. No el mundo virtual de Internet. No te olvides que la web empezó con una idea de unos científicos de crear un hipertexto global que relacione las obras de todos ellos, de sus antecesores y sucesores, de manera tal que si estabas leyendo un paper que en un párrafo dice "como manifestó Fulano de Tal en bla bla bla", puedas ir con el mouse a "Fulano de Tal" y/o a "bla bla bla" y mediante un click ir a ver su trabajo. De hecho, HTTP significa "protocolo de transporte de hipertextos", en tanto que HTML significa "lenguaje de delimitadores (markups) para hipertextos". Los científicos que inventaron y ejecutaron esta idea nunca se imaginaron lo que se podía hacer con su herramienta si esta caía en manos de hombres de negocios Qué pasaría si todas las librerías ponen su stock disponible todo en un solo lugar, de manera tal que si yo quiero "Las Puertitas del Sr López", entro a esa librería virtual y me dice las -por decir algo- tres direcciones más cerca de mi casa donde los libros están disponibles. O me dice, independientemente de dónde estén los libros, los diez precios más bajos (incluyendo el shipping, el envío), por el cual me puedo hacer de la colección. Te digo más: no necesariamente debo comprar los tres juntos. Excepto que haya una oferta irresistible tipo "los tres a mitad de precio", puedo comprar cada uno en el lugar que me lo vendan más barato (siempre envío incluído) Ese beneficio nos ha traido la web hoy. Te acordás cuando te decía "Los Datos Mandan"? Si alguien es capaz de reunir la información del stock disponible (quién lo tiene, cuánto vale, cuánto demora en llegar, que ofertas ofrece, etc) el valor agregado de esa info toda junta es un caño!!
Ese es entonces el modelo de la cola larga. El que acuñó el término lo que sostiene es que "el futuro del comercio pasa por vender menos cantidad de más cosas". Porque si sumamos toda la plata que nos podría entrar por lograr vender esos libros que ya muy pocos quieren... eso puede ser guita grande!
Pero volvamos a la oficina, a la Enterprise 2.0. Qué tenemos que hacer para encontrar nuestra cola larga y empezar a cubrirla? Nosotros piolas? No. A nosotros nos toca poner lo nuestro: el aprovechamiento de lo que las tecnologías que te destacaba en los posts anteriores pueden contribuir para lograr una buena experiencia de usuario que garantice que no se caiga las oportunidades, exponiendo una fuerte base de datos depurable (cuando no extendida) por los usuarios, de manera de proveer el virtuosismo del "efecto red". Después de tantos posts, esto como que va cerrando, no? Justamente, respecto de estos datos, la clave para agregar valor no pasa por tirarselos en la jeta al que nos visita de modo que sea él quien se encargue de clasificarlos -lo que sería nuestro suicidio, comercialmente hablando- sino el agregado desde fuentes confiables, renovables (extensibles por los usuarios), filtrables en base al contexto de quien nos visita
Esta serie se compuso entonces de |
|
|