Sitio Web del poderoso ChicoDotNet

Sitio Web del poderoso ChicoDotNet es el lugar donde puedes aprender todo lo nuevo sobre desarrollo de aplicaciones para Windows, ASP .NET, SmartClient y adquirir los súper poderes que te da la mejor plataforma de creación de programas: Microsoft .NET

20080223

Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida

Windows Vista cumplió un año en noviembre de 2007, si bien su distribución masiva se llevó a cabo hasta enero de ese mismo año desde noviembre de 2006 está en manos de los socios de negocio de Microsoft.

Lo que sigue es mi anécdota personal sobre Windows Vista, el sistema operativo más confiable que he tenido en mis manos, si quieres ir a "la carnita" de la noticia que estoy tratando haz clic aquí para ir a la parte noticiosa del post, si no pues sigue leyendo :-P.

En lo particular yo tuve acceso a Windows Vista en diciembre de 2006, cuando llegaron "los dulces" a la compañía en la que yo trabajaba en ese entonces, me acuerdo muy bien de que me tomó 3 días inventariar todo mi software, respaldar toda mi información de los últimos 15 años -ahora ya uso un array de discos en mi casa para mis cosas personales y antiguas-, que vivían en mi entonces nueva laptop HP dv2135 LA, que venía originalmente con Windows XP Professional y que compré específicamente esperando la llegada de Vista:

  • Procesador Intel Core 2 Duo @ 1.66 Ghz.
  • 2 Gb en memoria RAM @ 600 Mhz.
  • Disco duro de 120 Gb @ 7200 rpm.
  • Pantalla 15.4" WXGA @ 1280x800.
  • Multi-puertos modernos (3 USB, 1 Firewire, 1 Slot Expansion Port 3, 1 LAN 10/100 Mbps, 1 SD, 1 ExpressCard, 1 DVD-RW con tecnología LightScribe, Sonido 3D con un montón de puertos de audio).

No compré una Mac Book Pro en lugar de la HP porque el financiamiento para la laptop fue otorgado a mitad por la compañía con la que trabajaba y uno de mis dos entonces jefes, un experto en administración de proyectos de tecnología me dijo que iba a ser una lata tenerme dos meses corriendo XP en modo virtualización o pagar por la licencia sin usar de Mac OS X. Me acuerdo también que el otro de mis dos entonces jefes, un prominente gurú de tecnologías Microsoft me hizo ver que mi decisión de instalar la versión x64 de Windows Vista Ultimate en lugar de la versión x86 me iba a tomar todo un fin de semana o más para encontrar los controladores adecuados (en realidad sólo batallé por el Firewire y estaba en la página Web de Dell) pero no tuvo problema con mi pasión por la tecnología.

Pues bueno, instalé Windows Vista Ultimate x64 y luego todo el ambiente de desarrollo necesario también en versión x64, herramientas como Visual Studio Team System 2005, Microsoft SQL Server 2005 Developer Edition, Visual Source Safe 2005 y por supuesto Microsoft Office 2007 Ultimate, mis habituales herramientas de terceros que funcionaron sin problemas (La más preocupante fue mi licencia de Norton Internet Security, el antivirus que he utilizado los últimos 5 o 6 años y que acababa de renovar en octubre de 2006) y fuí el segundo de toda la compañía que lo tuvo instalado (el proceso se retasó un día porque el encargado de las licencias de software creyó que iba yo a poner la versión de 32 bits y estaba quinto en la lista de espera, cuando le dije que la de 64 bits sólo consultó con el jefe y al rato ya estaba yo instalando).

Bueno, pues si bien la puntuación total de la Evaluación de la experiencia en Windows de mi laptop es de 3.1 por culpa del chipset gráfico Intel Mobile 945 Express Chipset que me da 3.4 para Aero y 3.1 para gráficos de juego, Windows Vista sólo me ha dado un par de dolores de cabeza en más de un año de ser mi compañero de trabajo más frecuente: el primero fue el controlador Firewire y el segundo la incompatibilidad de 64 bits con el API de SharePoint, pero en general se ha mantenido con un índice de confiabilidad entre 9.24 del segundo día de uso (el primero falló la instalación del Bluetooth y de LightScribe y estuvo en 9.17) y 2.2 el día que tronó como ejote mi iPod luego de probar una versión alpha o beta, no recuerdo de Safari para Windows (qué increíble que las herramientas de monitoreo incluídas en Windows Vista me permitan platicarles toda la historia), pero en general el promedio de uso intenso que yo le doy como desarrollador mantiene la confiabilidad entre 6 y 8, que son valores que me permiten trabajar muy a gusto, aunque estoy pensando seriamente cambiar mi laptop en su cumpleaños 1.5 por una del doble de capacidad siguiendo la Ley de Moore el próximo mes de abril. Ahora la noticia:

Reporte de vulnerabilidades de Windows Vista a un año de su lanzamiento

Jeff "Security Guy" Jones quien mantiene un blog sobre seguridad informática en TechNet y que es el director estratégico en el Microsoft Security Technology Unit publicó un reporte de vulnerabilidades. Este trabajo analiza la divulgación de las vulnerabilidades y actualizaciones de seguridad para el primer año de Windows Vista y las analiza en el contexto de su predecesor, Windows XP, junto con otros sistemas operativos modernos de trabajo como Red Hat, Ubuntu y productos de Apple y Novell.

Los resultados del análisis muestran que el perfil de vulnerabilidad gracias a las mejoras de la seguridad de Windows Vista es mejor que el de su predecesor. El análisis de las actualizaciones de seguridad de Microsoft también pone de manifiesto que las mejoras en el proceso de actualización de seguridad y el proceso de desarrollo han reducido el impacto de las actualizaciones de seguridad de Windows a los administradores de manera significativa en comparación con su predecesor, Windows XP.

El reporte puedes descargarlo en formato PDF desde el blog de Jeff Jones o en el enlace siguiente en TechNet: Windows Vista One Year Vulnerability Report.

Etiquetas: , , , , , , ,

Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida

Escrito por Alfonso Lara Ramos @ 07:00 0 comentarios

Busca Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en Technorati | Guarda Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en Yahoo | Guarda Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en Google Bookmarks | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a Furl | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a Newsvine | Guarda Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en Ma.gnolia.com | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a Reddit | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a BarraPunto | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a Digg | Envía un Meme sobre Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida | Guarda Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en del.icio.us | Envía Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida a Fresqui | Menea Windows Vista es el sistema operativo moderno con menos vulnerabilidades en su primer año de vida en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20080208

Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger

Casi íntegramente copiado del blog de Martín (ex-autor de Memorias de un Geek), después de todo un desarrollador pragmático reutiliza lo que ya está bien hecho. Por cierto, al final incluyo un truco para realmente detectar quien no te admite en su lista de Windows Live Messenger.

Hace un tiempo, Genbeta recibió una serie de amanzas por este post (ahora mismo inaccesible, pero se puede leer en la caché de Google), asegurando que si no lo retiraban, habría problemas.

Efectivamente, ayer mismo, Julio Alonso escribía en el weblog corporativo de la red, comentando que las amenazas se habían hecho realidad: se había iniciado un ataque DDoS contra Genbeta, provocando que no cargase o que lo hiciese de forma muy lenta.

Así, en Al otro lado del mostrador se hacen eco de una iniciativa de Enrique Dans, que es difundir la información original por todos los blogs que sea posible, para que se cumpla aquello de ¿que no quieres caldo? pues toma dos tazas. Así que a continuación reproduzco la información original ofrecida en el post de Genbeta:

Parece mentira que después de tanto tiempo (¡años ya!) del invento de este fraude todavía haya gente que siga cayendo en él. Es muy simple, y seguro que muchos lo conocéis, simplemente se trata de páginas que ofrecen el servicio de mostrarte quién te tiene como no admitido o te ha eliminado del mésenyer a cambio de que les des tu datos de conexión, es decir, tu usuario y contraseña. Creía que este negocio ya estaba más que muerto, pero hoy mismo un par de contactos míos me han saltado con la típica ventanita que me acceda a una de esas páginas para que me lea el futuro.

Como norma general, dar la contraseña de tu correo a alguien que no pertenezca a tu familia ya es un suicidio tecnológico, y en este caso sería como darle la contraseña de tu tarjeta de crédito a una persona desconocida para que te muestre el dinero que tienes. ¿Quieres saber qué es lo que hacen? La mayoría de páginas, después de mostrarte esa información, se conectan a tu cuenta varias veces al día para molestar a todos tus contactos con spam descarado. Lo que es peor, esto puede colapsar tu cuenta y no sería raro que la perdieras para siempre, o al menos que la conexión sea pésima. Así que ya sabes, no des tu contraseña a ningún sitio web, o atente a las consecuencias.

Pero claro, ¡tú quieres saber quién te tiene como no admitido! Sorpresa: esos sitios, además de ser peligrosos, no funcionan. Microsoft cambió hace tiempo el protocolo para que los servidores de MSN no difundieran esta información. Antes sí podías, pero ahora mismo ni siquiera puedes saber el estado de otra persona sin que ella te invite/admite o sin saber la contraseña de la cuenta (sin cambiar la configuración de la cuenta). Sin rebuscar demasiado, algunos sitios fraudulentos que siguen esta práctica serían: blockoo.com, scanmessenger.com, detectando.com, quienteadmite.info, checkmessenger.net, blockstatus, etc… Todos ellos son potenciales phishing, y ninguno funciona más allá de recolectar cuentas de correo.

Cómo saber quién te tiene no admitido en el MSN

Ahora difundido el post, el truco para saber realmente quien no te admite ya en su lista de contactos de Windows Live Messenger.

Son solamente dos pasos:

  1. Como se muestra en la imágen da click en el botón de menú y selecciona la siguiente opción: Herramientas > Opciones
    Cómo saber quién no te tiene admitido en el Windows Live Messenger - Paso 1
  2. En el menú que te aparece da clic en la opción Privacidad, ahí te sale tu lista de admitidos y no admitidos... Bueno pues quien te haya dejado en estado de no admitido aparecerá con la siguiente apariencia cuando le des clic derecho (La opción Eliminar está habilitada):
    Cómo saber quién no te tiene admitido en el Windows Live Messenger - Paso 2, Opción 1
    En el caso que aún te quiere tener en contacto la apariencia es la siguiente (la opción Eliminar está deshabilitada):
    Cómo saber quién no te tiene admitido en el Windows Live Messenger - Paso 2, Opción 2

Finalmente quisiera concluír con la moraleja de que no deberías preocuparte por revisar este tipo de cosas, quien te elimina sin avisarte o sin una razón justificada no merece que te preocupes por mantenerlo en tu lista de contactos. Y si agregas a tus amigos de verdad y te portas bien con la gente no debería darse el caso muy seguido de que te eliminen. Felices relaciones humanas ;-)

Etiquetas: , , , , , , , ,

Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger

Escrito por Alfonso Lara Ramos @ 09:00 2 comentarios

Busca Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en Technorati | Guarda Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en Yahoo | Guarda Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en Google Bookmarks | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a Furl | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a Newsvine | Guarda Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en Ma.gnolia.com | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a Reddit | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a BarraPunto | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a Digg | Envía un Meme sobre Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger | Guarda Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en del.icio.us | Envía Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger a Fresqui | Menea Cómo saber quién no te tiene admitido en el MSN Windows Live Messenger en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20071207

Ciclo de vida de la depuración de aplicaciones

1. - Reproduce el error

Paso 1: Reproduce el error. - Esto puede parecer muy básico, pero para entender y en consecuencia ser capáz de corregir el error debes poder reproducirlo, entendiendo cuáles son las variables que están involucradas, en qué condiciones se lleva a cabo y entonces será posible empezar a trabajar en la depuración de errores de tu aplicación. Es sorprendente cuántas veces nos podemos encontrar con ingenieros de pruebas, desarrolladores e incluso arquitectos que te platican acerca de un bug que les salió pero que ya no pueden reproducir y más sorprendente aún es cuántas aplicaciones salen a producción con estos errores que no se corrigieron simplemente porque no era posible reproducirlos en la fase de desarrollo y pruebas. Una situación común es que funcione bien en tu máquina de desarrollo pero en en ambiente de pruebas el software no funcione correctamente. (¿Cuántos ingenieros se necesitan para determinar que la URL de su aplicación ASP.NET apuntaba a http://localhost/?).

2. - Describe el errorr

Paso 2: Describe el error. - Una vez que haz logrado reproducir el error es importante documentarlo adecuadamente, si no pudieras corregirlo en éste momento al menos puedes ayudar a que otro miembro del equipo pueda entender de que se trata el error para que posteriormente pueda trabajar en él, mientras mejor describas el error es más sencillo que puedas depurarlo de forma adecuada para corregirlo. Es también importante este tipo de documentación para efectos de errores que pudieran repetirse en futuras aplicaciones como guía para trabajar con patrones y antipatrones de diseño que eviten las malas prácticas.

3. - Siempre asume que el error es tuyo

Paso 3: Siempre asume que el error es tuyo. - Primero échale una mirada a tu código, la mayor parte de las veces puedes gastar demasiado tiempo analizando el código de otros cuando en realidad el problema se encuentra en el órden de las instrucciones que tu mismo escribiste o en la forma de hacer un llamado a otra clase o interfase desde tu propio código, una vez descartado esto puedes empezar a revisar lo que pasa en otras partes de la aplicación.

4. - Divide y vencerás

Paso 4: Divide y vencerás. - Trata distintos caminos, lee el código, trata de re-programar cada una de las acciones que el código realiza, es más fácil que dividiendo las funciones y subfunciones encuentres el error en tu código que si simplemente te pones a revisarlo como un todo, sobre todo toma en cuenta la regla del 80-20: el 80% de los errores es causado por el 20% de los elementos que intervienen en un proceso.

5. - Piensa en forma creativa

Paso 5: Piensa en forma creativa. - ¿El error puede ser causado por algo que se te pasó? ¿Tienen algo que ver las versiones de tus aplicaciones totalmente actualizadas en la máquina de desarrollo contra el servidor de pruebas que nadie actualiza? ¿Qué tanto de tu código está "hardcodeado" y podría no corresponder al ambiente de pruebas? ¿Se te ocurrió poner una condición AND en un IF en lugar de anidarlas? ¿Te faltó un ELSE?

6. - Utiliza herramientas

Paso 6: Utiliza herramientas. - Hay muchas herramientas para ayudarte a depurar una vez que llegas a este paso, desde el mismo Visual Studio hasta las herramientas de IBM-Rational, Compuware y Quest, pasando por NUnit, TestDriven.NET, FxCop, .NET Memory Profiler, y CLRProfiler.

7. - Inicia la depuración pesada

Paso 7: Inicia la depuración pesada. - Cuando empiezas a utilizar herramientas ya debes tener una idea del tipo de error que estás buscando, localizarlo y acabar con él. La diferencia entre esta depuración con la depuración ligera es que al tener ya una idea de lo que estás buscando y auxiliarte con una herramienta adecuada ya no estás sólo rastreando un error a ciegas, puedes ver valores de entrada y salida y en general es en este punto donde tus hipótesis de lo que está fallando se desmienten o se corroboran, ayudándote a programar una solución adecuada.

8. - Verifica que el error haya sido corregido

Paso 8: Verifica que el error haya sido corregido. - Antes de decir: "Esto ya quedó" lo más correcto es como todo en la ingeniería: revisa que realmente haya quedado, Muchas veces la corrección de un bug te hace darte cuenta de otros más que estaban por ahí escondidos, vuelve al paso 1 y si todo ha quedado entonces ahora sí dale proteger a tu control de código fuente.

9. - Aprende y comparte

Paso 9: Aprende y comparte. - Platica el error y la solución con el equipo, es la mejor manera de que ellos compartan contigo otros conocimientos que vayan adquiriendo, termina la documentación del error con la solución encontrada, siempre es bueno terminar la depuración de tu código de esta manera para mejorar la forma en la que vas desarrollando tu código y el del resto del equipo.

Etiquetas: , , , , , , ,

Ciclo de vida de la depuración de aplicaciones

Escrito por Alfonso Lara Ramos @ 22:00 0 comentarios

Busca Ciclo de vida de la depuración de aplicaciones en Technorati | Guarda Ciclo de vida de la depuración de aplicaciones en Yahoo | Guarda Ciclo de vida de la depuración de aplicaciones en Google Bookmarks | Envía Ciclo de vida de la depuración de aplicaciones a Furl | Envía Ciclo de vida de la depuración de aplicaciones a Newsvine | Guarda Ciclo de vida de la depuración de aplicaciones en Ma.gnolia.com | Envía Ciclo de vida de la depuración de aplicaciones a Reddit | Envía Ciclo de vida de la depuración de aplicaciones a BarraPunto | Envía Ciclo de vida de la depuración de aplicaciones a Digg | Envía un Meme sobre Ciclo de vida de la depuración de aplicaciones | Guarda Ciclo de vida de la depuración de aplicaciones en del.icio.us | Envía Ciclo de vida de la depuración de aplicaciones a Fresqui | Menea Ciclo de vida de la depuración de aplicaciones en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20071028

SG'07 Conferencia y Expo

SG'07 Conferencia y Expo

A partir de hoy a las 9:00 inicia SG '07 Conferencia y Expo, que es un congreso técnico sobre desarrollo de software enfocado a profesionales de TI en México y Latinoamérica. Su propósito es poner a los profesionistas locales en contacto con las tendencias y mejores prácticas internacionales en cuanto a desarrollo y administración de sistemas. SG '07 se realizará en la Ciudad de México los días 29, 30 y 31 de Octubre del 2007 en el hotel Sheraton Centro Histórico.

Asistir a SG'07 te convertirá en un mejor profesionista de software. No solo conocerás las más recientes tecnologías y herramientas, sino que aprenderás sobre lo que realmente funciona en los proyectos de software.

Principales razones para asistir a SG'07

  1. Aprende qué prácticas son las que realmente contribuyen al éxito de los proyectos.
  2. Descubre técnicas eficaces para dirigir tus proyectos y equipos de trabajo.
  3. Desarrolla una visión práctica y actualizada sobre el desarrollo de software.
  4. Aprovecha la oportunidad de conocer colegas y fortalecer tu red de contactos.
  5. Entérate de lo último en tecnologías y herramientas.

¿Quiénes deben asistir a SG'07?

Todos los interesados en desarrollar software de calidad, con una visión enfocada al negocio.

¿Cúal es el formato del SG'07?

La agenda de SG'07 esta conformada por 2 días de conferencias y expo, y un tercer día de hands-on labs (laboratorios prácticos). SG'07 es la segunda edición de esta conferencia, que se ha convertido en el evento más esperado por los profesionistas de software en América Latina.

La agenda del evento es la siguiente:

Lunes 29 de octubre

08:45 - 9:00

Mensaje de Bienvenida

09:00 - 10:00

Scott Ambler: Applying Agile Software Development Techniques on Real-World Projects

10:10 - 11:10

Danese Cooper: What Open Source Means for Software Developers

11:10 - 11:40

Coffe Break

Herramientas y Tecnologías

Procesos

Ingeniería de software

Estrategia para Empresarios

11:40 - 12:30

BPEL y Orquestación de Servicios

Bases para el Éxito en la Mejora de Procesos

Desarrollos Libres: Cambiando la lógica de trabajo en la industria del software

Un Modelo de Competitividad para Empresas de SW

12:40 - 13:30

SOA en la práctica

Desarrollo Ágil con SCRUM

La Calidad de una Aplicacion Empieza desde sus Átomos

Los Cazadores de Mamuts

13:30 - 14:10

Presentación de soluciones

14:10 - 15:00

Comida

15:00 - 15:30

Visita a Expo

15:30 - 16:20

Un Nuevo Modelo para la Programación Paralela

Desarrollo de Software Esbelto: ¿Se puede?

El Método de Diseño de Servicios©

Liderazgo de Mercado Sostenible: ¿Es la innovación suficiente?

16:30 - 17:20

.NET Framework 3.5

Ágil en el contexto de la psicología laboral mexicana

Arquitectura de Software del Depositario Central de Valores de Mexico

Madurez Institucional y Aceleración de Negocios

17:20 - 17:40

Coffee Break

17:40 - 18:00

Premiación del concurso e-Quallity

18:00 - 19:00

Orlando Rincón: El Ecosistema de Hacking como Motor de la Industria de Software

19:30 - ?

Evento social

Martes 30 de octubre

09:00 - 10:00

Gavin King: Web Beans and the Seam Framework

10:10 - 11:10

Miguel Serrano: Lecciones Aprendidas en la Mejora de Procesos

11:10 - 11:40

Coffe Break

Herramientas y Tecnologías

Procesos

Ingeniería de software

Dirección de proyectos

11:40 - 12:30

Nuevas Tendencias en el Acceso a Datos

El Mito sobre CMMI en Pequeñas Organizaciones

La Implementación del Proceso de Revisión de Requerimientos

¿Terminaste de Planear tu Proyecto? ¿Y ahora qué?

12:40 - 13:30

Desarrollo de Gadgets con Windows Vista

El código CMMI®: Las claves ocultas del modelo

Software Testing: ¿Hacia dónde vamos?

Mejores prácticas para identificar y administrar riesgos

13:30 - 14:10

Presentación de soluciones

14:10 - 15:10

Comida

15:10 - 16:00

Mashups: Una nueva manera de ver, crear, diseñar y reutilizar

Implantando MoProSoft utilizando Balanced Scorecard y COBIT

Caso de Estudio sobre la Densidad de Defectos del Software en México

El valor devengado (EVA): De la teoría a la práctica

16:10 - 17:00

Introducción a Ruby on Rails

COMPETISOFT: MoProSoft más alla de las fronteras

Diseño Interactivo: El Nuevo Rol Indispensable en los Equipos de Desarrollo de Software

Oficina de Proyectos: Tres vertientes excluyentes

17:00 - 17:15

Coffee Break

17:15 - 18:15

Eric Jarvi: Modern Software Debugging Techniques

18:30 - 20:30

Reuniones de comunidad

Etiquetas: , , , , ,

SG'07 Conferencia y Expo

Escrito por Alfonso Lara Ramos @ 23:59 0 comentarios

Busca SG'07 Conferencia y Expo en Technorati | Guarda SG'07 Conferencia y Expo en Yahoo | Guarda SG'07 Conferencia y Expo en Google Bookmarks | Envía SG'07 Conferencia y Expo a Furl | Envía SG'07 Conferencia y Expo a Newsvine | Guarda SG'07 Conferencia y Expo en Ma.gnolia.com | Envía SG'07 Conferencia y Expo a Reddit | Envía SG'07 Conferencia y Expo a BarraPunto | Envía SG'07 Conferencia y Expo a Digg | Envía un Meme sobre SG'07 Conferencia y Expo | Guarda SG'07 Conferencia y Expo en del.icio.us | Envía SG'07 Conferencia y Expo a Fresqui | Menea SG'07 Conferencia y Expo en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070901

Como cambiar tu dirección IP desde la línea de comandos

Mientras estás desarrollando y probando es importante a veces cambiar tu dirección IP y luego regresar a tu dirección normal DHCP. Hacerlo a mano es tedioso y te lleva mcho tiempo pero Windows tiene un comando shell que te permite hacerlo de manera sencilla: NETSH.

NETSH tiene muchas funcionalidades que puedes encontrar con la opción /?, pero volviendo al tema para hacer el cambio de forma sencilla necesitas el comando NET INTERFACE IP.

Por ejemplo: para mostrar la información de tu IP actual utilizarías:

C:\>netsh interface ip show addresses

Para cambiar tu IP a dinámica (DHCP) utilizarías la siguiente sintaxis:

C:\>netsh interface ip set address name="Local Area Connection" source=dhcp

Donde sustituyes Local Area Connection con el nombre de tu conexión.

Y para hacerla estática utilizarías:

C:\>netsh interface ip set address "Local Area Connection" static xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx x

Donde sustituyes Local Area Connection con el nombre de tu conexión y las x con valores separados por espacios y donde el primer valor es tu nueva IP estática, el segundo la máscara de subred, el tercero la puerta de enlace predeterminada y el cuarto la métrica.

Etiquetas: , , , ,

Escrito por Alfonso Lara Ramos @ 13:40 0 comentarios

Busca Como cambiar tu dirección IP desde la línea de comandos en Technorati | Guarda Como cambiar tu dirección IP desde la línea de comandos en Yahoo | Guarda Como cambiar tu dirección IP desde la línea de comandos en Google Bookmarks | Envía Como cambiar tu dirección IP desde la línea de comandos a Furl | Envía Como cambiar tu dirección IP desde la línea de comandos a Newsvine | Guarda Como cambiar tu dirección IP desde la línea de comandos en Ma.gnolia.com | Envía Como cambiar tu dirección IP desde la línea de comandos a Reddit | Envía Como cambiar tu dirección IP desde la línea de comandos a BarraPunto | Envía Como cambiar tu dirección IP desde la línea de comandos a Digg | Envía un Meme sobre Como cambiar tu dirección IP desde la línea de comandos | Guarda Como cambiar tu dirección IP desde la línea de comandos en del.icio.us | Envía Como cambiar tu dirección IP desde la línea de comandos a Fresqui | Menea Como cambiar tu dirección IP desde la línea de comandos en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070830

Metodologías de desarrollo de software

En esta ocasión me gustaría hacer énfasis en la importancia que tiene el uso de metodologías de desarrollo de software a un nivel de introducción básica. Tenemos a continuacion el clásico chiste acerca de la implementación de soluciones de cómputo:

La importancia de utilizar metodologías de desarrollo de software en los proyectos

Pero la contra al chiste clásico de la implementación de soluciones de cómputo puede lograrse utilizando metodologías de ingeniería y arquitectura de software, logrando que los proyectos lleguen finalmente a ser exitosos desde los puntos de vista de objetivos de negocio, costos, funcionalidad, sencillez y capacidad de soporte.

En general las metodologías llevan a cabo una serie de procesos comunes que son buenas prácticas para lograr los objetivos antes mencionados independientemente de cómo hayan sido diseñadas. Las fases que agrupan estos procesos son las siguientes:

  • Análisis
  • Especificación
  • Diseño
  • Programación
  • Prueba
  • Documentación
  • Mantenimiento
  • Reingeniería

Así mismo las diferentes metodologías tienen diversos ciclos de vida del desarrollo de software, los modelos más comúnmente utilizados son los siguientes:

  • Modelo en cascada
  • Modelo en espiral
  • Modelo de prototipos
  • Método en V
  • Desarrollo por etapas

Escribiré más adelante acerca de cada una de las metodologías mencionadas a continuación de forma más extensa posteriormente, por lo pronto dejaré abierta la investigación a los lectores acerca de los diferentes marcos de trabajo y metodologías formales de desarrollo de software. Las metodologías a tratar desde el punto de vista de la arquitectura de software y la administración de proyectos serán las siguientes:

Metodologías tradicionales

  • Capability Maturity Model (SW-CMM)
  • Capability Maturity Model Integration for Development (CMMI-DEV)
  • Big Design Up Front (BDUF)
  • Cleanroom Software Engineering
  • Rational Unified Process (RUP)
  • Essential Unified Process for Software Development (EssUP)
  • Fusebox Lifecycle Process (FLiP)
  • Software Process Improvement and Capability dEtermination (SPICE)
  • Métrica
  • Jackson System Development (JSD)
  • Joint Application Development (JAD)
  • Open Unified Process (OpenUP)

Metodologías ágiles

  • Extreme Programming (XP)
  • Scrum
  • Agile Modeling Adaptive Software Development (ASD)
  • Crystal Clear
  • Dynamic Systems Development Method (DSDM)
  • Feature Driven Development (FDD)
  • Lean Software Development (LSD)
  • Agile Unified Process (AUP)
  • Software Development Rhythms
  • Agile Documentation
  • ICONIX Process
  • Microsoft Solutions Framework (MSF)
  • Agile Data Method
  • Database Refactoring
  • LeanCMMI

Etiquetas: , ,

Escrito por Alfonso Lara Ramos @ 04:15 0 comentarios

Busca Metodologías de desarrollo de software en Technorati | Guarda Metodologías de desarrollo de software en Yahoo | Guarda Metodologías de desarrollo de software en Google Bookmarks | Envía Metodologías de desarrollo de software a Furl | Envía Metodologías de desarrollo de software a Newsvine | Guarda Metodologías de desarrollo de software en Ma.gnolia.com | Envía Metodologías de desarrollo de software a Reddit | Envía Metodologías de desarrollo de software a BarraPunto | Envía Metodologías de desarrollo de software a Digg | Envía un Meme sobre Metodologías de desarrollo de software | Guarda Metodologías de desarrollo de software en del.icio.us | Envía Metodologías de desarrollo de software a Fresqui | Menea Metodologías de desarrollo de software en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070828

Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007

Luis Du Solier, MVP de SharePoint dará una serie de siete pláticas tituladas Lleve a su empresa al siguiente nivel con Microsoft Office SharePoint Server (MOSS) 2007, que explican cómo una empresa puede lograr implementar el modelo de optimización de infraestructura de Microsoft (Microsoft IOM) de manera que pueda alcanzar la madurez tecnológica.

Microsoft IOM es un modelo que ayuda a las empresas a entender en qué estado se encuentra su infraestructura de TI actualmente y definir el camino a seguir para mejorar su productividad. El modelo está fundamentado en cuatro niveles de madurez que identifican los valores estratégicos para las compañías y los impulsa de manera ordenada para alcanzar un mayor dinamismo.

Los niveles de madurez de Microsoft IOM se definen de la siguiente manera:

Nivel Básico de Madurez

  • Ambientes difíciles de controlar
  • Altos costos de administración de escritorios y servidores
  • Las tareas de administración de TI son muy tardadas
  • Alto impacto referente a riesgos de seguridad informática
  • Falta de técnicas y coocimiento necesarios para mejoras

Nivel Estándar de Madurez

  • Introducción de controles entre el uso de políticas para menejo de escritorios y servidores
  • Inventario razonale d hardware y software
  • Inicio de la administración de licencias
  • Medidas de seguridad mejoradas con un perímetro asegurado (las medidas de seguridad internas aún pudiendo estar en riesgo)

Nivel Racional de Madurez

  • Los costos inherentes al manejo de escritorios y servidores son bajos
  • Las políticas han madurado y comienzan a jugar un rol más importante en el soporte y expansión del negocio
  • La seguridad es muy proactiva, responde a los riesgos rápidamente y en forma controlada
  • El inventario de hardware y software es muy completo; sólo se adquieren las licencias y computadoras necesarias

Nivel Dinámico de Madurez

  • Conocimiento completo del valor estratégico de la infraestructura
  • Costos bajo completo control
  • Los procesos han sido automatizados por completo
  • Las inversiones en tecnología adicionales producen beneficios específicos, medibles y rápidos al negocio
  • El software es inteligente se autorepara y existen sistemas de soporte para cuarentena (software de reemplazo en caso de contingencias)

Para inscribirte en forma gratiuita a los Webcasts de Luis, puedes hacerlo desde la página del evento. Requieres por supuesto una cuenta de Passport y podrás conocer cómo SharePoint Server 2007 puede ayudar a tu compañía a ir alcanzando los niveles de madurez mencionados gracias a sus diferentes funcionalidades.

Etiquetas: , , , , , ,

Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007

Escrito por Alfonso Lara Ramos @ 12:28 0 comentarios

Busca Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en Technorati | Guarda Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en Yahoo | Guarda Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en Google Bookmarks | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a Furl | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a Newsvine | Guarda Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en Ma.gnolia.com | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a Reddit | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a BarraPunto | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a Digg | Envía un Meme sobre Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 | Guarda Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en del.icio.us | Envía Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 a Fresqui | Menea Webcasts enfocados a Microsoft IOM y Microsoft SharePoint Server 2007 en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070814

Interfases de usuario ricas basadas en lenguajes XML

En esta ocasión les platicaré acerca de las opciones que existen para programar interfases de usuario ricas a partir de archivos de texto con formatos XML.

Primeramente el favorito de los últimos tiempos: XAML (se pronuncia xamel o shamel), que es un estándar abierto de Microsoft para la creación de interfases basadas en Windows Presentation Foundation que es una de las partes que vienen con .NET 3.0. Normalmente puedes producir interfases XAML utilizando Visual Studio o Microsoft Expression pero también lo puedes hacer desde cualquier editor de texto, y esto es una gran ventaja ya que desde cualquier lugar podrías corregir un detallito en tu aplicación aunque no tengas tu computadora usual a la mano. La forma en la que funciona es que se interpreta por un subsistema de Windows Vista o de Windows XP/Server 2003 con .NET 3.0 que reemplaza al GDI tradicional de Windows, este subsistema conecta los diferentes elementos con el CLR permitiéndote crear eventos totalmente de capa de presentación que interactúen con tus clases tradicionales de .NET 2.0 y obviamente por diseño esto puede hacerse también con librerías legadas de .NET 1.1 o de COM por medio de encapsulamiento, por lo que la migración de la interfase común a la atractivamente bonita e interactiva no debería significar cambios mayores en tu arquitectura de aplicación. Los gráficos vectoriales creados por medio de XAML pueden ser creados en 2D y 3D.

XAML viene del acrónimo eXtensible Application Markup Language, aunque originalmente en la etapa de "nombre clave" era eXtensible Avalon Markup Language.

XAML puede implementar casi el mismo código del lado Web que del lado Windows, en el caso de los controles de presentación propios de Windows existe la opción de hacerlo mediante Silverlight o Moonlight, lo cual permite que pueda consumirse el contenido de WPF en cualquier lugar (WPF/e).

La opción competidora más famosa es Adobe Flash (antes Macromedia Flash), si bien ha sido por mucho tiempo un estándar líder en la industria el API está basado en una implementación propietaria de JavaScript llamada ActionScript que implementa los estándares ECMA. La parte XML de Flash se llama FJAX y se implementa utilizando AJAX por medio de HTTP, que comunicaría a Flash con DOM o directamente con .NET o cualquier otro lenguaje del lado del servidor.

Interacción FJAX

Otra opción es XUL, que viene de las siglas XML-based User-interface Language, es un lenguaje propuesto por Mozilla, no es un estándar, su lógica de negocio está basada en Javascript y su principal ventaja era precisamente esa, al ejecutarse sobre un lenguaje ECMA se puede ejecutar en distintos sistemas operativos, la desventaja es que está diseñado como lenguaje del lado del cliente. Está dividido en tres grupos de componentes: Content, Skin y Locale: Content contiene la definición de los objetos de interfase de usuario; Skin define los elementos de presentación como hojas de estilo CSS y XSL; Locale define los componentes de presentación por medio de uno o más DTD.

La última opción que comentaré en esta ocasión es SVG (Scalable Vector Graphics), que es una recomendación de W3C para generar gráficos en 2D vectoriales los cuáles pueden animarse utilizando SMIL (Synchronized Multimedia Integration Language) que es un estándar de W3C, lo cuál lo hace bastante confiable además de ser también un lenguaje basado en XML, sin embargo la desventaja de SVG es que no todos los navegadores soportan su uso sin conectores de terceros, que las gráficas de la interfase de usuario no pueden ser en 3D nativo y que su lógica también funciona del lado del cliente.

Todas las opciones expuestas en esta entrada permiten generar aplicaciones con interfases de usuario ricas que incluyan vídeo, datos, imágenes y gráficos vectoriales, sin embargo mi conclusión sobre la opción más poderosa y sencilla de implementar es XAML.

Etiquetas: , , , , , , , ,

Escrito por Alfonso Lara Ramos @ 13:38 0 comentarios

Busca Interfases de usuario ricas basadas en lenguajes XML en Technorati | Guarda Interfases de usuario ricas basadas en lenguajes XML en Yahoo | Guarda Interfases de usuario ricas basadas en lenguajes XML en Google Bookmarks | Envía Interfases de usuario ricas basadas en lenguajes XML a Furl | Envía Interfases de usuario ricas basadas en lenguajes XML a Newsvine | Guarda Interfases de usuario ricas basadas en lenguajes XML en Ma.gnolia.com | Envía Interfases de usuario ricas basadas en lenguajes XML a Reddit | Envía Interfases de usuario ricas basadas en lenguajes XML a BarraPunto | Envía Interfases de usuario ricas basadas en lenguajes XML a Digg | Envía un Meme sobre Interfases de usuario ricas basadas en lenguajes XML | Guarda Interfases de usuario ricas basadas en lenguajes XML en del.icio.us | Envía Interfases de usuario ricas basadas en lenguajes XML a Fresqui | Menea Interfases de usuario ricas basadas en lenguajes XML en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070813

Reunión de la Comunidad .NET D. F. Agosto 2007

El martes 28 de agosto de 2007 se realiza la reunión mensual de la Comunidad .NET del D. F.

En esta ocasión están confirmadas las siguientes ponencias:

  • Raúl Guerrero - Desarrollo con Silverlight 1.1
  • Misael Monterroca - Aplicación de mejores prácticas de desarrollo y diseño
  • Héctor Obregón - Introducción a desarrollo Embedded con Windows CE 6.0

El lugar donde se reúne la comunidad es:

Intersoftware Learning Solutions World Trade Center México Montecito #39 Piso 35, Oficina 27 Colonia Nápoles, 03810 México D. F.

La cita es de 19:00 a 21:50 horas aproximadamente.

La entrada como siempre es gratuita, puedes llegar en Metrobus y bajarte en la estación Poliforum o si vienes en automóvil llegas por Insurgentes, como a 4 cuadras del Viaducto Miguel Alemán con dirección hacia el sur. Si es tu primera vez en la Comunidad .NET es bueno que sepas que en el WTC te piden identificación a la entrada así que no la olvides.

Etiquetas: , , , , , , ,

Reunión de la Comunidad .NET D. F. Agosto 2007

Escrito por Alfonso Lara Ramos @ 18:02 0 comentarios

Busca Reunión de la Comunidad .NET D. F. Agosto 2007 en Technorati | Guarda Reunión de la Comunidad .NET D. F. Agosto 2007 en Yahoo | Guarda Reunión de la Comunidad .NET D. F. Agosto 2007 en Google Bookmarks | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a Furl | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a Newsvine | Guarda Reunión de la Comunidad .NET D. F. Agosto 2007 en Ma.gnolia.com | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a Reddit | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a BarraPunto | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a Digg | Envía un Meme sobre Reunión de la Comunidad .NET D. F. Agosto 2007 | Guarda Reunión de la Comunidad .NET D. F. Agosto 2007 en del.icio.us | Envía Reunión de la Comunidad .NET D. F. Agosto 2007 a Fresqui | Menea Reunión de la Comunidad .NET D. F. Agosto 2007 en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070701

Lista de verificación para desarrolladores Web en IE7

Ha pasado en innumerables ocasiones: recolectas, aprendes y documentas las reglas de negocio, acuerdas una fecha de entrega con tu cliente, desarrollas tu software y corre a la perfección en tu computadora y la del resto de tu equipo. Llega el momento de subir al hosting la aplicación que creaste o de subirla a pruebas en los servidores internos del cliente... ¡Y te reportan que no funciona!

Y no es que hayas hecho las cosas mal: Lo que pasa es que algo faltó. Y es por eso que esta lista de verificación para desarrolladores Web espero que te sea muy útil. Si no te falta ningún paso y tu aplicación está funcionando como debe de ser del lado del código este penoso problema no volverá a sucederte.

Verificación número 1: Verificar la versíon del navegador o emularla

Si tu aplicación requiere que el navegador tenga ciertas características de versión para ejecutarse correctamente debes asegurarte de que detecte correctamente el tipo de navegador que se está utilizando, esto se hace verificando el agente de usuario que está llamándola. En todo caso a pesar de que cada que Internet Explorer libera una nueva versión, Microsoft trata de coordinar el cambio con los fabricantes de software hay aplicaciones legadas que no detectarán correctamente la versión del agente de usuario ya que la rutina que realiza la detección comúnmente está por código duro. Si utilizas la detección del lado del servidor usando .NET no deberías tener este problema. Las versiones de agente de usuario más comunes que se envían por ejemplo para IE7 son las siguientes:

  • En Windows XP SP2: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
  • En Windows 2003 Server: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)
  • En Windows Vista: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

En caso de que tengas una aplicación legada de ASP, PHP, Java, Colfusion, etc. puedes solucionar el despliegue de IE7 en tu red o sitio Web poniendo una liga a la descarga de la herramienta de cadena de agente de usuario que cambia algunas cadenas de registro temporalmente para emular a IE6, de cualquier modo no olvides hacer la verificación con la rutina que usas habitualmente pero agregando las cadenas que te mencioné anteriormente.

Verificación número 2: Verificar compatibilidad de hojas de estilo CSS en varios navegadores

Desafortunadamente no todos los agentes de usuario tienen la misma forma de interpretar el XHTML o el CSS, esto está cambiando gradualmente pero es posible que tus menús interactivos basados en AJAX + CSS no funcionen igual en todos los navegadores por esta misma razón. Ten cuidado con el control Panel por ejemplo ya que para seguir los estándares IE7 ahora respeta el tamaño indicado en tus hojas de estilo en lugar de adaptarlas como lo hacía la versión 6. Un artículo sobre compatibilidad de hojas de estilo en IE7 lo puedes encontrar en MSDN.

Verificación número 3: Probar el modo protegido de Windows Vista

El modo protegido es una característica de seguridad nueva en IE7, su finalidad es proteger a los usuarios de ser atacados al correr procesos de IE reduciendo la funcionalidad de escribir, alterar o destruir datos en el equipo que utiliza Internet Explorer con código malicioso. Este modo de ejecución aprovecha las nuevas características de seguridad de Windows Vista tales como:

  • User Access Control (UAC). - Evita que las aplicaciones se ejecuten con privilegios de administrador si tu permiso.
  • Mecanismo de integridad (IM). - Restringe la escritura a objetos que comprometerían la integridad del sistema operativo restringiendo el nivel de acceso de procesos, Internet Explorer se ejecuta desde una capa de seguridad restringida para evitar que dispare procesos que puedan generar ataques de esta índole.
  • User Interface Provilege Isolation (UIPI) que previene que los procesos de integridad baja envíen mensajes a otros API's de usuario que se ejecuten con una integridad más alta.

Para aprender cómo desarrollar para que no tengas problemas para estas restricciones puedes leer los documentos "Entendiendo y trabajando con el modo protegido de Internet Explorer" y "Mejores prácticas y guías para desarrolladores en aplicaciones que corren en un ambiente de bajos privilegios".

Si utilizas aplicaciones que utilizan SSL 2.0, TLS 1.0 o ActiveX puedes ver afectado el funcionamiento de tus aplicaciones por cuestiones de seguridad por la configuración por defecto de IE7, la razón de que estas configuraciones sean deshabilitadas se explica en el documento "SSL, TLS y un poco de ActiveX: Cómo IE7 genera un balance entre seguridad y compatibilidad", el soporte ahi sigue pero lo recomendable es actualizarse o avisar al usuario acerca de estas configuraciones.

Verificación número 4: Utilización de certificados y rutas de acceso válidos

Para evitar que tus aplicaciones se vean afectadas por el filtro Anti Phising, utiliza certificados válidos y apunta los hipervínculos que vayan a páginas seguras con la ruta de los mismos, es común ver aplicaciones que no parametrizan la ruta de acceso o no la hacen dinámica cuando están diseñadas para correr en determinado directorio tienen internamente llamados a "localhost", obviamente esto es un bug que hace que mucha gente se rasque la cabeza cuando se trata de salir a producción ya que las aplicaciones Web pueden entrar en un bucle de redirecciones infinitas tratando de buscar en Internet o en la Intranet al famoso servidor localhost.

Verificación número 5: Activación de controles ActiveX

Muchos usuarios se confunden cuando tratan de interactuar con controles ActiveX en las aplicaciones Web, ya que estos están desactivados por defecto por cuestiones de seguridad, puedes realizar la activación programática de tus controles utilizando scripting, aún así hay algunos eventos de DHTML a los que los controles ActiveX no tienen acceso, una guía de activación de controles ActiveX la puedes encontrar en MSDN.

Verificación número 6: Transparencia de archivos PNG

Cuida el modo de rendereo de tus archivos PNG al generarlos para verificar que las zonas alfa efectivamente sean tansparentes en diversos navegadores, la recomendación es utilizar profundidad de color de 24 bits.

Verificación número 7: Compatibilidad con las normas de W3C

Utiliza algún explorador DOM como por ejemplo el que se incluye en la Internet Explorer Developer Toolbar para el diseño de tus páginas, también puedes usar la ventana de Esquema de documento de Visual Studio para asegurarte de que cierras todas las etiquetas, utiliza también la verificación de accesibilidad y finalmente pasa el resultado de tus páginas (el HTML generado) por el validador de W3C.

Etiquetas: , , , , , , , ,

Escrito por Alfonso Lara Ramos @ 06:30 0 comentarios

Busca Lista de verificación para desarrolladores Web en IE7 en Technorati | Guarda Lista de verificación para desarrolladores Web en IE7 en Yahoo | Guarda Lista de verificación para desarrolladores Web en IE7 en Google Bookmarks | Envía Lista de verificación para desarrolladores Web en IE7 a Furl | Envía Lista de verificación para desarrolladores Web en IE7 a Newsvine | Guarda Lista de verificación para desarrolladores Web en IE7 en Ma.gnolia.com | Envía Lista de verificación para desarrolladores Web en IE7 a Reddit | Envía Lista de verificación para desarrolladores Web en IE7 a BarraPunto | Envía Lista de verificación para desarrolladores Web en IE7 a Digg | Envía un Meme sobre Lista de verificación para desarrolladores Web en IE7 | Guarda Lista de verificación para desarrolladores Web en IE7 en del.icio.us | Envía Lista de verificación para desarrolladores Web en IE7 a Fresqui | Menea Lista de verificación para desarrolladores Web en IE7 en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070624

Patrones y antipatrones de arquitectura: Constructor

En esta ocasión continúo con la serie de artículos acerca de patrones y antipatrones de arquitectura. Espero que les sea útil. Ejemplificaré utilizando VB.NET y C# en cada uno de los patrones.

Tipo de patrón

Creador de objetos

Objetivo

Separar la trucción de un objeto complejo de su representación, de modo que un solo constructor pueda crear diferentes representaciones.

Motivación

Es importante en muchos casos tener objetos que tienen diferentes características pero que comparten una estructura en común, el problema viene de que los diferentes objetos en común pueden ser ilimitados, por lo tanto es muy útil el poder modificar las diferentes opciones sin tener que modificar el objeto que lee las características. Cada uno de los sub objetos de la clase principal se especializan en diferentes características pero se construyen desde un solo lugar. El patrón constructor captura todas las relaciones entre la clase principal y sus subclases, cada subclase especializada es llamada constructor especializado y el lector de sub clases es llamado director.

Aplicación

Debe usarse el patrón Constructor cuando el algoritmo para la creación de un objeto complejo deba ser independiente de las partes que lo conforman y cómo son ensambladas y cuando el proceso de construcción deba permitir diferentes representaciones del objeto construído.

Estructura

Patrón constructor en VB .NET

Patrón constructor en C#

Participantes

Constructor: ConstructorDeDodgeAvenger. Establece una interfase abstracta para crear las partes de un objeto producto.

Constructores concretos: Avenger20SEMTX, Avenger24SEATX, AvengerSXTATX y AvengerSXTATXSport. Construyen y ensamblan partes del producto implementando la interfase del constructor.

Director: Armadora. Construye un objeto utilizando la interfase del constructor.

Producto: DodgeAvenger. Representa el objeto concreto que se está construyendo, los constructores concretos construyen la represeon interna del producto y definen el proceso por el cuál es ensamblado. Incluye clases que definen las partes que lo constituyen, incluyendo las interfases para ensamblar las partes en el resultado final.

Colaboración

  • El Cliente crea el objeto Director y lo configura utilizando el constructor deseado.
  • El Director notifica al Constructor cuando una parte del producto debe ser construída.
  • El Constructor maneja las peticiones del Director y añade las partes del Producto.
  • El Cliente obtiene el producto del Constructor.

El siguiente diagrama de interacción ilustra la manera en que el objeto Constructor y el objeto Director interactúan con el Cliente.

Diagrama de interacción patrón Constructor

Consecuencias

Los beneficios del uso del patrón Constructor son los siguientes:

  • Permite variar la representación interna de un producto.
  • Aisla el código de representación y el de construción.
  • Da un mayor control en el proceso de construcción.

Implementación

Un ejemplo de implementación puede ser un configurador de automóviles, este genera las propiedades comunes del modelo de automóvil pero deja a los constructores concretos la tarea de asignar accesorios opcionales según el tipo de edición de atomóvil que se elija construír. Nuevas ediciones (representaciones) del mismo modelo de automóvil pueden construírse sobre la misma clase constructora sin necesidad de cambiar la lógica de construcción de las demás ediciones.

Código de ejemplo

VB.NET

Namespace Patrones
Public Enum TipoDeEstereo
AM_FM_CD_MP3
AM_FM_CD_MP3_ControlDeAudioEnElVolante
End Enum
Public Enum NumeroDeBocinas
Cuatro = 4
Seis = 6
End Enum
Public Enum TipoDeVolante
Plastico_AjusteInclinacion_AjusteTelescopico
Piel_AjusteInclinacion_AjusteTelescopico
End Enum
Public Enum TipoDeRines
Acero17
Aluminio17
End Enum
Public Enum TipoMotor
_1998_4cil_16valvulasDOHC
_2360_4cil_16valvulasDOHC
End Enum
Public Enum Potencia
_158HP_6400rpm
_172HP_6000rpm
End Enum
Public Enum Torque
_141Lb_Ft_5000rpm
_165Lb_Ft_4400rpm
End Enum
Public Enum Transmision
Manual5Velocidades
Automatica4Velocidades
End Enum
Public Class DodgeAvenger
Dim _Estereo As TipoDeEstereo
Dim _Bocinas As NumeroDeBocinas
Dim _ControlDeVelocidad As Boolean = True
Dim _Acabados As String = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas"
Dim _Seguros As String = "Eléctricos a control remoto"
Dim _Vestiduras As String = "Tela"
Dim _Volante As TipoDeVolante
Dim _Direccion As String = "Hidráulica"
Dim _AireAcondicionado As Boolean = True
Dim _Retrovisores As String = "Electricos"
Dim _Cristales As String = "Electricos"
Dim _Rines As TipoDeRines
Dim _Frenos As String = "2 De disco 2 ventilados delanteros"
Dim _InmovilizadorElectronicoMotor As Boolean = True
Dim _BolsasDeAire As String = "Conductor y pasajero"
Dim _Motor As TipoMotor
Dim _Potencia As Potencia
Dim _Torque As Torque
Dim _Transmision As Transmision
Dim _Spoiler As Boolean
Dim _UConnect As Boolean
Dim _Quemacocos As Boolean
Dim _FarosDeNiebla As Boolean
Public Sub New()
End Sub
Public Sub ConfiguraEstereo(ByVal estereo As TipoDeEstereo)
Me._Estereo = estereo
End Sub
Public Sub ConfiguraBocinas(ByVal bocinas As NumeroDeBocinas)
Me._Bocinas = bocinas
End Sub
Public Sub ConfiguraVolante(ByVal volante As TipoDeVolante)
Me._Volante = volante
End Sub
Public Sub ConfiguraRines(ByVal rines As TipoDeRines)
Me._Rines = rines
End Sub
Public Sub ConfiguraMotor(ByVal motor As TipoMotor)
Me._Motor = motor
End Sub
Public Sub ConfiguraPotencia(ByVal potencia As Potencia)
Me._Potencia = potencia
End Sub
Public Sub ConfiguraTorque(ByVal torque As Torque)
Me._Torque = torque
End Sub
Public Sub ConfiguraTransmision(ByVal transmision As Transmision)
Me._Transmision = transmision
End Sub
Public Sub ConfiguraSpoiler(ByVal spoiler As Boolean)
Me._Spoiler = spoiler
End Sub
Public Sub ConfiguraUConnect(ByVal uConnect As Boolean)
Me._UConnect = uConnect
End Sub
Public Sub ConfiguraQuemacocos(ByVal quemaCocos As Boolean)
Me._Quemacocos = quemaCocos
End Sub
Public Sub ConfiguraFarosDeNiebla(ByVal farosDeNiebla As Boolean)
Me._FarosDeNiebla = farosDeNiebla
End Sub
End Class
Friend MustInherit Class ConstructorDeDodgeAvenger
Protected Avenger As DodgeAvenger
Public Sub New()
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.Avenger
End Function
Public Sub CreaNuevoAvenger()
Me.Avenger = New DodgeAvenger()
End Sub
Public MustOverride Sub PreparaEstereo()
Public MustOverride Sub PreparaBocinas()
Public MustOverride Sub PreparaVolante()
Public MustOverride Sub PreparaRines()
Public MustOverride Sub PreparaMotor()
Public MustOverride Sub PreparaPotencia()
Public MustOverride Sub PreparaTorque()
Public MustOverride Sub PreparaTransmision()
Public MustOverride Sub PreparaSpoiler()
Public MustOverride Sub PreparaUConnect()
Public MustOverride Sub PreparaQuemacocos()
Public MustOverride Sub PreparaFarosDeNiebla()
End Class
Friend Class Avenger20SEMTX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SEATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Acero17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATX
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(False)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(False)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(False)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(False)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Avenger24SXTATXSport
Inherits ConstructorDeDodgeAvenger
Public Overrides Sub PreparaBocinas()
MyBase.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis)
End Sub
Public Overrides Sub PreparaEstereo()
MyBase.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante)
End Sub
Public Overrides Sub PreparaFarosDeNiebla()
MyBase.Avenger.ConfiguraFarosDeNiebla(True)
End Sub
Public Overrides Sub PreparaMotor()
MyBase.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC)
End Sub
Public Overrides Sub PreparaPotencia()
MyBase.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm)
End Sub
Public Overrides Sub PreparaQuemacocos()
MyBase.Avenger.ConfiguraQuemacocos(True)
End Sub
Public Overrides Sub PreparaRines()
MyBase.Avenger.ConfiguraRines(TipoDeRines.Aluminio17)
End Sub
Public Overrides Sub PreparaSpoiler()
MyBase.Avenger.ConfiguraSpoiler(True)
End Sub
Public Overrides Sub PreparaTorque()
MyBase.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm)
End Sub
Public Overrides Sub PreparaTransmision()
MyBase.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades)
End Sub
Public Overrides Sub PreparaUConnect()
MyBase.Avenger.ConfiguraUConnect(True)
End Sub
Public Overrides Sub PreparaVolante()
MyBase.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico)
End Sub
End Class
Friend Class Armadora
Private ConfiguradorAvenger As ConstructorDeDodgeAvenger
Public Sub ConfiguradorDeConstructorDeDodgeAvenger(ByVal Configuracion As ConstructorDeDodgeAvenger)
Me.ConfiguradorAvenger = Configuracion
End Sub
Public Function ObtenerAvenger() As DodgeAvenger
Return Me.ConfiguradorAvenger.ObtenerAvenger()
End Function
Public Sub ConfigurarAvenger()
Me.ConfiguradorAvenger.CreaNuevoAvenger()
Me.ConfiguradorAvenger.PreparaBocinas()
Me.ConfiguradorAvenger.PreparaEstereo()
Me.ConfiguradorAvenger.PreparaFarosDeNiebla()
Me.ConfiguradorAvenger.PreparaMotor()
Me.ConfiguradorAvenger.PreparaPotencia()
Me.ConfiguradorAvenger.PreparaQuemacocos()
Me.ConfiguradorAvenger.PreparaRines()
Me.ConfiguradorAvenger.PreparaSpoiler()
Me.ConfiguradorAvenger.PreparaTorque()
Me.ConfiguradorAvenger.PreparaTransmision()
Me.ConfiguradorAvenger.PreparaUConnect()
Me.ConfiguradorAvenger.PreparaVolante()
End Sub
End Class
Friend Class Agencia
Public Sub MetodoDeLlamado()
Dim MiAgencia As Armadora = New Armadora()
Dim ConfiguradorAvenger20SEMTX As New Avenger20SEMTX()
Dim ConfiguradorAvenger24SEATX As New Avenger24SEATX()
Dim ConfiguradorAvenger24SXTATX As New Avenger24SXTATX()
Dim ConfiguradorAvenger24SXTATXSport As New Avenger24SXTATXSport()
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport)
MiAgencia.ConfigurarAvenger()
Dim AutoConfigurado As DodgeAvenger = MiAgencia.ObtenerAvenger()
End Sub
End Class
End Namespace

C#

using System;
using System.Collections.Generic;
using System.Text;
namespace Patrones{
public enum NumeroDeBocinas
{
Cuatro = 4,
Seis = 6
}
public enum Potencia
{
_158HP_6400rpm,
_172HP_6000rpm
}
public enum TipoDeEstereo
{
AM_FM_CD_MP3,
AM_FM_CD_MP3_ControlDeAudioEnElVolante
}
public enum TipoDeRines
{
Acero17,
Aluminio17
}
public enum TipoDeVolante
{
Plastico_AjusteInclinacion_AjusteTelescopico,
Piel_AjusteInclinacion_AjusteTelescopico
}
public enum TipoMotor
{
_1998_4cil_16valvulasDOHC,
_2360_4cil_16valvulasDOHC
}
public enum Torque
{
_141Lb_Ft_5000rpm,
_165Lb_Ft_4400rpm
}
public enum Transmision
{
Manual5Velocidades,
Automatica4Velocidades
}
public class DodgeAvenger
{
private string _Acabados = "Imitación aluminio en la palanca de cambios e imitación titanio en las puertas";
private bool _AireAcondicionado = true;
private NumeroDeBocinas _Bocinas;
private string _BolsasDeAire = "Conductor y pasajero";
private bool _ControlDeVelocidad = true;
private string _Cristales = "Electricos";
private string _Direccion = "Hidráulica";
private TipoDeEstereo _Estereo;
private bool _FarosDeNiebla;
private string _Frenos = "2 De disco 2 ventilados delanteros";
private bool _InmovilizadorElectronicoMotor = true;
private TipoMotor _Motor;
private Potencia _Potencia;
private bool _Quemacocos;
private string _Retrovisores = "Eléctricos";
private TipoDeRines _Rines;
private string _Seguros = "Eléctricos a control remoto";
private bool _Spoiler;
private Torque _Torque;
private Transmision _Transmision;
private bool _UConnect;
private string _Vestiduras = "Tela";
private TipoDeVolante _Volante;
public void ConfiguraBocinas(NumeroDeBocinas bocinas)
{
this._Bocinas = bocinas;
}
public void ConfiguraEstereo(TipoDeEstereo estereo)
{
this._Estereo = estereo;
}
public void ConfiguraFarosDeNiebla(bool farosDeNiebla)
{
this._FarosDeNiebla = farosDeNiebla;
}
public void ConfiguraMotor(TipoMotor motor)
{
this._Motor = motor;
}
public void ConfiguraPotencia(Potencia potencia)
{
this._Potencia = potencia;
}
public void ConfiguraQuemacocos(bool quemaCocos)
{
this._Quemacocos = quemaCocos;
}
public void ConfiguraRines(TipoDeRines rines)
{
this._Rines = rines;
}
public void ConfiguraSpoiler(bool spoiler)
{
this._Spoiler = spoiler;
}
public void ConfiguraTorque(Torque torque)
{
this._Torque = torque;
}
public void ConfiguraTransmision(Transmision transmision)
{
this._Transmision = transmision;
}
public void ConfiguraUConnect(bool uConnect)
{
this._UConnect = uConnect;
}
public void ConfiguraVolante(TipoDeVolante volante)
{
this._Volante = volante;
}
}
internal abstract class ConstructorDeDodgeAvenger
{
protected DodgeAvenger Avenger;
public void CreaNuevoAvenger()
{
this.Avenger = new DodgeAvenger();
}
public DodgeAvenger ObtenerAvenger()
{
return this.Avenger;
}
public abstract void PreparaBocinas();
public abstract void PreparaEstereo();
public abstract void PreparaFarosDeNiebla();
public abstract void PreparaMotor();
public abstract void PreparaPotencia();
public abstract void PreparaQuemacocos();
public abstract void PreparaRines();
public abstract void PreparaSpoiler();
public abstract void PreparaTorque();
public abstract void PreparaTransmision();
public abstract void PreparaUConnect();
public abstract void PreparaVolante();
}
internal class Avenger20SEMTX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._1998_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._158HP_6400rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._141Lb_Ft_5000rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Manual5Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SEATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Cuatro);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Acero17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Plastico_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATX : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(false);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(false);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(false);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(false);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Avenger24SXTATXSport : ConstructorDeDodgeAvenger
{
public override void PreparaBocinas()
{
base.Avenger.ConfiguraBocinas(NumeroDeBocinas.Seis);
}
public override void PreparaEstereo()
{
base.Avenger.ConfiguraEstereo(TipoDeEstereo.AM_FM_CD_MP3_ControlDeAudioEnElVolante);
}
public override void PreparaFarosDeNiebla()
{
base.Avenger.ConfiguraFarosDeNiebla(true);
}
public override void PreparaMotor()
{
base.Avenger.ConfiguraMotor(TipoMotor._2360_4cil_16valvulasDOHC);
}
public override void PreparaPotencia()
{
base.Avenger.ConfiguraPotencia(Potencia._172HP_6000rpm);
}
public override void PreparaQuemacocos()
{
base.Avenger.ConfiguraQuemacocos(true);
}
public override void PreparaRines()
{
base.Avenger.ConfiguraRines(TipoDeRines.Aluminio17);
}
public override void PreparaSpoiler()
{
base.Avenger.ConfiguraSpoiler(true);
}
public override void PreparaTorque()
{
base.Avenger.ConfiguraTorque(Torque._165Lb_Ft_4400rpm);
}
public override void PreparaTransmision()
{
base.Avenger.ConfiguraTransmision(Transmision.Automatica4Velocidades);
}
public override void PreparaUConnect()
{
base.Avenger.ConfiguraUConnect(true);
}
public override void PreparaVolante()
{
base.Avenger.ConfiguraVolante(TipoDeVolante.Piel_AjusteInclinacion_AjusteTelescopico);
}
}
internal class Armadora
{
private ConstructorDeDodgeAvenger ConfiguradorAvenger;
public void ConfiguradorDeConstructorDeDodgeAvenger(ConstructorDeDodgeAvenger Configuracion)
{
this.ConfiguradorAvenger = Configuracion;
}
public void ConfigurarAvenger()
{
this.ConfiguradorAvenger.CreaNuevoAvenger();
this.ConfiguradorAvenger.PreparaBocinas();
this.ConfiguradorAvenger.PreparaEstereo();
this.ConfiguradorAvenger.PreparaFarosDeNiebla();
this.ConfiguradorAvenger.PreparaMotor();
this.ConfiguradorAvenger.PreparaPotencia();
this.ConfiguradorAvenger.PreparaQuemacocos();
this.ConfiguradorAvenger.PreparaRines();
this.ConfiguradorAvenger.PreparaSpoiler();
this.ConfiguradorAvenger.PreparaTorque();
this.ConfiguradorAvenger.PreparaTransmision();
this.ConfiguradorAvenger.PreparaUConnect();
this.ConfiguradorAvenger.PreparaVolante();
}
public DodgeAvenger ObtenerAvenger()
{
return this.ConfiguradorAvenger.ObtenerAvenger();
}
}
internal class Agencia
{
public void MetodoDeLlamado()
{
Armadora MiAgencia = new Armadora();
Avenger20SEMTX ConfiguradorAvenger20SEMTX = new Avenger20SEMTX();
Avenger24SEATX ConfiguradorAvenger24SEATX = new Avenger24SEATX();
Avenger24SXTATX ConfiguradorAvenger24SXTATX = new Avenger24SXTATX();
Avenger24SXTATXSport ConfiguradorAvenger24SXTATXSport = new Avenger24SXTATXSport();
MiAgencia.ConfiguradorDeConstructorDeDodgeAvenger(ConfiguradorAvenger24SXTATXSport);
MiAgencia.ConfigurarAvenger();
DodgeAvenger AutoConfigurado = MiAgencia.ObtenerAvenger();
}
}
}

Usos conocidos

Ejemplos de usos conocidos son por ejemplo un parser (Director) que tome un constructor como parámetro, genere la notificación al constructor cada que reconozca una construcción válida y rerese el resultado al cliente; generar un constructor que sea producto y director al mismo tiempo y que pueda construír a partir de sus propios cambios de parámetros.

Patrones relacionados

Fabrica abstracta, Combinación

Etiquetas: , , , , ,

Patrones y antipatrones de arquitectura: Constructor

Escrito por Alfonso Lara Ramos @ 17:47 0 comentarios

Busca Patrones y antipatrones de arquitectura: Constructor en Technorati | Guarda Patrones y antipatrones de arquitectura: Constructor en Yahoo | Guarda Patrones y antipatrones de arquitectura: Constructor en Google Bookmarks | Envía Patrones y antipatrones de arquitectura: Constructor a Furl | Envía Patrones y antipatrones de arquitectura: Constructor a Newsvine | Guarda Patrones y antipatrones de arquitectura: Constructor en Ma.gnolia.com | Envía Patrones y antipatrones de arquitectura: Constructor a Reddit | Envía Patrones y antipatrones de arquitectura: Constructor a BarraPunto | Envía Patrones y antipatrones de arquitectura: Constructor a Digg | Envía un Meme sobre Patrones y antipatrones de arquitectura: Constructor | Guarda Patrones y antipatrones de arquitectura: Constructor en del.icio.us | Envía Patrones y antipatrones de arquitectura: Constructor a Fresqui | Menea Patrones y antipatrones de arquitectura: Constructor en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070622

Expert Zone 2007

Te extiendo la invitación para que ingreses al Expert Zone, un evento online para Profesionales de TI y Desarrolladores de software, que tiene como proposito facilitar el intercambio de ideas y conocimientos. Esta conferencia utilizara una plataforma virtual que te conecta con expertos de toda la region sin importar tu ubicacion geografica, por lo que lo unico que necesitas para participar es una conexion a Internet desde tu trabajo o residencia.

Microsoft Expert Zone 2007

Sitio Web de Expert Zone 2007

Etiquetas: , , , , , , , ,

Expert Zone 2007

Escrito por Alfonso Lara Ramos @ 15:00 0 comentarios

Busca Expert Zone 2007 en Technorati | Guarda Expert Zone 2007 en Yahoo | Guarda Expert Zone 2007 en Google Bookmarks | Envía Expert Zone 2007 a Furl | Envía Expert Zone 2007 a Newsvine | Guarda Expert Zone 2007 en Ma.gnolia.com | Envía Expert Zone 2007 a Reddit | Envía Expert Zone 2007 a BarraPunto | Envía Expert Zone 2007 a Digg | Envía un Meme sobre Expert Zone 2007 | Guarda Expert Zone 2007 en del.icio.us | Envía Expert Zone 2007 a Fresqui | Menea Expert Zone 2007 en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070527

Los 10 errores de seguridad más comunes en ASP .NET

A continuación les enumeraré los 10 errores más comunes que se cometen cuando desplegamos una aplicación ASP.NET, les explico la razón por la que esos errores pueden ser peligrosos y les indico la manera más adecuada de corregirlos. Espero que les sea de utilidad:

  1. Custom Errors deshabilitado. En el archivo Web.config de nuestras aplicaciones ASP.NET la etiqueta custom Errors se encuentra comentada por defecto cuando creamos una nueva aplicación, esto deja el valor RemoteOnly por defecto. Sin embargo muchas veces cuando estamos probando el software en un servidor remoto hay ocasiones en las que por comodidad dejamos el valor en Off, esto permite a todos los usuarios que ingresan a las páginas de la aplicación enterarse de los errores que suceden en la aplicación, al momento de depurar. Sin embargo esto no es bueno al momento de desplegar, puesto que cualquiera puede también ver pedazos de código cuando hay alguna falla. Lo más adecuado es prender la opción, lo cual puedes aprovechar para mostrar errores más amigables al usuario, esto incluso te sirve para optimizar para buscadores ;-). Un ejemplo de cómo prender esta opción es el siguiente:
    <customErrors mode="On">
    <error statusCode="404" redirect="default.aspx" />

    </customErrors>
  2. Dejar habilitado el seguimiento de la página. El seguimiento de página (tracing) normalmente se encuentra apagado, sin embargo también por cuestiones de depuración puede encenderse, la forma más sencilla es hacerlo en el archivo que estemos trabaando utilizando la etiqueta Trace en la declaración de página del formulario en el que estamos trabajando, sin embargo una buena práctica es hacerlo de modo sólo local (por si necesitamos que el seguimiento esté de todos modos encendido) desde el archivo Web.config y luego apagarlo al desplegar, hacerlo de esta manera encenderá el seguimiento en todos los formularios del proyecto y evitará que se nos olvide apagarlo, lo haces con la etiqueta trace de la siguiente manera:
    <trace enabled="true" traceMode="SortByTime" localOnly="true" />
  3. Depuración habilitada. Tener esta opción habilitada, afecta al rendimiento de la aplicación, muestra errores más detallados y sólo debe encenderse mientras estamos desarrollando precisamente para el proceso de depuración, la forma correcta de desplegar es dejando en el archivo Web.config la opción de depuración apagada, otra buena práctica en el caso de las aplicaciones ASP.NET creadas con Visual Basic es dejar las opciones explicit y strict encendidas, de este modo hacemos código mejor construído (léase 100 veces: no garantiza que perfectamente construído, pero ayuda). La forma de configurar esto es de la siguiente manera:
    <compilation debug="true" strict="true" explicit="true"/>
  4. Cookies suplantables. Los hackers pueden realizar ataques de XSS (Cross Site Scripting) cuando las cookies son accesibles del lado del cliente, intentan este tipo de ataques cuando se encuentran por ejemplo con saludos del tipo Hola ChicoDotNet en las páginas en la que se inicia sesión agregando su propio código del lado del cliente. Esto puedes dificultarlo fácilmente -valga la redundancia- cuando enciendes las cookies HttpOnly, esto se hace de la siguiente forma:
    <httpCookies httpOnlyCookies="true" />
  5. Sesión sin cookies. Para hacer disponible una aplicación a los clientes que no aceptan cookies se tiene la opción de colocar la sesión en la URL, muchos las utilizan por defecto para no complicarse asignando a la etiqueta sessionState el atributo cookieless con el valor UseUri, sin embargo esto abre la posibilidad de suplantar a un usuario determinado visitando la dirección que contiene la sesión, esto puedes evitarlo almacenando la sesión en una cookie que expire pronto, pero queda el problema de los clientes que no aceptan cookies, para ellos necesitas enviar la sesión en la URL, ¿Cómo resolver eso?, enciende la autodetección, eso hará que los clientes que las acepten las usen y los que no las reciban en la URL, se hace con el siguiente código en Web.config:
    <sessionState cookieless="AutoDetect" />
  6. No emitir cookies seguras. Las cookies seguras se emiten utilizando SSL, esto hace que la transmisión se realice en forma encriptada, para configurar SSL en IIS puedes ver el artículo en MSDN que te indica como hacerlo en IIS 6.0, en el caso de IIS 7.0 es mucho más sencillo como ya había mencionado anteriormente. Para la configuración de la transmisión de las cookies por medio de SSL utiliza el siguiente código:
    <authentication mode="Forms">
    <forms requireSSL="true" />
    </authentication>
  7. Sesiones alargables. Para alargar el tiempo de expiración de una sesión se utiliza el atributo slidingExpiration de la etiqueta forms, esto da mayor tiempo a los hackers para suplantar a un usuario determinado, la recomendación es dejarlo como se indica a continuación:
    <forms slidingExpiration="true" />
    .
  8. Uso de cookies de autenticación por defecto. El nombre por defecto de una cookie de autenticación es .ASPXAUTH, una buena práctica es nombrar estas de manera distinta, por ejemplo utilizando un GUID, de esta manera evitamos que alguien que se firme en una aplicación del servidor y pueda modificar la cookie para firmarse en otra utilizando la primera cookie obtenida. Este valor se pondría en el lugar que indico a continuación:
    <authentication mode="Forms">
    <forms name="{80aae8ec-cee2-46bc-ba57-eb89cd3db488}" requireSSL="true" />
    </authentication>
  9. Paso de variables por URL. El uso de Request.Querystring("variable") para operaciones de negocios debe ser evitado, sobre todo si se trata de información sensible, se debe preferir el uso de variables de sesión o de ViewState, de otro modo cualqueir persona con algo de conocimientos de programación podría hacer ataques de XSS o de SQL injection.
  10. Credenciales o cadenas de conexión en Web.config. Esto es lo más común de la lista, debe evitarse a toda costa el guardar usuarios y contraseñas en etiquetas credentials y cadenas de conexión o configuraciones de aplicación en Web.config sin antes cifrarlas adecuadamente. O. K., IIS evita la descarga de estos archivos de forma remota, pero ¿Qué me dicen de los del hosting? Hay que tener mucho cuidado con esto.

Etiquetas: , , , , , , , ,

Escrito por Alfonso Lara Ramos @ 06:25 0 comentarios

Busca Los 10 errores de seguridad más comunes en ASP .NET en Technorati | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Yahoo | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Google Bookmarks | Envía Los 10 errores de seguridad más comunes en ASP .NET a Furl | Envía Los 10 errores de seguridad más comunes en ASP .NET a Newsvine | Guarda Los 10 errores de seguridad más comunes en ASP .NET en Ma.gnolia.com | Envía Los 10 errores de seguridad más comunes en ASP .NET a Reddit | Envía Los 10 errores de seguridad más comunes en ASP .NET a BarraPunto | Envía Los 10 errores de seguridad más comunes en ASP .NET a Digg | Envía un Meme sobre Los 10 errores de seguridad más comunes en ASP .NET | Guarda Los 10 errores de seguridad más comunes en ASP .NET en del.icio.us | Envía Los 10 errores de seguridad más comunes en ASP .NET a Fresqui | Menea Los 10 errores de seguridad más comunes en ASP .NET en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070526

patterns & practices Web Client Software Factory

patterns & practices Web Client Software Factory es un kit que sirve a arquitectos y desarrolladores como base para la implementación de buenas prácticas en el desarrollo de aplicaciones Web ASP.NET que tengan flujos de página o flujos de trabajo complicados, que sean desarrollados por equipos de trabajo distribuídos, que obtengan información de diversas fuentes en interfases de usuario integradas y que soporten transacciones de negocio, todo ello con la posibilidad de desplegar la aplicación en forma modular.

Las ventajas de usar estas plantillas es que al integrar la interfase de usuario en múltiples módulos que desarrollen varios equipos de desarrollo se unifica la experiencia de usuario, esto reduce la complejidad del uso de diferentes aplicaciones para los usuarios finales, además como se pueden desplegar las aplicaciones modularmente las actualizaciones o nuevas características se pueden fácilmente actualizar independientemente de los tiempos en que los requerimientos de los usuarios son atendidos por los equipos de desarrollo.

Incluye módulos de autenticación, bitácoras, manejo de excepciones, autorización y plantillas de ambiente que a fin de cuentas parecen desarrollados por la misma persona o equipo independientemente de que no sea así. Aprovecha las tecnologías de SiteMaps, el ASP.NET role manager, la Enterprise Library Security Application Block y crea los bloques de pruebas, además de que incluye un diseñador de flujos de páginas por lo que cada desarrollador se puede enfocar en programar únicamente la lógica de negocio una vez ajustadas las plantillas iniciales.

Las descargas de documentación y el kit de desarrollo son gratuitas. Incluye librerías, plantillas, diseñadores de flujos, una implementación de ejemplo, guía para arquitectos, patrones y tópicos de cómo hacer las cosas.

Etiquetas: , , , , , , ,

Escrito por Alfonso Lara Ramos @ 13:28 0 comentarios

Busca patterns & practices Web Client Software Factory en Technorati | Guarda patterns & practices Web Client Software Factory en Yahoo | Guarda patterns & practices Web Client Software Factory en Google Bookmarks | Envía patterns & practices Web Client Software Factory a Furl | Envía patterns & practices Web Client Software Factory a Newsvine | Guarda patterns & practices Web Client Software Factory en Ma.gnolia.com | Envía patterns & practices Web Client Software Factory a Reddit | Envía patterns & practices Web Client Software Factory a BarraPunto | Envía patterns & practices Web Client Software Factory a Digg | Envía un Meme sobre patterns & practices Web Client Software Factory | Guarda patterns & practices Web Client Software Factory en del.icio.us | Envía patterns & practices Web Client Software Factory a Fresqui | Menea patterns & practices Web Client Software Factory en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

20070524

Patrones y antipatrones de arquitectura: Singleton

En esta ocasión iniciaré una serie de artículos acerca de patrones y antipatrones de arquitectura. Espero que les sea útil. Ejemplificaré utilizando VB.NET y C# en cada uno de los patrones.

Tipo de patrón

Creador de objetos

Objetivo

Asegura que una clase determinada únicamente tenga una instancia y da acceso global a ella.

Motivación

Es importante en muchos casos que una clase tenga una instancia única, esto por ejemplo aplica a manejadores de ventanas, sistemas de archivos y de manera más sencilla clases que tienen propiedades y métodos que se utilizan durante todas las actividades de un sistema una y otra vez llamadas desde muchas otras instancias, por ejemplo un proveedor de acceso a datos. Un mecanismo adecuado para lograr esto es que la clase por si misma se construya, se exponga globalmente a todo el ensamblado y evite que otras clases la puedan construir nuevamente.

Aplicación

Debe usarse el patrón Singleton cuando deba haber una sola instancia de una clase y esta pueda ser accedida desde un punto conocido por sus clientes y cuando esta instancia deba ser extendida por sub clases sin modificar su programación.

Estructura

Patrón singleton en VB .NET

Patrón singleton en C#

Participantes

Singleton

Colaboración

Los clientes accesan al singleton solamente a partir de su operación

Consecuencias

Los beneficios del uso del patrón Singleton son los siguientes:

  • Acceso controlado a una sola instancia
  • Espacio de nombres reducido
  • Permite extender la funcionalidad por medio de sub clases
  • Permite usar un numero variable de instancias solo cambiando la operación que concede acceso a la clase Singleton
  • Es más flexible que exponer operaciones estáticas de clase

Implementación

Un ejemplo de implementación puede ser un proveedor de acceso a datos multi-base de datos, este se extiende por medio de la implementación de interfases para incluir nuevas sub clases que acepten nuevos proveedores en el caso de nuevas versiones o cambios de plataformas, la lógica de negocio siempre trabajará con la instancia Singleton Datos y toda la operación nueva o modificada se podrá implementar fácilmente sin modificar el resto de la programación, además de encolar los procesos transaccionales.

Código de ejemplo

VB.NET

Imports System.Runtime.CompilerServices
Public Class Singleton
Private Shared _Instancia As Singleton
<MethodImpl(MethodImplOptions.Synchronized)>_
Private Sub New()
If _Instancia Is Nothing Then
_Instancia = New Singleton()
End If
End Sub
Public Shared ReadOnly Property Instancia() As Singleton
Get
Return _Instancia
End Get
End Property
End Class

C#

using System.Runtime.CompilerServices;
public class Singleton {
private static Singleton _Instancia;
[MethodImpl(MethodImplOptions.Synchronized)]
private Singleton() {
if (_Instancia == null){
_Instancia = new Singleton();
}
}
public static Singleton Instancia {
get {
return _Instancia;
}
}
}

Usos conocidos

Un ejemplo de usos conocidos es la relación entre las clases y sus respectivas metaclases y las interfases únicas en los patrones de fábrica abstracta, constructor y prototipo.

Patrones relacionados

Fabrica abstracta, Constructor, Prototipo

Etiquetas: , , , , ,

Escrito por Alfonso Lara Ramos @ 18:03 0 comentarios

Busca Patrones y antipatrones de arquitectura: Singleton en Technorati | Guarda Patrones y antipatrones de arquitectura: Singleton en Yahoo | Guarda Patrones y antipatrones de arquitectura: Singleton en Google Bookmarks | Envía Patrones y antipatrones de arquitectura: Singleton a Furl | Envía Patrones y antipatrones de arquitectura: Singleton a Newsvine | Guarda Patrones y antipatrones de arquitectura: Singleton en Ma.gnolia.com | Envía Patrones y antipatrones de arquitectura: Singleton a Reddit | Envía Patrones y antipatrones de arquitectura: Singleton a BarraPunto | Envía Patrones y antipatrones de arquitectura: Singleton a Digg | Envía un Meme sobre Patrones y antipatrones de arquitectura: Singleton | Guarda Patrones y antipatrones de arquitectura: Singleton en del.icio.us | Envía Patrones y antipatrones de arquitectura: Singleton a Fresqui | Menea Patrones y antipatrones de arquitectura: Singleton en Menéame

Contenidos relacionados: Google, Live Search, Tafiti, Yahoo

Lecturas recomendadas


Suscripciones

Impulsado por FeedBurner
Impulsado por Feedburner
Suscríbete a ChicoDotNet utilizando Google Suscríbete a ChicoDotNet utilizando netomat Hub Suscríbete a ChicoDotNet utilizando Plusmo Suscríbete a ChicoDotNet utilizando Newsburst Suscríbete a ChicoDotNet utilizando Attensa Suscríbete a ChicoDotNet utilizando My Yahoo Suscríbete a ChicoDotNet utilizando NewsGator Suscríbete a ChicoDotNet utilizando netvibes Suscríbete a ChicoDotNet utilizando The Free Dictionary Suscríbete a ChicoDotNet utilizando Bitty Suscríbete a ChicoDotNet utilizando Excite MIX Suscríbete a ChicoDotNet utilizando Pluck Suscríbete a ChicoDotNet utilizando Webwag Suscríbete a ChicoDotNet utilizando podnova Suscríbete a ChicoDotNet utilizando ZapTXT Suscríbete a ChicoDotNet utilizando NewsAlloy Suscríbete a ChicoDotNet utilizando flurry Suscríbete a ChicoDotNet utilizando Pageflakes Suscríbete a ChicoDotNet utilizando ODEO Suscríbete a ChicoDotNet utilizando PodcastReady Suscríbete a ChicoDotNet utilizando Bloglines Suscríbete a ChicoDotNet utilizando My AOL Suscríbete a ChicoDotNet utilizando Rojo

Portal de contenidos impulsado por Blogger | Ejemplos de código impulsados por ASP .NET 2.0 | Sindicación Atom válida | Sindicación RSS 2.0 válida | ChicoDotNet es un portal impulsado por Aynkia Desarrollo: Aplicaciones Web, Windows y Smart Client | ©© Algunos derechos reservados 2006 Aynkia Systems Consultores. El contenido de este sitio Web está regulado por una licencia Creative Commons Attribution 2.5 License

Ranking de ChicoDotNet en Blogalaxia

Obtén vistas previas utilizando Snap.com