En la parte 1, ya se comentaron algunas de las nuevas características de SQL 2008, en este post comentare algunas novedades relacionadas con el manejo y programación de SQL 2008.
Antes que nada, me llama la atención que algunas de estas novedades, existan ya desde hace algunos años en Oracle, lo que me deja la impresión de que MS-SQL aun esta tratando de alcanzar a Oracle con respecto a funcionalidad.
Adicción en vivo de CPU
Imaginemos el escenario de cierre de mes en una empresa de tamaño medio a grande, los servidores de base de datos están al 100% y todavía faltan algunas hora para que el cierre termine; mientras tanto tenemos por ahí un par de CPU que no se están utilizando en producción porque ya es media noche y producción no trabaja de noche, que desperdicio.
Bueno, pues con SQL 2008 y hardware que soporte la adición de CPUs en vivo, vamos a poder trasladar temporalmente esos CPUs ociosos a nuestro servidor de finanzas para tratar de acelerar el proceso de cierre mensual. De igual forma si nuestro servidor es una maquina virtual también vamos a poder adicionarle mas CPUs ociosos.
Solo basta agregar los nuevos CPUs y ejecutar RECONFIGURE para notificarle al SQL que puede hacer uso de esos CPUs y listo, no es necesario interrumpir el proceso actual, el SQL va a distribuir carga sobre los nuevos CPUs.
Gobernador de recursos
A quien no le pasado que tiene un programa de terceros que hace uso de nuestra base de datos, y el programa es terriblemente ineficiente, y cada vez que se ejecuta "ahoga" al CPU o la memoria, bloqueando otros procesos en el servidor de SQL?, pero el proveedor no ha podido solucionar el problema y el programa es necesario que se ejecute...
Bueno con SQL 2008 vamos a poder limitar esos programas voraces para que usen solo un limitado porcentaje del CPU o de la memoria. A través de grupos vamos a poder catalogar esos procesos "groseros" y restringirlos en el uso de recursos de manera que otros procesos que si se comportan bien, también puedan hacer uso de los preciados recursos.
Filestream
Inicialmente las base de datos relacionales fueron concebidas para almacenar información estructurada en forma de tablas y campos, pero en algunas ocasiones el únicamente guardar esta información no es suficiente ya que puede estar ligada a datos no estructurados como: imágenes, documentos, planos, vídeos, música, etc.
SQL permite guardar este tipo de información no estructurada en forma de BLOB (Binary Large Objects, por sus siglas en ingles), el problema es que tener este tipo de campos en una tabla, provoca una penalización de rendimiento, sobre todo cuando el tamaño de los datos no estructurados es mayor a 1MB.
Por tal motivo SQL 2008 incluye esta característica Filestream, la cual nos permite mover los campos BLOB fuera de la tabla y guardar la información no estructura en el sistema de archivos, manteniendo relación con los datos estructurados.
Esta separación trae como consecuencia mejor rendimiento de lectura en las tablas que tienen un campo Filestream, ademas de que el limite para la información no estructurada es el espacio disponible en el sistema de archivos, mientras que los campos BLOB tienen un limite de 2GB.
SQL Management Studio
El SQL Management Studio también incluye mejoras para ayudarnos al desarrollo de aplicaciones, la primera de ellas, es la inclusión de Intellisense, la que va auto-completando nombre de los objetos en la base de datos conforme tecleamos las primeras letras del nombre. Esta funcionalidad es de mucha ayuda cuando el esquema de la base de datos nos es relativamente nuevo.
La otra mejora, es la inclusión de un depurador para T-SQL, que nos permite ejecutar linea por linea de un procedimiento almacenado o una función, funcionalidad que anteriormente solo estaba disponible en Visual Studio.
Programación
Por el lado de la programación también hay varias mejoras, pero hay dos que en lo personal me llaman la atención.
A quien no le ha pasado que tiene en una tabla un campo datetime y la lógica para un reporte necesitamos hacer un DISTINCT sobre este campo para obtener las fechas donde hubo transacciones en este mes, pero... este campo también tiene la hora en que se capturo la transacción!!, por lo tanto esta solución simple no funciona, hay que buscar alguna forma de "truncar" la fecha, oh pero esperen, no hay una forma sencilla de hacer esto.
Aquí es donde los nuevos tipos de datos entran al rescate: DATE y TIME, si, como posiblemente adivinaron DATE solo almacena la parte de la fecha y TIME solo almacena la parte de la hora.
Por lo tanto para solucionar el problema planteado arriba, basta con realizar un CAST de nuestra campo DATETIME a DATE y vóila, ya podemos realizar el DISTINCT y obtener el resultado que buscamos.
Ahora veamos el problema de que tenemos una tabla con ciertos registros, pero necesitamos actualizarlos a partir de otra tabla, en la tabla fuente tenemos registros que son nuevos, que necesitan ser borrados y que necesitan ser actualizados en nuestra tabla destino.
Lo normal seria escribir la lógica por separado para cada una de las posibles operaciones y de esa forma mantener nuestra tabla destino actualizada, bueno con SQL 2008 se incluye la instrucción MERGE, la cual nos permite sincronizar las dos tablas (fuente y destino) en una sola instrucción.
Merge existía en el beta 1 de SQL 2005, pero misteriosamente desapareció en el beta 2, ahora finalmente llego con SQL 2008.
Por el momento es todo en esta primera y segunda parte sobre las novedades en el SQL 2008. Para mayor información favor visitar la documentación del SQL 2008
jueves, agosto 14, 2008
miércoles, agosto 13, 2008
Horarios de ISC en el ITT
Los horarios de las carrera ISC del ITT son los siguientes, darle click a la hoja de horarios completa para ir al sitio donde están las imágenes donde se aprecian mejor los horarios para cada semestre.
Para información de la asesoría y la re-inscripcion favor de visitar esta pagina.
Para información de la asesoría y la re-inscripcion favor de visitar esta pagina.
Etiquetas:
ITT
La arquitectura de cebolla: parte 2
En la parte 1 se introdujo el patrón arquitectural llamado "La arquitectura de cebolla". Los conceptos de diseño orientado a objetos no es nuevo, pero el agrupar estas técnicas y convenciones en un patrón único, nos da como resultado esta arquitectura propuesta. La idea en general, es que la industria utilice este nombre para comunicar estos conceptos de forma apropiada.
Ejemplo practico
CodeCampServer hace uso de la arquitectura de cebolla. Si estas buscado por una aplicación de ejemplo, completa y funcional, esta es la aplicación a observar. Este ejemplo practico, se basa directamente en el CodeCampServer. Es un ejemplo de una aplicación vertical. El alcance de este ejemplo va a ser muy pequeño, con la finalidad de que sea digerible.
Primeramente comenzaremos con un diagrama para entender donde es que reside el código dentro de las capas de la cebolla.

CodeCampServer hace uso del framework ASP.NET MVC, así SpeakerController es parte de la interface de usuario. Este controlador esta acoplado con el framework ASP.NET. SpeakerController depende de IConferenceRepository y IUserSession (también de IClock, pero vamos a omitir eso). El controlador solo depende de interfaces, las cuales están definidas en la base de la aplicación. Hay que recordar que todas las dependencias van dirigidas hacia el centro.
Ahora vamos a poner nuestra atención a las clases ConferenceRepository y UserSession. Hay que notar que están definidas en capas fuera de la base de la aplicación, y ellas dependen de interfaces también, de manera que puedan ser implementadas por estas clases. Estas dos clases implementan interfaces que existen muy cerca al centro. Al momento de ejecución el contener de Control de Inversión (Inversion of Control) va a buscar en su registro y construir las clases apropiadas para satisfacer las dependencias en el constructor de la clase SpeakerController, aquí se muestra parte del código:
public SpeakerController(IConferenceRepository conferenceRepository,
IUserSession userSession, IClock clock)
: base(userSession)
{
_conferenceRepository = conferenceRepository;
_clock = clock;
_userSession = userSession;
}
Así que al momento de ejecución el contenedor IoC resolverá las clases que implementan las interfaces y las pasa al constructor de SpeakerController. En este punto, SpeakerController pueda realizar su trabajo.
De acuerdo con las reglas de la arquitectura de cebolla, SpeakerController PODRIA hacer uso directo de UserSession, debido a que están ambas clases en la misma capa, pero no así en el caso de ConferenceRepository. El controlador debe de apoyarse en ayuda externa para obtener una instancia de IConferenceRepository. Este patrón es utilizado en toda a aplicación, el contener IoC nos ayuda a que sea transparente para nosotros.
Al final de estas series, el plan es publicar un sistema completo que este basado en esta arquitectura.
Jeffry Palermo CTO de Headspring Systems en Austin, TX, es ademas MCSD.Net, Microsoft MVP, Scrummmaster certificado, líder del grupo Austin .Net, miembro del consejo AgileAustin, ponente de INETA y mentor de INETA.
Ejemplo practico
CodeCampServer hace uso de la arquitectura de cebolla. Si estas buscado por una aplicación de ejemplo, completa y funcional, esta es la aplicación a observar. Este ejemplo practico, se basa directamente en el CodeCampServer. Es un ejemplo de una aplicación vertical. El alcance de este ejemplo va a ser muy pequeño, con la finalidad de que sea digerible.
Primeramente comenzaremos con un diagrama para entender donde es que reside el código dentro de las capas de la cebolla.
CodeCampServer hace uso del framework ASP.NET MVC, así SpeakerController es parte de la interface de usuario. Este controlador esta acoplado con el framework ASP.NET. SpeakerController depende de IConferenceRepository y IUserSession (también de IClock, pero vamos a omitir eso). El controlador solo depende de interfaces, las cuales están definidas en la base de la aplicación. Hay que recordar que todas las dependencias van dirigidas hacia el centro.
Ahora vamos a poner nuestra atención a las clases ConferenceRepository y UserSession. Hay que notar que están definidas en capas fuera de la base de la aplicación, y ellas dependen de interfaces también, de manera que puedan ser implementadas por estas clases. Estas dos clases implementan interfaces que existen muy cerca al centro. Al momento de ejecución el contener de Control de Inversión (Inversion of Control) va a buscar en su registro y construir las clases apropiadas para satisfacer las dependencias en el constructor de la clase SpeakerController, aquí se muestra parte del código:
public SpeakerController(IConferenceRepository conferenceRepository,
IUserSession userSession, IClock clock)
: base(userSession)
{
_conferenceRepository = conferenceRepository;
_clock = clock;
_userSession = userSession;
}
Así que al momento de ejecución el contenedor IoC resolverá las clases que implementan las interfaces y las pasa al constructor de SpeakerController. En este punto, SpeakerController pueda realizar su trabajo.
De acuerdo con las reglas de la arquitectura de cebolla, SpeakerController PODRIA hacer uso directo de UserSession, debido a que están ambas clases en la misma capa, pero no así en el caso de ConferenceRepository. El controlador debe de apoyarse en ayuda externa para obtener una instancia de IConferenceRepository. Este patrón es utilizado en toda a aplicación, el contener IoC nos ayuda a que sea transparente para nosotros.
Al final de estas series, el plan es publicar un sistema completo que este basado en esta arquitectura.
Jeffry Palermo CTO de Headspring Systems en Austin, TX, es ademas MCSD.Net, Microsoft MVP, Scrummmaster certificado, líder del grupo Austin .Net, miembro del consejo AgileAustin, ponente de INETA y mentor de INETA.
Etiquetas:
.NET,
Arquitectura,
Linux
martes, agosto 12, 2008
Innscripciones semestre Ago-Dic 2008 en el ITT
Ya esta proximo a iniciar un nuevo semestre en Instituto Tecnologico de Tijuana, de hecho esta semana inicial las actividades para el proceso de resinscripcion, pero en el sitio web NO HAN PUBLICADO NADA al respecto.
Por tal motivo aqui les proporciono la siguiente informacion que me paso mi hermano.
Primeramente las asesorias academicas empiezan de la siguiente manera - informacion para la carrera de ISC -:
- 13 de agosto, alumnos de los semestres 2, 3 y 4
- 14 de agosto, alumnos de los semestres 5, 6 y 7
- 15 de agosto, alumnos de 8, 9 y otros
Las ordenes de reinscripcion para todas la carreras se encuentra aqui. Los datos para el pago son los siguientes:
- Costo de semestre: $1,900.00 MN
- Referencia bancaria: 5200212-8
- Banco: SCOTIABANK INVERLAT
- No. Cuenta: 13002648938
Nota 2: El lugar para resincripcion de TODAS LAS CARRERAS va a ser en la unidad Otay (En el centro de computo), no importa si las clases se llevan en la unidad Tomas Aquino.
Ya que han estado preguntando... No hay horarios para las asesorias solo se sabe que van a ser de 9 am a 5 pm el dia que le corresponda a cada quien. La asesoria se va a realizar en la coordinacion de cada carrera. La inscripcion es la que se va a realizar en el centro de computo.!!!
Etiquetas:
ITT
viernes, agosto 08, 2008
Novedades en SQL 2008: Parte 1
SQL 2008 por fin alcanzo la meta de ser RTM (Release for manufacturing, por sus siglas en ingles), lo que indica que próximamente se podrá adquirir oficialmente; aunque ya esta disponible para los subscriptores que MSDN y TechNET.
Leyendo la documentación, me encuentro con una serie de nueva funcionalidad o funcionalidad mejorada que en lo particular me interesa; por tal motivo, en esta primera parte voy a describir estas nuevas o mejoradas características en relación al motor de la base de datos.
Administración de la base de datos
Compresión en los respaldos: Esta funcionalidad que anterior a SQL 2008 solo encontrábamos con herramientas de terceros, ahora es parte de SQL. A partir de ahora podemos comprimir nuestros respaldos al momento de realizarlos.
La ventajas son que se requiere de menos tiempo tiempo, menos espacio y menor numero de operaciones I/O para respaldar nuestra información.
La desventaja, es que el algoritmo de compresión requiere de mayor uso del CPU al momento de respaldar, lo que puede provocar que ciertas operaciones tomen mas tiempo al momento de realizar respaldos.
Seguimiento de cambios: Esta es una nueva característica que proporciona una forma ligera - la penalización en rendimiento es relativamente baja - para identificar cambios realizados en las tablas de nuestra base de datos. Con este nos podemos olvidar de soluciones ad-hoc que hacen uso de triggers, timestamps y otros trucos, que por lo general son ineficientes y muy específicos para cada aplicación.
El seguimiento de cambios permite escribir aplicaciones de sincronización de una vía con otras bases de datos o bien sincronización de 2 vías, aunque aquí se requiere una mecanismo para la detección de conflictos.
Es importante mencionar que los registros que cambiaron son identificados por medio de su llave primaria, por lo tanto debe de ser una llave única a través de las diferentes bases de datos o aplicaciones que consumen esta información.
Esta característica de alguna forma me recuerda a la característica de replicacion, de tipo merge, aunque en este caso el seguimiento de cambios no incorpora mecanismo para trasladar los cambios detectados a otras bases de datos, tal y como lo hace la replicacion de tipo merge.
Captura de cambio en datos: Esta es otra nueva característica de SQL 2008, que nos permite identificar cambios en nuestros datos, pudiendo determinar que fue lo que se modifico en ellos.
Por ejemplo esta es una característica muy útil para procesos ETL (Extract, Transform, Load) en donde actualizamos los cambios que van sucediendo en nuestra base de datos a un Datamart o Datawarehouse.
La forma como funciona esta característica consiste, primero, en indicar explícitamente las tablas de las que deseamos capturar cambios, estas tablas las ligamos a una instancia de captura que es quien realiza la operación. Posteriormente nuestra instancia va a monitorear el log de la base de datos para poder determinar que registros sufrieron cambios.
Por cada tabla monitoreada se crea una nueva tabla con el mismo schema, en estas tablas copia es donde se guardan los cambios realizados por una operación del DML. En las tablas de captura vamos a encontrar nuevos registros creados, los registros que fueron eliminados y 2 registros por cada actualización, uno con la imagen de como era el registros antes del cambio y otro con el cambio sufrido en el registro.
En caso de que nuestra tabla monitoreada sufra cambios en el esquema el mecanismo de captura de cambios actuara de la siguiente forma:
- Nuevas columnas, estas serán ignoradas por el monitoreo de cambios, si nos interesa que sean monitoreadas, entonces podemos crear una nueva instancia de captura que incluya el nuevo esquema o recrear la instancia actual.
- Columnas eliminadas: En este caso se insertan valores nulos en las columnas que ya no existen
- Cambio de tipo de una columna: Para evitar perdidas en los datos, se creara una nueva columna con el nuevo tipo de dato y ahí se almacenaran los nuevos valores.
Debido a que monitoreo de cambio puede llevar a tener miles de cambios, existe un tiempo de retención, que por omisión son tres días, cambios capturados anteriores a esta fecha son eliminados de la tabla de captura.
Por el momento es todo en esta primera parte sobre las novedades en el SQL 2008. Para mayor información favor visitar la documentación del SQL 2008
Leyendo la documentación, me encuentro con una serie de nueva funcionalidad o funcionalidad mejorada que en lo particular me interesa; por tal motivo, en esta primera parte voy a describir estas nuevas o mejoradas características en relación al motor de la base de datos.
Administración de la base de datos
Compresión en los respaldos: Esta funcionalidad que anterior a SQL 2008 solo encontrábamos con herramientas de terceros, ahora es parte de SQL. A partir de ahora podemos comprimir nuestros respaldos al momento de realizarlos.
La ventajas son que se requiere de menos tiempo tiempo, menos espacio y menor numero de operaciones I/O para respaldar nuestra información.
La desventaja, es que el algoritmo de compresión requiere de mayor uso del CPU al momento de respaldar, lo que puede provocar que ciertas operaciones tomen mas tiempo al momento de realizar respaldos.
Seguimiento de cambios: Esta es una nueva característica que proporciona una forma ligera - la penalización en rendimiento es relativamente baja - para identificar cambios realizados en las tablas de nuestra base de datos. Con este nos podemos olvidar de soluciones ad-hoc que hacen uso de triggers, timestamps y otros trucos, que por lo general son ineficientes y muy específicos para cada aplicación.
El seguimiento de cambios permite escribir aplicaciones de sincronización de una vía con otras bases de datos o bien sincronización de 2 vías, aunque aquí se requiere una mecanismo para la detección de conflictos.
Es importante mencionar que los registros que cambiaron son identificados por medio de su llave primaria, por lo tanto debe de ser una llave única a través de las diferentes bases de datos o aplicaciones que consumen esta información.
Esta característica de alguna forma me recuerda a la característica de replicacion, de tipo merge, aunque en este caso el seguimiento de cambios no incorpora mecanismo para trasladar los cambios detectados a otras bases de datos, tal y como lo hace la replicacion de tipo merge.
Captura de cambio en datos: Esta es otra nueva característica de SQL 2008, que nos permite identificar cambios en nuestros datos, pudiendo determinar que fue lo que se modifico en ellos.
Por ejemplo esta es una característica muy útil para procesos ETL (Extract, Transform, Load) en donde actualizamos los cambios que van sucediendo en nuestra base de datos a un Datamart o Datawarehouse.
La forma como funciona esta característica consiste, primero, en indicar explícitamente las tablas de las que deseamos capturar cambios, estas tablas las ligamos a una instancia de captura que es quien realiza la operación. Posteriormente nuestra instancia va a monitorear el log de la base de datos para poder determinar que registros sufrieron cambios.
Por cada tabla monitoreada se crea una nueva tabla con el mismo schema, en estas tablas copia es donde se guardan los cambios realizados por una operación del DML. En las tablas de captura vamos a encontrar nuevos registros creados, los registros que fueron eliminados y 2 registros por cada actualización, uno con la imagen de como era el registros antes del cambio y otro con el cambio sufrido en el registro.
En caso de que nuestra tabla monitoreada sufra cambios en el esquema el mecanismo de captura de cambios actuara de la siguiente forma:
- Nuevas columnas, estas serán ignoradas por el monitoreo de cambios, si nos interesa que sean monitoreadas, entonces podemos crear una nueva instancia de captura que incluya el nuevo esquema o recrear la instancia actual.
- Columnas eliminadas: En este caso se insertan valores nulos en las columnas que ya no existen
- Cambio de tipo de una columna: Para evitar perdidas en los datos, se creara una nueva columna con el nuevo tipo de dato y ahí se almacenaran los nuevos valores.
Debido a que monitoreo de cambio puede llevar a tener miles de cambios, existe un tiempo de retención, que por omisión son tres días, cambios capturados anteriores a esta fecha son eliminados de la tabla de captura.
Por el momento es todo en esta primera parte sobre las novedades en el SQL 2008. Para mayor información favor visitar la documentación del SQL 2008
jueves, agosto 07, 2008
La "migra" te puede quitar tus aparatos electronicos
Vas a viajar a Estados Unidos por avión, vía terrestre u otro?, vas a llevar contigo algún dispositivo electrónico o dispositivo de almacenamiento de información como: Computador portátil, celular, CD's, iPod, memorias USB, etc.
Pues cuidado, ya que según Estados Unidos con el afán de detener a esos "terribles" y "malévolos" terroristas, van a poder revisar todos esos dispositivos aun y cuando no exista alguna sospecha sobre ti, es decir cuando se les de la gana, sin importar si eres ciudadano Estadounidense o no.
Ademas de poder llevarse tus equipos para examinarlos en algún otro lugar, copiar tus datos, traducirlos, etc. e inclusive detener tus aparatos por meses, y todo legalmente.
Inclusive se pueden quedar con tus libros y folletos.
Lo único que puedo comentar claramente ante esta situación es: QUE POCA MADRE !!
Nota del periodico Frontera
Pues cuidado, ya que según Estados Unidos con el afán de detener a esos "terribles" y "malévolos" terroristas, van a poder revisar todos esos dispositivos aun y cuando no exista alguna sospecha sobre ti, es decir cuando se les de la gana, sin importar si eres ciudadano Estadounidense o no.
Ademas de poder llevarse tus equipos para examinarlos en algún otro lugar, copiar tus datos, traducirlos, etc. e inclusive detener tus aparatos por meses, y todo legalmente.
Inclusive se pueden quedar con tus libros y folletos.
Lo único que puedo comentar claramente ante esta situación es: QUE POCA MADRE !!
Nota del periodico Frontera
La arquitectura de cebolla: parte 1
Este post es parte de una serie de post en ingles de Jeffrey Palermo, en ellos se describe lo que Jeffrey llama la "Arquitectura de Cebolla" - Onion Arquitecture -.
La arquitectura aquí descrita es muy apropiada para aplicaciones de negocio con un amplio ciclo de vida o aplicaciones que tienen un comportamiento complejo. Mediante el énfasis del uso de interfaces para los contratos de comportamiento, se fuerza a la externalizacion de la infraestructura.
Arquitectura tradicional en capas
El diagrama 1, muestra la representación de la arquitectura tradicional en capas. Esta es el tipo de arquitectura básica y mas utilizada. Cada capa inferior depende de la capa superior, y a su vez cada capa va a depender de una infraestructura común y servicios comunes.

Diagrama 1: Arquitectura en capas
La gran desventaja de esta arquitectura de capas de arriba hacia abajo, es que crea acoplamientos fuertes, es decir cada capa es acoplada a las capas inferiores, y cada capa es también acoplada con varias partes de la infraestructura que tienen diferentes preocupaciones. Aunque, sin acoplamiento, nuestros sistemas realmente no harían nada útil, el problema es que esta arquitectura tradicional crea acoplamientos innecesarios.
El problema principal (y también el mas común) es el acoplamiento entre la UI (interface de usuario, por sus siglas en ingles) y la lógica de negocios para acceder a los datos. Sí, la UI esta acoplada con el acceso a datos en esta arquitectura, dependencias transitivas continúan siendo dependencias; la UI no puede funcionar sin la lógica de negocios y la lógica de negocios no puede funcionar sin el acceso a datos; intencionalmente ignoramos la infraestructura, ya que esta puede variar de sistema a sistema.
Las técnicas de acceso a datos cambian frecuentemente, históricamente, la industria a modificado estas técnicas por lo menos cada tres años, por lo tanto, posiblemente en tres años vamos a tener que modificar sistemas sanos, de larga vida que son de misión critica para los negocios. Los sistemas no son actualizados para mantenerse al día, debido a que es muy difícil lograrlo, por lo tanto si el acoplamiento impide el actualizar fácilmente partes del sistema, no queda otra opción que despreciar el sistema y dejar que se convierta en obsoleto. Así es como un sistema heredado - legacy - se congela en el tiempo, y eventualmente es reemplazado por uno nuevo.
Arquitectura de Cebolla
Aquí es donde entra la arquitectura de cebolla, que si bien no es algo nuevo, si se propone este nombre para identificar este patrón arquitectural. Los patrones son útiles debido a que proporciona a los profesionales del software un vocabulario común mediante el cual comunicarse. En la arquitectura de cebolla existen varios aspectos, que si tenemos un termino común para describirlos, entonces nos podemos comunicar eficientemente.
El diagrama 2 muestra esta arquitectura. La parte importante es que controla el acoplamiento; como regla general, todo el código puede depender de capas centrales, pero no puede depender de capas fuera de la capas base - core -. En otras palabras, el acoplamiento se dirige hacia el centro. Esta arquitectura favorece la programación orientada a objetos.

Diagrama 2: Arquitectura de cebolla
En el centro podemos observar el dominio de modelos - Domain model -, que representa la combinación de estado y comportamiento de los modelos a través de la organización. Alrededor del dominio de modelos existen otras capas que incluyen mas cuestiones de comportamiento. El numero de capas de la base de la aplicación puede variar, pero hay que recordar que siempre el domino de modelos esta en el centro y debido a que las capas se acoplan al centro, el dominio de modelos solo puede acoplarse a si mismo.
La primera capa alrededor de nuestro dominio de modelos, es donde típicamente encontramos las interfaces que nos van a proporcionar el comportamiento para guardar u obtener un objeto, esta capa se llama las interfaces de repositorio. El guardar o leer un objeto, no es un comportamiento de la base de la aplicación, ya que típicamente esto es competencia de la base de datos; así que solo la interface con este comportamiento es la que se encuentra en la base de la aplicación.
En las orillas de nuestro diagrama vemos la UI, infraestructura y las pruebas, esto se debe a que la capa exterior es reservada para los artefactos que cambian constantemente; por lo tanto estos deben de ser intencionalmente aislados de la base de la aplicación. Ahí mismo en la orilla nos encontraremos con alguna clase que implemente la interface de repositorio. esta clase va a estar particularmente acoplada al método de acceso a datos, y es por eso que reside fuera de la base. Debido a que esta clase implementa la interface repositorio, esta clase esta acoplada a la interface.
La arquitectura de cebolla se apoya plenamente en el principio de Dependencia Inversa - Dependency Inversion -. La base de la aplicación necesita de la implementación de las interfaces base, y si las clase que las implementas existen en los bordes de la aplicaciones, entonces necesitamos de algún mecanismo que "inyecte" esas clases al momento de ejecución de la aplicación, para que así, haga algo útil.
Un cambio importante es esta arquitectura es, que la base de datos no es el centro, si no un recurso externo. Externalizar la base de datos puede ser un reto para algunas personas que piensan en las aplicaciones como aplicaciones de datos. Con la arquitectura de cebolla, no hay aplicaciones de datos. Pueden existir aplicaciones que podrían hacer uso de las base de datos como un servicio de almacenamiento, pero solo a través de alguna infraestructura externa de código, que implemente las interfaces que hagan sentido para la base de la aplicaciones. Desacoplar las aplicaciones de las bases de datos, sistemas de archivos, etc. minimiza el costo de mantenimiento durante la vida de la aplicación.
Alistar Cockburn ha escrito sobre la arquitectura hexagonal; tanto esta la arquitectura hexagonal como la arquitectura de cebolla comparten la siguiente premisa: Externalizar la infraestructura y escribir un adaptador en código de manera que la infraestructura no tenga un acoplamiento fuerte con la aplicación.
En los siguientes posts se hablara mas detalle acerca de esta arquitectura.
Jeffry Palermo CTO de Headspring Systems en Austin, TX, es ademas MCSD.Net, Microsoft MVP, Scrummmaster certificado, líder del grupo Austin .Net, miembro del consejo AgileAustin, ponente de INETA y mentor de INETA.
La arquitectura aquí descrita es muy apropiada para aplicaciones de negocio con un amplio ciclo de vida o aplicaciones que tienen un comportamiento complejo. Mediante el énfasis del uso de interfaces para los contratos de comportamiento, se fuerza a la externalizacion de la infraestructura.
Arquitectura tradicional en capas
El diagrama 1, muestra la representación de la arquitectura tradicional en capas. Esta es el tipo de arquitectura básica y mas utilizada. Cada capa inferior depende de la capa superior, y a su vez cada capa va a depender de una infraestructura común y servicios comunes.
Diagrama 1: Arquitectura en capas
El problema principal (y también el mas común) es el acoplamiento entre la UI (interface de usuario, por sus siglas en ingles) y la lógica de negocios para acceder a los datos. Sí, la UI esta acoplada con el acceso a datos en esta arquitectura, dependencias transitivas continúan siendo dependencias; la UI no puede funcionar sin la lógica de negocios y la lógica de negocios no puede funcionar sin el acceso a datos; intencionalmente ignoramos la infraestructura, ya que esta puede variar de sistema a sistema.
Las técnicas de acceso a datos cambian frecuentemente, históricamente, la industria a modificado estas técnicas por lo menos cada tres años, por lo tanto, posiblemente en tres años vamos a tener que modificar sistemas sanos, de larga vida que son de misión critica para los negocios. Los sistemas no son actualizados para mantenerse al día, debido a que es muy difícil lograrlo, por lo tanto si el acoplamiento impide el actualizar fácilmente partes del sistema, no queda otra opción que despreciar el sistema y dejar que se convierta en obsoleto. Así es como un sistema heredado - legacy - se congela en el tiempo, y eventualmente es reemplazado por uno nuevo.
Arquitectura de Cebolla
Aquí es donde entra la arquitectura de cebolla, que si bien no es algo nuevo, si se propone este nombre para identificar este patrón arquitectural. Los patrones son útiles debido a que proporciona a los profesionales del software un vocabulario común mediante el cual comunicarse. En la arquitectura de cebolla existen varios aspectos, que si tenemos un termino común para describirlos, entonces nos podemos comunicar eficientemente.
El diagrama 2 muestra esta arquitectura. La parte importante es que controla el acoplamiento; como regla general, todo el código puede depender de capas centrales, pero no puede depender de capas fuera de la capas base - core -. En otras palabras, el acoplamiento se dirige hacia el centro. Esta arquitectura favorece la programación orientada a objetos.
Diagrama 2: Arquitectura de cebolla
La primera capa alrededor de nuestro dominio de modelos, es donde típicamente encontramos las interfaces que nos van a proporcionar el comportamiento para guardar u obtener un objeto, esta capa se llama las interfaces de repositorio. El guardar o leer un objeto, no es un comportamiento de la base de la aplicación, ya que típicamente esto es competencia de la base de datos; así que solo la interface con este comportamiento es la que se encuentra en la base de la aplicación.
En las orillas de nuestro diagrama vemos la UI, infraestructura y las pruebas, esto se debe a que la capa exterior es reservada para los artefactos que cambian constantemente; por lo tanto estos deben de ser intencionalmente aislados de la base de la aplicación. Ahí mismo en la orilla nos encontraremos con alguna clase que implemente la interface de repositorio. esta clase va a estar particularmente acoplada al método de acceso a datos, y es por eso que reside fuera de la base. Debido a que esta clase implementa la interface repositorio, esta clase esta acoplada a la interface.
La arquitectura de cebolla se apoya plenamente en el principio de Dependencia Inversa - Dependency Inversion -. La base de la aplicación necesita de la implementación de las interfaces base, y si las clase que las implementas existen en los bordes de la aplicaciones, entonces necesitamos de algún mecanismo que "inyecte" esas clases al momento de ejecución de la aplicación, para que así, haga algo útil.
Un cambio importante es esta arquitectura es, que la base de datos no es el centro, si no un recurso externo. Externalizar la base de datos puede ser un reto para algunas personas que piensan en las aplicaciones como aplicaciones de datos. Con la arquitectura de cebolla, no hay aplicaciones de datos. Pueden existir aplicaciones que podrían hacer uso de las base de datos como un servicio de almacenamiento, pero solo a través de alguna infraestructura externa de código, que implemente las interfaces que hagan sentido para la base de la aplicaciones. Desacoplar las aplicaciones de las bases de datos, sistemas de archivos, etc. minimiza el costo de mantenimiento durante la vida de la aplicación.
Alistar Cockburn ha escrito sobre la arquitectura hexagonal; tanto esta la arquitectura hexagonal como la arquitectura de cebolla comparten la siguiente premisa: Externalizar la infraestructura y escribir un adaptador en código de manera que la infraestructura no tenga un acoplamiento fuerte con la aplicación.
En los siguientes posts se hablara mas detalle acerca de esta arquitectura.
Jeffry Palermo CTO de Headspring Systems en Austin, TX, es ademas MCSD.Net, Microsoft MVP, Scrummmaster certificado, líder del grupo Austin .Net, miembro del consejo AgileAustin, ponente de INETA y mentor de INETA.
Etiquetas:
.NET,
Arquitectura,
Linux
jueves, julio 03, 2008
Twitter vs Identi.ca
Twitter popularizo el microblogging a través del Internet así como por medio de mensajes SMS, el ser un sitio popular puede pensarse que es algo positivo, pero en caso de Twitter parece ser lo contrario.
Twitter se ha convertido en una necesidad de expresión para sus usuarios, que en tan solo 140 caracteres nos dejan saber que ocurre con ellos, pero también se ha convertido en una frustración diaria, con las fallas en el servicio, mensajes de que esta sobrecargado, deshabilitacion de funcionalidad y limites para poder acceder a Twitter mediante su API.
El problema con Twitter ha sido a tal grado que existe un blog para conocer el estatus de Twitter: http://status.twitter.com/; inclusive Ruby on Rails, que es el software con el esta programado Twitter ha recibido parte de las criticas de la fallas de Twitter, implicando que Ruby on Rails no es la herramienta adecuada para sitios de alto trafico.
El problema de Twitter, en lo personal, creo que es de arquitectura y no de las herramientas que hacen que Twitter funcione (o medio funcione), creo también que en buena parte es que para realizar cambios en la arquitectura es necesario "romper" buena parte de la funcionalidad actual y los arquitectos de Twitter no están dispuestos a hacer eso, en su lugar están batallando con código "legacy" mientras se mueven a una nueva arquitectura.
De hecho existe un post donde se de se admite que el Twitter fue diseñado como un sistema de administración de contenido en lugar de como lo que es, un sistema de mensajería.
Pero aun y con todos estos problemas que hace que los usuarios se queden en Twitter?. Durante todo este tiempo han salido un buen numero de clones de Twitter buscando aprovecharse de la mala reputación de este, pero no han podido desbancarlo como el servicio mas utilizado.
En buena medida se debe a que la mayoría de los usuarios aun siguen en Twitter, y si alguien se mueve a otro servicio, es posible que no todas las personas a las que siga se muevan a mismo servicio que el, por lo tanto aun y cuando algunos han probado otros servicios a final de cuentas regresa a Twitter.
El soporte de clientes para Twitter es otra gran ventaja que le ha permitido mantener su base de usuarios, ya que muchos usamos clientes que corren es nuestras PC's para "Twittear". Por lo general esos clientes no soportan otros servicios de microblogging.
Pero la pregunta importante es, cuanto tiempo mas podrá soportar así?, antes de ocurra una desbandada de usuarios a algún otro servicio con mejores perspectivas.
Como mencione anteriormente muchos aun estamos en Twiter, porque ahí esta la gente a la que seguimos, o por los clientes que nos permiten hacer uso de Twitter en nuestra PC's o por el envío de mensajes SMS o IM; pero que pasaría si existiera otro clon de Twitter con la misma funcionalidad, sin problemas y que la misma comunidad pueda dirigir?
Pues bien esa es la idea detrás de un nuevo servicio que acaba de ser lanzado: Identi.ca. Identi.ca actualmente es un servicio de microblogging con capabilidades inferiores a Twitter, ya que solo permite el "twittear" pero no cuenta con forma de buscar a amigos, no cuenta con API para escribir clientes, no tiene servicio SMS, aunque si permite "twittear" con Jabber o GTalk.
Pero como Identi.ca con apenas la funcionalidad mínima puede desbancar a Twitter? La respuesta puede ser simple, es Open Source. Si, Identi.ca carece de funcionalidad, pero es Open Source, y algunos de los primeros usuarios son programadores Open Source, así que realmente espero que Identi.ca dentro de poco tiempo alcance la misma funcionalidad de Twitter, ademas prometen un API compatible con Twitter, lo cual lograra que los clientes para Twitter puedan funcionar en Identi.ca sin cambios.
Pero que pasa si todos saltan del barco de Twitter a Identi.ca?, tendrá los mismos problemas de fallas en el servicio y sobrecarga?, bueno aquí es donde esta una de las fortalezas de Identi.ca, al ser Open Source cualquiera puede tomar el código y montar su propio servidor con lo que se vuelve en una solución distribuida, pero esperenme, esto causaría fragmentación del servicio con usuarios en alguno de los servidores, pero no en todos ... bueno no realmente, ya que Identi.ca seria un servicio federado, es decir que existen enlaces de comunicación entre los servidores del servicio, lo que permitirá el envío de mensajes a cualquier sistema de microblogging - no únicamente Identi.ca igual y hasta Twitter puede ser parte de la federación - que se una a la federación, por lo tanto no importaría que servidor de Identi.ca estemos utilizando.
Aunque esto no deja ser en este momento mas que especulación, habría que esperar algunas semanas para poder apreciar como Identi.ca evoluciona son la ayuda del Open Source. Por lo pronto mi cuenta de Identi.ca es http://identi.ca/mariochavez.
Por cierto hoy Twitter amaneció con mejor salud http://twitter/mario_chavez
Twitter se ha convertido en una necesidad de expresión para sus usuarios, que en tan solo 140 caracteres nos dejan saber que ocurre con ellos, pero también se ha convertido en una frustración diaria, con las fallas en el servicio, mensajes de que esta sobrecargado, deshabilitacion de funcionalidad y limites para poder acceder a Twitter mediante su API.
El problema con Twitter ha sido a tal grado que existe un blog para conocer el estatus de Twitter: http://status.twitter.com/; inclusive Ruby on Rails, que es el software con el esta programado Twitter ha recibido parte de las criticas de la fallas de Twitter, implicando que Ruby on Rails no es la herramienta adecuada para sitios de alto trafico.
El problema de Twitter, en lo personal, creo que es de arquitectura y no de las herramientas que hacen que Twitter funcione (o medio funcione), creo también que en buena parte es que para realizar cambios en la arquitectura es necesario "romper" buena parte de la funcionalidad actual y los arquitectos de Twitter no están dispuestos a hacer eso, en su lugar están batallando con código "legacy" mientras se mueven a una nueva arquitectura.
De hecho existe un post donde se de se admite que el Twitter fue diseñado como un sistema de administración de contenido en lugar de como lo que es, un sistema de mensajería.
Pero aun y con todos estos problemas que hace que los usuarios se queden en Twitter?. Durante todo este tiempo han salido un buen numero de clones de Twitter buscando aprovecharse de la mala reputación de este, pero no han podido desbancarlo como el servicio mas utilizado.
En buena medida se debe a que la mayoría de los usuarios aun siguen en Twitter, y si alguien se mueve a otro servicio, es posible que no todas las personas a las que siga se muevan a mismo servicio que el, por lo tanto aun y cuando algunos han probado otros servicios a final de cuentas regresa a Twitter.
El soporte de clientes para Twitter es otra gran ventaja que le ha permitido mantener su base de usuarios, ya que muchos usamos clientes que corren es nuestras PC's para "Twittear". Por lo general esos clientes no soportan otros servicios de microblogging.
Pero la pregunta importante es, cuanto tiempo mas podrá soportar así?, antes de ocurra una desbandada de usuarios a algún otro servicio con mejores perspectivas.
Como mencione anteriormente muchos aun estamos en Twiter, porque ahí esta la gente a la que seguimos, o por los clientes que nos permiten hacer uso de Twitter en nuestra PC's o por el envío de mensajes SMS o IM; pero que pasaría si existiera otro clon de Twitter con la misma funcionalidad, sin problemas y que la misma comunidad pueda dirigir?
Pues bien esa es la idea detrás de un nuevo servicio que acaba de ser lanzado: Identi.ca. Identi.ca actualmente es un servicio de microblogging con capabilidades inferiores a Twitter, ya que solo permite el "twittear" pero no cuenta con forma de buscar a amigos, no cuenta con API para escribir clientes, no tiene servicio SMS, aunque si permite "twittear" con Jabber o GTalk.
Pero como Identi.ca con apenas la funcionalidad mínima puede desbancar a Twitter? La respuesta puede ser simple, es Open Source. Si, Identi.ca carece de funcionalidad, pero es Open Source, y algunos de los primeros usuarios son programadores Open Source, así que realmente espero que Identi.ca dentro de poco tiempo alcance la misma funcionalidad de Twitter, ademas prometen un API compatible con Twitter, lo cual lograra que los clientes para Twitter puedan funcionar en Identi.ca sin cambios.
Pero que pasa si todos saltan del barco de Twitter a Identi.ca?, tendrá los mismos problemas de fallas en el servicio y sobrecarga?, bueno aquí es donde esta una de las fortalezas de Identi.ca, al ser Open Source cualquiera puede tomar el código y montar su propio servidor con lo que se vuelve en una solución distribuida, pero esperenme, esto causaría fragmentación del servicio con usuarios en alguno de los servidores, pero no en todos ... bueno no realmente, ya que Identi.ca seria un servicio federado, es decir que existen enlaces de comunicación entre los servidores del servicio, lo que permitirá el envío de mensajes a cualquier sistema de microblogging - no únicamente Identi.ca igual y hasta Twitter puede ser parte de la federación - que se una a la federación, por lo tanto no importaría que servidor de Identi.ca estemos utilizando.
Aunque esto no deja ser en este momento mas que especulación, habría que esperar algunas semanas para poder apreciar como Identi.ca evoluciona son la ayuda del Open Source. Por lo pronto mi cuenta de Identi.ca es http://identi.ca/mariochavez.
Por cierto hoy Twitter amaneció con mejor salud http://twitter/mario_chavez
lunes, junio 30, 2008
VW Crossfox
Hace ya algunas semanas adquirí - bueno es un decir, di el enganche y me autorizaron el crédito - un nuevo vehículo de la VW que recientemente introdujeron al mercado de México, es como una especie de SUV pequeño y todo terreno, el auto es un VW Crossfox.
En lo personal la forma el vehículo me gusta, es cómodo y económico, ademas de que el precio del vehículo es muy accesible. Poco a poco veo como el numero de vehículos de este tipo empiezan a aparecer cada vez mas en Tijuana.
El caso, es que actualmente estoy en Estados Unidos, en la ciudad de Oxnard California, a trescientos millas al norte de la frontera con México, muy cerca a la ciudad de Santa Mónica.
Llegue manejando aquí y precisamente me viene en el Crossfox, el cual es un auto que tengo entendido esta solo en los mercados de México y Brasil, por lo tanto en esta área el Crossfox no común de ver.
Definitivamente a llamado la atención, desde el conductor que esta al lado mío en el semáforo volteando a ver el auto con curiosidad, hasta el que le toma fotos con el celular y los que se me han acercado con preguntas como: ¿Que auto es?, ¿Lo venden aquí en US?, ¿Que tal el consumo de gasolina?, y también comentarios como ¨Esta bonito el auto, me gusta¨,¨Ojala lo vendan aquí en US tambien¨.
En lo general estoy contento con el auto y me agrada el que cause, aunque sea un poco de expectación, por lo menos aquí donde me encuentro ahora.
En lo personal la forma el vehículo me gusta, es cómodo y económico, ademas de que el precio del vehículo es muy accesible. Poco a poco veo como el numero de vehículos de este tipo empiezan a aparecer cada vez mas en Tijuana.
El caso, es que actualmente estoy en Estados Unidos, en la ciudad de Oxnard California, a trescientos millas al norte de la frontera con México, muy cerca a la ciudad de Santa Mónica.
Llegue manejando aquí y precisamente me viene en el Crossfox, el cual es un auto que tengo entendido esta solo en los mercados de México y Brasil, por lo tanto en esta área el Crossfox no común de ver.
Definitivamente a llamado la atención, desde el conductor que esta al lado mío en el semáforo volteando a ver el auto con curiosidad, hasta el que le toma fotos con el celular y los que se me han acercado con preguntas como: ¿Que auto es?, ¿Lo venden aquí en US?, ¿Que tal el consumo de gasolina?, y también comentarios como ¨Esta bonito el auto, me gusta¨,¨Ojala lo vendan aquí en US tambien¨.
En lo general estoy contento con el auto y me agrada el que cause, aunque sea un poco de expectación, por lo menos aquí donde me encuentro ahora.
Etiquetas:
General
viernes, junio 13, 2008
Fin de semestre en el ITT
Hace un par de días se acabo otro semestre mas en el ITT, el séptimo para mi, para ser mas exactos. En general no me gusto el semestre mucho que digamos, en buena parte por algunos maestros, que definitivamente dejaron mucho que desear; sobre todo en materias como Simulación e Inteligencia Artificial que eran de las mas interesantes del semestre y al final fueron un fiasco.
Este semestre a diferencia de otros se caracterizo por la cantidad de proyectos que se tuvieron que realizar:
Evaluación y formulación de un proyecto para monitoreo y localización de unidades, por ejemplo automóviles, camionetas y/o camiones de reparto, por medio de GPS y redes telefónicas - tringulacion -, ademas de que con el uso de redes 3G es posible obtener información detallada sobre el vehículo, como velocidad, imágenes exteriores e interiores, audio; también es posible controlar ciertas funciones del vehículo, como el encendido, puertas, etc.
Generador de números pseudoaleatorios y pruebas de aleatoriedad, así como algunas aplicaciones de simulación para predecir situaciones mediante la repetición de cientos de experimentos, lo interesante aquí es que LINQ fue de gran ayuda para reducir la complejidad del proyecto.
Monitor de movimiento, Este proyecto consiste en colocar una o varias cámaras de video en lugares que deseamos monitorear, las cámaras publican las imágenes tomadas, las cuales son consumidas por un programa de monitoreo, el cual analiza las imágenes para detectar movimiento, marca en la imagen el área donde detecto movimiento, activa una alarma visual, registra la secuencia de imágenes donde se detecto movimiento, finalmente envía notificaciones de este evento.
Análisis de un proyecto para el registro de votos en forma electrónica, el proyecto consiste en un sistema central para despliegue de la elección y recolección de datos de las casilla de votación electrónica. Las casillas consisten en un monitor "touchscreen" para recibir los votos, los cuales son almacenados en una base de datos - encriptados -, ademas de impresión del voto en un rollo interno de una impresora, con la finalidad de dejar evidencia física del voto. La casilla mediante redes 3G envía los votos recolectados cada cierto tiempo.
Me toco trabajar con Joomla y PHP, experiencia horrenda, por lo menos Joomla no lo vuelvo a tocar mientras pueda.
Finalmente tuve otro proyecto con PHP, porque así se requirió, en lo personal no me gusta PHP, pero en este proyecto utilice CakePHP, el cual es un Framework MVC para PHP, el cual hizo la experiencia bastante agradable. No he cambiado mi opinión de no gustarme PHP, pero bueno CakePHP lo hizo interesante
Este semestre a diferencia de otros se caracterizo por la cantidad de proyectos que se tuvieron que realizar:
Evaluación y formulación de un proyecto para monitoreo y localización de unidades, por ejemplo automóviles, camionetas y/o camiones de reparto, por medio de GPS y redes telefónicas - tringulacion -, ademas de que con el uso de redes 3G es posible obtener información detallada sobre el vehículo, como velocidad, imágenes exteriores e interiores, audio; también es posible controlar ciertas funciones del vehículo, como el encendido, puertas, etc.
Generador de números pseudoaleatorios y pruebas de aleatoriedad, así como algunas aplicaciones de simulación para predecir situaciones mediante la repetición de cientos de experimentos, lo interesante aquí es que LINQ fue de gran ayuda para reducir la complejidad del proyecto.
Monitor de movimiento, Este proyecto consiste en colocar una o varias cámaras de video en lugares que deseamos monitorear, las cámaras publican las imágenes tomadas, las cuales son consumidas por un programa de monitoreo, el cual analiza las imágenes para detectar movimiento, marca en la imagen el área donde detecto movimiento, activa una alarma visual, registra la secuencia de imágenes donde se detecto movimiento, finalmente envía notificaciones de este evento.
Análisis de un proyecto para el registro de votos en forma electrónica, el proyecto consiste en un sistema central para despliegue de la elección y recolección de datos de las casilla de votación electrónica. Las casillas consisten en un monitor "touchscreen" para recibir los votos, los cuales son almacenados en una base de datos - encriptados -, ademas de impresión del voto en un rollo interno de una impresora, con la finalidad de dejar evidencia física del voto. La casilla mediante redes 3G envía los votos recolectados cada cierto tiempo.
Me toco trabajar con Joomla y PHP, experiencia horrenda, por lo menos Joomla no lo vuelvo a tocar mientras pueda.
Finalmente tuve otro proyecto con PHP, porque así se requirió, en lo personal no me gusta PHP, pero en este proyecto utilice CakePHP, el cual es un Framework MVC para PHP, el cual hizo la experiencia bastante agradable. No he cambiado mi opinión de no gustarme PHP, pero bueno CakePHP lo hizo interesante
lunes, mayo 26, 2008
Entidades, Objetos por valor, Agregados y Raíces
El siguiente post es una traduccion del post original en Ingles "Entities, Value Objects, Aggregates and Roots" de Jimmy Bogart (Con el permiso de Jimmy), acerca de conceptos de basicos de Diseño Conducido por Dominio (Domain-Drive Design, DDD).
Entidades
Objetos por valor
Agregados y Raíces
Para un entendimiento mas profundo de estos elementos recomiendo los capítulos 5 y 6 del libro Domain-Driven Design de Eric Evans.
Entidades
De acuerdo con la descripción de Evans:
“Muchos objetos no son fundamentalmente definidos por sus atributos, si no por un elemento que les proporcione identidad”
En el diseño tradicional orientado a objetos, se podría iniciar modelando a partir de verbos y sustantivos. En el modelado DDD, preferentemente nos enfocamos en términos provenientes del lenguaje común que exhiben elementos de identidad.
Por ejemplo, vamos a considerar el concepto Persona. Si tenemos dos objetos Persona, con el mismo nombre, acaso son la misma persona? Juan Pérez de Ciudad de México y Juan Pérez de Guadalajara no van a esta de acuerdo. Que pasa cuando conocemos a alguien con nombre igual a algún famoso? ambos tienen diferentes identidad. Entonces que distingue a dos personas si su nombre no es un atributo distintivo?, acaso su dirección? o numero de CURP?
En estos ejemplo, una Persona es identificada por algo mas que sus atributos, como el nombre, su dirección, su teléfono, etc. Una Persona tiene una identidad única que se manifiesta en diferentes formas a través de diferentes sistemas. Cada sistema tiene sus propios atributos sobre los cuales tiene interés, pero la Persona es siempre la misma entidad (no la misma clase, eso es algo diferente).
Para determinar si un objeto es una entidad, podemos hacernos la siguiente pregunta: si dos instancias de un objeto con valores diferentes en sus atributos, tienen el mismo valor en su atributo de identidad, indica que son la misma entidad?
Si la respuesta es si, y nos interesa su identidad, entonces es una entidad. Se pueden modelar las entidades en forma de clases en C#, agregando una identidad sustituta (Surrogate key) (la cual puede ser un entero o un GUID). Adicionalmente la clase modelada debe de contener información acerca que que significa tener la misma identidad, esto por ejemplo realizar un “override” al método Equal para que evalúe únicamente nuestra identidad y no los demás atributos para determinar si dos objetos son iguales.
Objetos por valor
Evans menciona:
“Muchos objetos no cuentan con una identidad. Estos objetos generalmente describen una característica de algo”
Cuando no nos interesa acerca de la identidad de un objeto, es recomendable considerar el que este objeto lo diseñemos como un objeto por valor.
Por ejemplo, si tenemos un sistema el cual modelo cubetas de pintura, el objeto Color seria un buen candidato para ser un objeto por valor. A nosotros nos interesaría poder identificar un objeto CubetaPintura de otro, ya que al irlos utilizando la pintura de cada objeto eventualmente se acabara.
Pero cuando revisamos el Color de una CubetaPintura especifica, Color no tiene una identidad propia. Si tengo dos objetos Color exactamente con los mismos valores de pigmentación, simplemente consideramos que ambos son el mismo objeto.
Cuando diseñamos objetos por valor, es importante mantenerlos alejados de la dinámica de los ciclos de vida de las entidades, por lo tanto es recomendable asignarles la característica de inmutables y remover cualquier concepto de identidad. Adicionalmente, - si estamos programando den .NET - hay que realizar un “override” al método Equal para que realice la comparación sobre los valores de sus atributos.
Al configurar un objeto por valor como inmutable, muchas operaciones se simplifican, por ejemplo no tenemos un puñado de propiedades de escritura-lectura, todos los atributos los asignamos por medio de un constructor y reafirmamos la equidad de los atributos.
Los objetos por valor, como cualquier otro patrón, pueden ser sobre utilizados, si buscamos oportunidades para ello. Este tipo de objetos deben de representar conceptos en nuestro lenguaje normal, y un experto en dominio deberá de poder reconocerlos en nuestro modelo.
Agregados y Raíces
En la vida real, muchos conceptos tienen relación entre ellos. Si se tiene varias cuentas bancarias, y esas cuentas tienen un propietario. Cada cuenta esta manejada por un banco, y cada banco tiene un grupo de cuentas. Si deseamos representar todos estos conceptos como clases, ¿cual debería ser la relación entre ellas?.
¿Deberíamos representar cada relación identificable posible en nuestro modelo de objetos? ¿En donde marcamos nuestra linea sobre crear o no una referencia? Si contamos con una referencia entre dos objetos, ¿Como debemos manejar su persistencia? ¿Actualizaciones en cascada?. Supongamos que Empleado tiene una referencia a Gerente directamente. Si modificamos Empleado.Gerente.Nombre, y guardamos empleado, ¿Acaso el nombre del Gerente se modificara en la base de datos?
El modelado de objetos es una tarea compleja. Los invariantes necesitan ser reforzados no solo por la entidad, si no por todas las entidades referenciadas también.
Agregados nos permite definir una linea frontera alrededor de una o mas entidades. Un agregado refuerza invarinates para todas la entidades en cada operación soportada. Un agregado cuenta con una identidad raíz, la cual es el único miembro del agregado que al que se permite que un objeto fuera del agregado mantenga una referencia a el.
La reglas, de Evans, que debemos reforzar son:
¡Son demasiadas reglas!. Todas ellas se originan de la idea de crear limites o fronteras en nuestros agregados. Estas frontera simplifican nuestro modelo, y nos obliga a considerar cuidadosamente nuestras relaciones de objetos, bajo una reglas bien definidas.
El mantener asociaciones bidireccionales es muy difícil sin considerar nuestro modelo de persistencia, así que modelando nuestras relaciones alrededor de casos de uso del mundo real, podemos simplificar enormemente nuestro modelo.
No todas las relaciones necesitan ser representadas a través de asociaciones. En la relación Empleado-Gerente, podemos eliminar la propiedad Gerente de Empleado, y para obtener el Gerente al que se reporta un empleado, llamamos un método a nuestro repositorio de empleado (EmpleadoRepository). Debido a que Empleado es un agregado raíz, esta bien el que empleado mantenga una referencia a su Gerente.
Modelado y simplificación
Una cita del libro del Evans:
“La traducción nubla la comunicación y la vuelve anémica”
Para evitar la traducción, representaremos conceptos del mundo real en nuestro modelo conceptual, y nuestro modelo conceptual lo representaremos a través de entidades y objetos por valor (y servicios). Para simplificar nuestros modelos, es importante usar agregados raíz y reforzar invariantes en cada operación. En todos los casos, debemos de poder representar nuestro modelo conceptual en nuestro código, y este debe de tener sentido para nuestro experto del dominio, ya que ellos va a ver la representación de nuestro lenguaje cotidiano.
Cuando nuestro modelo conceptual esta correctamente expresado en nuestro código, encontraremos que no únicamente la refactorizacion técnica se facilita, si no también las mejoras a nuestro modelo. Entidades y objetos por valor son solo una parte del mundo DDD, pero son un concepto importante sobre el cual otras ideas están construidas.
Referencias
Entidades
Objetos por valor
Agregados y Raíces
Para un entendimiento mas profundo de estos elementos recomiendo los capítulos 5 y 6 del libro Domain-Driven Design de Eric Evans.
Entidades
De acuerdo con la descripción de Evans:
“Muchos objetos no son fundamentalmente definidos por sus atributos, si no por un elemento que les proporcione identidad”
En el diseño tradicional orientado a objetos, se podría iniciar modelando a partir de verbos y sustantivos. En el modelado DDD, preferentemente nos enfocamos en términos provenientes del lenguaje común que exhiben elementos de identidad.
Por ejemplo, vamos a considerar el concepto Persona. Si tenemos dos objetos Persona, con el mismo nombre, acaso son la misma persona? Juan Pérez de Ciudad de México y Juan Pérez de Guadalajara no van a esta de acuerdo. Que pasa cuando conocemos a alguien con nombre igual a algún famoso? ambos tienen diferentes identidad. Entonces que distingue a dos personas si su nombre no es un atributo distintivo?, acaso su dirección? o numero de CURP?
En estos ejemplo, una Persona es identificada por algo mas que sus atributos, como el nombre, su dirección, su teléfono, etc. Una Persona tiene una identidad única que se manifiesta en diferentes formas a través de diferentes sistemas. Cada sistema tiene sus propios atributos sobre los cuales tiene interés, pero la Persona es siempre la misma entidad (no la misma clase, eso es algo diferente).
Para determinar si un objeto es una entidad, podemos hacernos la siguiente pregunta: si dos instancias de un objeto con valores diferentes en sus atributos, tienen el mismo valor en su atributo de identidad, indica que son la misma entidad?
Si la respuesta es si, y nos interesa su identidad, entonces es una entidad. Se pueden modelar las entidades en forma de clases en C#, agregando una identidad sustituta (Surrogate key) (la cual puede ser un entero o un GUID). Adicionalmente la clase modelada debe de contener información acerca que que significa tener la misma identidad, esto por ejemplo realizar un “override” al método Equal para que evalúe únicamente nuestra identidad y no los demás atributos para determinar si dos objetos son iguales.
Objetos por valor
Evans menciona:
“Muchos objetos no cuentan con una identidad. Estos objetos generalmente describen una característica de algo”
Cuando no nos interesa acerca de la identidad de un objeto, es recomendable considerar el que este objeto lo diseñemos como un objeto por valor.
Por ejemplo, si tenemos un sistema el cual modelo cubetas de pintura, el objeto Color seria un buen candidato para ser un objeto por valor. A nosotros nos interesaría poder identificar un objeto CubetaPintura de otro, ya que al irlos utilizando la pintura de cada objeto eventualmente se acabara.
Pero cuando revisamos el Color de una CubetaPintura especifica, Color no tiene una identidad propia. Si tengo dos objetos Color exactamente con los mismos valores de pigmentación, simplemente consideramos que ambos son el mismo objeto.
Cuando diseñamos objetos por valor, es importante mantenerlos alejados de la dinámica de los ciclos de vida de las entidades, por lo tanto es recomendable asignarles la característica de inmutables y remover cualquier concepto de identidad. Adicionalmente, - si estamos programando den .NET - hay que realizar un “override” al método Equal para que realice la comparación sobre los valores de sus atributos.
Al configurar un objeto por valor como inmutable, muchas operaciones se simplifican, por ejemplo no tenemos un puñado de propiedades de escritura-lectura, todos los atributos los asignamos por medio de un constructor y reafirmamos la equidad de los atributos.
Los objetos por valor, como cualquier otro patrón, pueden ser sobre utilizados, si buscamos oportunidades para ello. Este tipo de objetos deben de representar conceptos en nuestro lenguaje normal, y un experto en dominio deberá de poder reconocerlos en nuestro modelo.
Agregados y Raíces
En la vida real, muchos conceptos tienen relación entre ellos. Si se tiene varias cuentas bancarias, y esas cuentas tienen un propietario. Cada cuenta esta manejada por un banco, y cada banco tiene un grupo de cuentas. Si deseamos representar todos estos conceptos como clases, ¿cual debería ser la relación entre ellas?.
¿Deberíamos representar cada relación identificable posible en nuestro modelo de objetos? ¿En donde marcamos nuestra linea sobre crear o no una referencia? Si contamos con una referencia entre dos objetos, ¿Como debemos manejar su persistencia? ¿Actualizaciones en cascada?. Supongamos que Empleado tiene una referencia a Gerente directamente. Si modificamos Empleado.Gerente.Nombre, y guardamos empleado, ¿Acaso el nombre del Gerente se modificara en la base de datos?
El modelado de objetos es una tarea compleja. Los invariantes necesitan ser reforzados no solo por la entidad, si no por todas las entidades referenciadas también.
Agregados nos permite definir una linea frontera alrededor de una o mas entidades. Un agregado refuerza invarinates para todas la entidades en cada operación soportada. Un agregado cuenta con una identidad raíz, la cual es el único miembro del agregado que al que se permite que un objeto fuera del agregado mantenga una referencia a el.
La reglas, de Evans, que debemos reforzar son:
- La entidad raíz cuenta con una identidad global y es la única responsable de verificar sus invariantes.
- Entidades dentro de los limites tienen una identidad local, única solo dentro del agregado
- Nada fuera del agregado puede mantener una referencia a algo dentro del agregado que no sea la entidad raíz. La entidad raíz si puede pasar referencias a las entidades internas a otros objetos, pero solo para su uso transitorio (por ejemplo usarlas solo dentro de un solo método)
- Solo los agregados raíz pueden obtenerse directamente de consultas a la base de datos. Objetos dentro de un agregado pueden mantener referencias a otros agregados raíz.
- La operación de eliminación debe de eliminar todo lo que este dentro de los limites del agregado al mismo tiempo
- Cuando se modifica un objeto dentro de los limites del agregado y posteriormente se guarda, todos los invariantes del agregado se deben de satisfacer.
¡Son demasiadas reglas!. Todas ellas se originan de la idea de crear limites o fronteras en nuestros agregados. Estas frontera simplifican nuestro modelo, y nos obliga a considerar cuidadosamente nuestras relaciones de objetos, bajo una reglas bien definidas.
El mantener asociaciones bidireccionales es muy difícil sin considerar nuestro modelo de persistencia, así que modelando nuestras relaciones alrededor de casos de uso del mundo real, podemos simplificar enormemente nuestro modelo.
No todas las relaciones necesitan ser representadas a través de asociaciones. En la relación Empleado-Gerente, podemos eliminar la propiedad Gerente de Empleado, y para obtener el Gerente al que se reporta un empleado, llamamos un método a nuestro repositorio de empleado (EmpleadoRepository). Debido a que Empleado es un agregado raíz, esta bien el que empleado mantenga una referencia a su Gerente.
Modelado y simplificación
Una cita del libro del Evans:
“La traducción nubla la comunicación y la vuelve anémica”
Para evitar la traducción, representaremos conceptos del mundo real en nuestro modelo conceptual, y nuestro modelo conceptual lo representaremos a través de entidades y objetos por valor (y servicios). Para simplificar nuestros modelos, es importante usar agregados raíz y reforzar invariantes en cada operación. En todos los casos, debemos de poder representar nuestro modelo conceptual en nuestro código, y este debe de tener sentido para nuestro experto del dominio, ya que ellos va a ver la representación de nuestro lenguaje cotidiano.
Cuando nuestro modelo conceptual esta correctamente expresado en nuestro código, encontraremos que no únicamente la refactorizacion técnica se facilita, si no también las mejoras a nuestro modelo. Entidades y objetos por valor son solo una parte del mundo DDD, pero son un concepto importante sobre el cual otras ideas están construidas.
Referencias
miércoles, abril 23, 2008
Ya mañana es el Heroes {Community} Launch
Ya mañana 24 de Abril es el Lanzamiento de:
- Windows Server 2008
- Visual Studio 2008
- SQL Server 2008
Ven y participa, no pierdas la oportunidad de ganar licencias de Visual Studio 2008, SQL Server y otros premios mas.
La agenda es la siguiente:
2:00 Bienvenida
2:15 Introducción a Visual Studio 2008
3:00 LINQ aplicado
3:40 Visual Studio Team System
4:20 Visual Studio Team System y estándares de calidad
5:00 Silverlight en acción
5:50 Premios y despedida
Y el evento se llevará a cabo en:
Teatro Calafornix
Instituo Tecnológico de Tijuana
Calzada Tecnológico S/N, Fracc. Tomás Aquino
Tijuana, B.C. 22414 México
jueves, abril 17, 2008
Innovatec 2008
Una vez mas se llevara a cabo el congreso de Ingeniería en Sistemas Computacionales e Informática del Instituto Tecnológico de Tijuana.
El evento se llevara a cabo los días 22 y 23 de Abril del presente año, en el Teatro Calafornix de la Unidad Tomas Aquino. La entrada al evento es gratuita.
El temario del congreso es el siguiente:
Martes 22 de Abril
9 - 10 Inauguración
10 - 11 "Computo móvil y ubicuo", J. Antonio García Macías, CICESE
11 - 12 "MoProSoft y la norma Mexicana NMX-I-059", Ing. Iván González Quintero, Nabu-Solutions
12 - 13 "Logística", Juan Francisco Magallón Rangel, NEXTEL
13 - 14 "Tecnologías del futuro", M.I. Luis Guillermo Martínez Méndez, UABC
Miércoles 23 de Abril
9 - 10 "Computo forense"
10 - 11 "Herramientas para la enseñanza de la programación", Dr. Guillermo Licea Sandoval, UABC
11 - 12 "Avances y retos en las redes inalámbricas de sensores", MC Luis Enrique Palafox, CICESE
12 - 13 "Clúster"
lunes, abril 14, 2008
Heroes {Community} Launch de la comunidad TJ.NET
Si siempre habías querido ser un {Héroe} y no sabias como, esta es tu oportunidad, ven y convierte en un {Héroe} junto con muchos otros profesionales que asistirán al Héroes {Community} Launch de la Comunidad Tijuana.NET.
Cuando: Este 24 de Abril
Donde: En el teatro Calafornix de la unidad Tomas Aquino del Instituto Tecnologico de Tijuana
Que: Lanzamiento de la nueva gama de productos:
- Visual Studio 2008
- Windows Server 2008
- SQL Server 2008
El evento es gratuito y comienza a partir de las 2:00 pm. Para mayor informacion visita la pagina de la Comunidad Tijuana.NET
viernes, marzo 21, 2008
Código fuente del ASP.NET MVC disponible
El día de hoy Microsoft publico el código fuente del ASP.NET MVC, tal y como lo había anunciado hace un par de semanas. Si e código fuentes esta disponible solo Microsoft va a poder publicar cambios al mismo, es decir, personas fuera de Microsoft van a poder descargar el código fuente, ver como funciona, inclusive corregir errores, pero los cambios no van a poder ser enviados a Microsoft.

La licencia nos permitirá usar internamente una versión modificada del ASP.NET MVC, pero no nos va a ser posible re-distribuir esos cambios, únicamente Microsoft puede distribuir la versión oficial del ASP.NET MVC.
El ASP.NET MVC, es otro paradigma para el desarrollo de aplicaciones Web, paradigmas que han sido implementados en Ruby, PHP, etc. con la ayuda de frameworks específicos para esos lenguajes.
Por cierto el ASP.NET MVC se ha reportado que funciona con Mono, aunque con algunos cambios en las configuraciones, pero posiblemente al tener el código fuentes disponible de; ASP.NET MVC, va a ser relativamente fácil indicarles a los programadores de Mono que falta o que no funciona correctamente para que se corrija en próximas versiones de Mono.
jueves, marzo 06, 2008
Material electoral de la pasada elección en BC
Me pregunto si esta es la forma ¨legal¨ del IEE de deshacerse del material usado en las pasadas elecciones aquí en Baja California. Esta "basura" me la encontré el día de hoy afuera de la oficina de IEE en Otay.

Etiquetas:
General
jueves, febrero 21, 2008
Microsoft a apoyar la interoperabilidad de sus productos
Microsoft el día de hoy realiza un anuncio muy interesante e impactante con respecto a la interoperabilidad de sus productos.
Según el comunicado este movimiento se basa en los siguientes principios:
El anuncio indica que estos principios se aplican a partir de día de hoy en los productos de alto volumen como: Windows Vista (Incluido el .NET Framework), Windows Server 2008, SQL Server 2008, Office 2007, Exchange Server 2007 y Office Sharepoint Server 2007.
Las acciones que se desprenden de estos principios son:
A pregunta expresa (Que dirán ahora desde el mundo Open Source?) sobre este tema en este post, me atrevo a comentar lo siguiente:
Que Microsoft es malo y que quiere dominar el mundo, y que este anuncio es solo una "trampa" mas para tratar de atraer a desarrolladores Open Source para después acabar con ellos.
Ok, ya en serio, creo que va a haber una división de opiniones:
Los primeros, los mas puristas en el ambiente Open Source dirán que esto no cambia la cosa, aunque Microsoft abra sus protocolos, el software de Microsoft sigue siendo privativo por lo tanto no se debe de mezclar con Open Source, a menos que Microsoft libere sus protocolos en una licencia tipo GPL que les llene el ojo.
Algunos otros simplemente porque esto significa colaborar con Microsoft dirán que no es importante y que no les interesa.
Abra un segundo grupo que verán esto con buenos ojos, y trataran de aprovechar esta apertura de Microsoft, esto a la mejor significar que algunos proyectos se van a ramificar (fork) ya que a la mejor algunos de los programadores no les interesara involucrase directamente con Microsoft, a otros si, por lo tanto puede haber mas de una rama de algún proyecto debido a esta diferencias.
También es posible que nazcan nuevos proyectos desde cero a partir de esta iniciativa de Microsoft (Hint: ActiveSync para el iPhone).
Por otra parte si bien Microsoft abre sus protocolos para proyectos Open Source y no-comerciales, en el comunicado deja muy en claro que quien decida distribuir comercialmente la implementación de estos protocolos debe de adquirir una licencia para sus patentes, por lo tanto, esto me da a entender que si RedHat, Novell o Ubuntu (solo por mencionar algunas) distribuyen algún programa que implemente estos protocolos, estas compañías van a tener que licenciar las patentes, aun y cuando estas empresas no cobren por el software en si, pero si obtienen un beneficio comercial de este ultimo.
Habría que esperar y ver cual es la postura de los diversos grupos de desarrolladores Open Source, las compañías involucradas y obviamente los ¨troles¨ de Slashdot ;)
Según el comunicado este movimiento se basa en los siguientes principios:
- Aseguramiento de conexiones abiertas
- Promover portabilidad de datos
- Mejoramiento del soporte a estándares de la industria
- Tener una mejor relación con los clientes, la industria y las comunidades Open Source
El anuncio indica que estos principios se aplican a partir de día de hoy en los productos de alto volumen como: Windows Vista (Incluido el .NET Framework), Windows Server 2008, SQL Server 2008, Office 2007, Exchange Server 2007 y Office Sharepoint Server 2007.
Las acciones que se desprenden de estos principios son:
- Microsoft va a publicar 30,000 paginas con documentación de los clientes de Windows y sus protocolos de servidor, disponibles anteriormente bajo licencia de secreto comercial.
- Microsoft va a indicar cuales protocolos están cubiertos por patentes y va licenciarlos a precios módicos y bajo términos no discriminatorios
- Microsoft va a proveer de un convenio de no demanda por uso de sus patentes a desarrolladores open source y no comerciales. Compañías que distribuyan comercialmente la implementación de sus protocolos van a poder obtener licencias de la patente.
- Microsoft va a documentar como hacer uso de sus estándares para ayudar a que terceros entiendan mejor los estándares y puedan hacer uso de ellos apropiadamente
- También va ser flexible en la mejora de los documentos de Office 2007, para ayudar a que terceros puedan crear extensiones a otros formatos de documentos
- Va a apoyar a las comunidades de Open Source con recursos, espacios y eventos
A pregunta expresa (Que dirán ahora desde el mundo Open Source?) sobre este tema en este post, me atrevo a comentar lo siguiente:
Que Microsoft es malo y que quiere dominar el mundo, y que este anuncio es solo una "trampa" mas para tratar de atraer a desarrolladores Open Source para después acabar con ellos.
Ok, ya en serio, creo que va a haber una división de opiniones:
Los primeros, los mas puristas en el ambiente Open Source dirán que esto no cambia la cosa, aunque Microsoft abra sus protocolos, el software de Microsoft sigue siendo privativo por lo tanto no se debe de mezclar con Open Source, a menos que Microsoft libere sus protocolos en una licencia tipo GPL que les llene el ojo.
Algunos otros simplemente porque esto significa colaborar con Microsoft dirán que no es importante y que no les interesa.
Abra un segundo grupo que verán esto con buenos ojos, y trataran de aprovechar esta apertura de Microsoft, esto a la mejor significar que algunos proyectos se van a ramificar (fork) ya que a la mejor algunos de los programadores no les interesara involucrase directamente con Microsoft, a otros si, por lo tanto puede haber mas de una rama de algún proyecto debido a esta diferencias.
También es posible que nazcan nuevos proyectos desde cero a partir de esta iniciativa de Microsoft (Hint: ActiveSync para el iPhone).
Por otra parte si bien Microsoft abre sus protocolos para proyectos Open Source y no-comerciales, en el comunicado deja muy en claro que quien decida distribuir comercialmente la implementación de estos protocolos debe de adquirir una licencia para sus patentes, por lo tanto, esto me da a entender que si RedHat, Novell o Ubuntu (solo por mencionar algunas) distribuyen algún programa que implemente estos protocolos, estas compañías van a tener que licenciar las patentes, aun y cuando estas empresas no cobren por el software en si, pero si obtienen un beneficio comercial de este ultimo.
Habría que esperar y ver cual es la postura de los diversos grupos de desarrolladores Open Source, las compañías involucradas y obviamente los ¨troles¨ de Slashdot ;)
miércoles, febrero 20, 2008
Después de una semana con mi iPhone
Hoy ya cumplo una semana desde que adquirí mi mi iPhone de 16 GB, hasta el momento no me ha decepcionado.
Primeramente lo bueno del teléfono, la pantalla es increíble, el "feel&look" de la interface es excelente como en una computadora Apple, existe una gran cantidad de aplicaciones "no oficiales", algunas útiles otras no tanto (aunque para esto se necesita hacer un JailBrake al teléfono).
El que tenga soporte para Wi-Fi es un plus para mi, ya que me es posible navegar el Internet y consultar correos, por cierto es posible ver en linea los "attachement" como images o archivos de Word, ademas de tener soporte para VPN.
Obviamente la funcionalidad de IPod es excelente, nunca me había llamado la atención un IPod, pero creo que le estoy empezando a "agarrar" el gusto; la reproducción de vídeos es otra característica que me encanta.
Ademas se sincronizan mis contactos y eventos de calendario con mi MacBook Pro.
El teclado en pantalla es algo a lo que todavía me estoy acostumbrando, aunque definitivamente facilita el escribir mensajes SMS o notas en el teléfono, por ser un teclado .
Ahora viene lo malo del teléfono, primeramente, bueno el que se tenga que recurrir a desbloquearlo para poder usarlo con las compañias de telefonía celular en México, aunque el proceso es muy sencillo y solo tarde un par de minutos.
En la modalidad de ¨Speaker¨el volumen de la bocina es muy bajo, así que se convierte en una característica inútil.
El corrector ortográfico, solo existe para ingles, así que si esta escribiendo en español, trata de corregir cada palabra automáticamente, echando a perder loo que se escribió y no hay forma de deshabilitarlo.
La funcionalidad de Bluetooth solo sirve para conectar dispositivos como audífonos, etc, pero no sirve para enviar archivos a otros teléfonos o pcs.
Por ultimo algo que a me afecta en lo personal, es que el navegador safari no se puede conectar a sitios OWA (Outlook Web Access), no se si sea un problema del safari o algún problema con el servidor Exchange, el caso es que parece imposible. Obviamente el iPhone no cuenta con ActiveSync para sincronizarse directamente con Exchange, aunque hay rumores que Apple licencio esa tecnología de Microsoft, posiblemente en futuras versiones del software esto estará disponible.
En fin la parte mas critica faltante para mi es el acceso a Exchange directamente o por medio de OWA, solo resta esperar esto se solucione en un futuro no muy lejano, fuera de eso me encanta mi iPhone.
sábado, febrero 16, 2008
Nieve en Tecate
Después de una sorpresiva nevada en la vecina ciudad de Tecate el 14 de Febrero, el 15 por la mañana me di cuenta que algunos de los cerros en direccion a la ciudad de Tecate se veian nevados desde Tijuana.
Mi primer intencion fue ir a darme una vuelta a Tecate, pero por cuestiones de trabajo lo pude hacer solo despues de las 2:30pm, para esa hora los cerros que en la mañana se veian nevados, ya no estaban en esa condicion, esto debido al inteso sol de ayer viernes.
Aun asi me fui en busca de la nieve, sabiendo que posiblemente ya no iba a encontra nada en las inmediasiones de Tecate, tome la carretera de cuota hacia Mexicali y despues de 15 minutos de haber salido de Tecate, aparecio el panorama invernal, los costados de la carretara cn nieve acumulada, al igual que los cerros alrededor.
Me detuve en un paradero y nos fuimos a la nieve por un buen rato. Habia una cantidad considerable de gente detenida en las orillas de la carretera en diferentes puntos disfrutando de lo que en las noticias se dijo ¨La mas fuerte nevada en el area en Tecate en los ultimos 8 años¨.
Aqui les dejo las siguientes fotos del panorama (Fotos con el caption de "Tecate nieve"). Hay mas fotos donde se ven espacios mas amplios cubiertos de nieve, pero estan en mi camara y no la tengo a la mano, estas fotos son solo de mi iPhone.

Mi primer intencion fue ir a darme una vuelta a Tecate, pero por cuestiones de trabajo lo pude hacer solo despues de las 2:30pm, para esa hora los cerros que en la mañana se veian nevados, ya no estaban en esa condicion, esto debido al inteso sol de ayer viernes.
Aun asi me fui en busca de la nieve, sabiendo que posiblemente ya no iba a encontra nada en las inmediasiones de Tecate, tome la carretera de cuota hacia Mexicali y despues de 15 minutos de haber salido de Tecate, aparecio el panorama invernal, los costados de la carretara cn nieve acumulada, al igual que los cerros alrededor.
Me detuve en un paradero y nos fuimos a la nieve por un buen rato. Habia una cantidad considerable de gente detenida en las orillas de la carretera en diferentes puntos disfrutando de lo que en las noticias se dijo ¨La mas fuerte nevada en el area en Tecate en los ultimos 8 años¨.
Aqui les dejo las siguientes fotos del panorama (Fotos con el caption de "Tecate nieve"). Hay mas fotos donde se ven espacios mas amplios cubiertos de nieve, pero estan en mi camara y no la tengo a la mano, estas fotos son solo de mi iPhone.
Etiquetas:
General
lunes, febrero 11, 2008
Reunión 22 de la Comunidad Tijuana .NET
EVENTO
Fecha: Miércoles 27 de febrero de 2008
Horario: 6:00 p.m. a 8:00 p.m.
Ubicación: CANIETI
Dirección: Blvd. Agua Caliente 4558 Oficina 1205
Torres de Agua Caliente
Col. Aviación
22420 Tijuana, B.C.
Costo: Entrada gratis
AGENDA
18:00 Bienvenida
18:15 Novedades en .NET 3.5
Mario Alberto Chávez
19:30 Rifas y despedida
Recuerda que es una reunión para compartir conocimientos, experiencias y técnicas. Y como siempre, rifas y regalos al terminar.
Fecha: Miércoles 27 de febrero de 2008
Horario: 6:00 p.m. a 8:00 p.m.
Ubicación: CANIETI
Dirección: Blvd. Agua Caliente 4558 Oficina 1205
Torres de Agua Caliente
Col. Aviación
22420 Tijuana, B.C.
Costo: Entrada gratis
AGENDA
18:00 Bienvenida
18:15 Novedades en .NET 3.5
Mario Alberto Chávez
19:30 Rifas y despedida
Recuerda que es una reunión para compartir conocimientos, experiencias y técnicas. Y como siempre, rifas y regalos al terminar.
Etiquetas:
Microsoft
miércoles, febrero 06, 2008
Monodevelop en OSX
Ya en post anteriores había comentado que el equipo de Mono esta trabajando para mejorar el soporte de MWF y GTK# en OSX.
Uno de los objetivos es que ambos Frameworks trabajaran correctamente en OSX, el otro de los objetivos es que las aplicaciones se integraran con el sistema operativo, es decir que no se vieran "extrañas".
El trabajo aun esta en proceso, de hecho el día de ayer se libero una versión de pruebas para OSX.
Las mejoras visibles, sin entrar mucho en detalle son:
- Las aplicaciones MWF no "parpadean" cada vez que obtienen el "focus" o el "focus" es transferido a alguno de los controles de la forma
- Por primera vez se incluyó el ambiente de desarrollo Monodevelop 0.18, el cual corre - dentro de lo poco que lo probado - muy bien.
- Se incluye el programa MOMA que analiza aplicaciones MWF para determinar que clases de las que usa el programa aun no han sido implementadas, ademas de generar el reporte correspondiente.
Uno de los objetivos es que ambos Frameworks trabajaran correctamente en OSX, el otro de los objetivos es que las aplicaciones se integraran con el sistema operativo, es decir que no se vieran "extrañas".
El trabajo aun esta en proceso, de hecho el día de ayer se libero una versión de pruebas para OSX.
Las mejoras visibles, sin entrar mucho en detalle son:
- Las aplicaciones MWF no "parpadean" cada vez que obtienen el "focus" o el "focus" es transferido a alguno de los controles de la forma
- Por primera vez se incluyó el ambiente de desarrollo Monodevelop 0.18, el cual corre - dentro de lo poco que lo probado - muy bien.
- Se incluye el programa MOMA que analiza aplicaciones MWF para determinar que clases de las que usa el programa aun no han sido implementadas, ademas de generar el reporte correspondiente.
viernes, enero 25, 2008
Clientes Remote Desktop para OSX
En mi trabajo de consultoría sobre Bases de datos y Business Intelligence, trabajo en un 98% con Microsoft SQL. El trabajo lo realizo en mi MacBook Pro, generalmente de forma remota conectándome a los sitios de mis clientes por medio de Terminal Services.
Para OSX existen por lo menos 3 clientes que permiten realizar conexiones a Terminal Services:
Microsoft Remote Desktop Connection Beta 2
CoRD
TSClientX
Los 3 los he utilizado en la búsqueda del mejor cliente para el trabajo, pero he encontrado que todos tienen sus limitaciones, y no es que yo requiere cosas como "mapeo" de drives o impresión remota; mis requerimientos son muy básicos:
Conectarme remotamente
Poder cambiar el tamaño de la pantalla cliente
Poder conectarme a pantalla completa
Poder abrir mas de una conexión a un mismo tiempo a diferentes computadores.
Poder realizar ¨copy & paste¨ de textos entre la terminal remota y OSX
Comenzare platicando sobre TSClientX, esta basado en RDesktop el cual es el programa estándar para conexión a Terminal Services en Linux, en Linux funciona perfectamente, pero en OSX no tanto. Si bien me permite realizar las tareas que mencione anteriormente, no esta muy integrado con OSX, ya que depende de X11 lo cual hace que la aplicación se comporte extraña en OSX, ademas de que el ¨copy & paste¨ no me funciona del todo.
MS RDC Beta2 funciona bastante bien, salvo algunas ocasiones que simplemente ¨truena¨, el ¨copy & paste¨ funciona muy bien, inclusive puedo usar la tecla option + c ó option + v, en lugar del ctrl, pero aunque Microsoft dice que si permite abrir múltiples sesiones la verdad es que no me ha funcionado y el soporte para pantalla completa es simplemente ¨horroroso¨. RDC ya tiene en estado de Beta 2 un buen tiempo, quien sabe si alguna vez vaya a existir la versión final o alguna actualización que corrija estos problemas.
CoRD es un cliente que su nacimiento fue de forma nativa en OSX, por lo tanto su integración con el SO es muy buena, Cord permite abrir múltiples sesiones a Terminal Services a la vez, y las mantiene todas organizadas en una sola ventana - como en especie de tabs -, el soporte para pantalla completa es excelente, el único problema es que el ¨copy & paste¨ solo se puede hacer con la tecla ctrl mas no con la tecla option, lo cual es un poco irritable, ya que en OSX la forma estándar de ¨copy & paste¨ es con la tecla option.

En fin creo que de los 3 programas, por lo menos para OSX CoRD es la mejor opción, mencioné que CoRD es open source?.
Ya hay solicitudes de mejoras de otros usuario para permitir ¨mapear¨ la tecla ctrl a option y que así CoRD funcione de forma mas estándar con OSX, espero en alguna de las próximas versiones se implemente este cambio.
Para OSX existen por lo menos 3 clientes que permiten realizar conexiones a Terminal Services:
Microsoft Remote Desktop Connection Beta 2
CoRD
TSClientX
Los 3 los he utilizado en la búsqueda del mejor cliente para el trabajo, pero he encontrado que todos tienen sus limitaciones, y no es que yo requiere cosas como "mapeo" de drives o impresión remota; mis requerimientos son muy básicos:
Conectarme remotamente
Poder cambiar el tamaño de la pantalla cliente
Poder conectarme a pantalla completa
Poder abrir mas de una conexión a un mismo tiempo a diferentes computadores.
Poder realizar ¨copy & paste¨ de textos entre la terminal remota y OSX
Comenzare platicando sobre TSClientX, esta basado en RDesktop el cual es el programa estándar para conexión a Terminal Services en Linux, en Linux funciona perfectamente, pero en OSX no tanto. Si bien me permite realizar las tareas que mencione anteriormente, no esta muy integrado con OSX, ya que depende de X11 lo cual hace que la aplicación se comporte extraña en OSX, ademas de que el ¨copy & paste¨ no me funciona del todo.
MS RDC Beta2 funciona bastante bien, salvo algunas ocasiones que simplemente ¨truena¨, el ¨copy & paste¨ funciona muy bien, inclusive puedo usar la tecla option + c ó option + v, en lugar del ctrl, pero aunque Microsoft dice que si permite abrir múltiples sesiones la verdad es que no me ha funcionado y el soporte para pantalla completa es simplemente ¨horroroso¨. RDC ya tiene en estado de Beta 2 un buen tiempo, quien sabe si alguna vez vaya a existir la versión final o alguna actualización que corrija estos problemas.
CoRD es un cliente que su nacimiento fue de forma nativa en OSX, por lo tanto su integración con el SO es muy buena, Cord permite abrir múltiples sesiones a Terminal Services a la vez, y las mantiene todas organizadas en una sola ventana - como en especie de tabs -, el soporte para pantalla completa es excelente, el único problema es que el ¨copy & paste¨ solo se puede hacer con la tecla ctrl mas no con la tecla option, lo cual es un poco irritable, ya que en OSX la forma estándar de ¨copy & paste¨ es con la tecla option.
En fin creo que de los 3 programas, por lo menos para OSX CoRD es la mejor opción, mencioné que CoRD es open source?.
Ya hay solicitudes de mejoras de otros usuario para permitir ¨mapear¨ la tecla ctrl a option y que así CoRD funcione de forma mas estándar con OSX, espero en alguna de las próximas versiones se implemente este cambio.
martes, enero 22, 2008
Como saber que service pack tiene nuestro MSSQL 2005, si no somos SysDB
Este artículo en inglés explica como podemos saber que service pack o hotfix tenemos instalado en nuestro servidor de MSSQL 2005 si es que no somos el SysDBA.
Basicamente se requiere ejecutar el siguiente SQL y consultar la tabla del artículo, aunque solo llega hasta el service pack 1:
WITH Version(ver)
AS
(
SELECT SUBSTRING
(
@@VERSION,
CHARINDEX(' - ', @@VERSION)+3,
32
)
)
SELECT Build = LEFT(ver, CHARINDEX(' ', ver))
FROM Version
Para el service pack 2, si el SQL anterior nos reporta la versión 9.00.3054.00, entonces si está instalado.
Si se tiene acceso a herramientas como el Microsoft SQL Management Studio, la cosa es mas fácil, cada servidor al que nos conectemos nos muestra la version del mismo.
Basicamente se requiere ejecutar el siguiente SQL y consultar la tabla del artículo, aunque solo llega hasta el service pack 1:
WITH Version(ver)
AS
(
SELECT SUBSTRING
(
@@VERSION,
CHARINDEX(' - ', @@VERSION)+3,
32
)
)
SELECT Build = LEFT(ver, CHARINDEX(' ', ver))
FROM Version
Para el service pack 2, si el SQL anterior nos reporta la versión 9.00.3054.00, entonces si está instalado.
Si se tiene acceso a herramientas como el Microsoft SQL Management Studio, la cosa es mas fácil, cada servidor al que nos conectemos nos muestra la version del mismo.
lunes, enero 21, 2008
GTKSharp y Windows Forms nativos en OSX
En el pasado MonoSummit se anunció un mayor soporte de Mono para OSX, el soporte principalmente incluía el poder ejecutar los ambientes gráficos GTK+ y Windows Forms de forma nativa en OSX.
Para el caso de GTK+ la idea es utilizar el trabajo realizado por Imendio, el cual hace uso del backend nativo de OSX para que GTK+ dibuje su interface, en lugar de usar X11, lo ayuda a tener una mejor integración de las aplicaciones GTK+ con OSX.
Como primer fruto de esta integración se menciono que se estaría trabajando en liberar una versión de MonoDevelop para OSX, el trabajo sobre MD aun esta en progreso, aunque no hay información de cuando va a estar listo.

Por el lado de Windows Forms, también se beneficio de la integración nativa con OSX, ya que las aplicaciones WF no necesitan mas de X11, aunque para que esto suceda es necesario descargar las librerías de WF del sitio de Geoff Norton y ejecutar las siguientes lineas en una terminal antes de lanzar una aplicación WF:
export MONO_MWF_USE_CARBON_BACKEND=1
export MONO_MWF_USE_QUARTZ_BACKEND=1
Por ejemplo para mi en lo personal este avance es importante porque una de las herramientas para .NET/Mono que mas utilizo es Reflector para inspeccionar los métodos de librerías, y por primera vez desde ya hace un poco mas de un mes, he podido ejecutar Reflector desde OSX sin ningún problema.

Ahora solo resta esperar mejoras en el ambiente de WF y esperar a primera entrega funcional de GTKSharp de forma nativa en OSX.
Para el caso de GTK+ la idea es utilizar el trabajo realizado por Imendio, el cual hace uso del backend nativo de OSX para que GTK+ dibuje su interface, en lugar de usar X11, lo ayuda a tener una mejor integración de las aplicaciones GTK+ con OSX.
Como primer fruto de esta integración se menciono que se estaría trabajando en liberar una versión de MonoDevelop para OSX, el trabajo sobre MD aun esta en progreso, aunque no hay información de cuando va a estar listo.
Por el lado de Windows Forms, también se beneficio de la integración nativa con OSX, ya que las aplicaciones WF no necesitan mas de X11, aunque para que esto suceda es necesario descargar las librerías de WF del sitio de Geoff Norton y ejecutar las siguientes lineas en una terminal antes de lanzar una aplicación WF:
export MONO_MWF_USE_CARBON_BACKEND=1
export MONO_MWF_USE_QUARTZ_BACKEND=1
Por ejemplo para mi en lo personal este avance es importante porque una de las herramientas para .NET/Mono que mas utilizo es Reflector para inspeccionar los métodos de librerías, y por primera vez desde ya hace un poco mas de un mes, he podido ejecutar Reflector desde OSX sin ningún problema.

Ahora solo resta esperar mejoras en el ambiente de WF y esperar a primera entrega funcional de GTKSharp de forma nativa en OSX.
Video Cast 4, Refactoring y TDD
Este 2008 ha comenzado con viajes de trabajo y poco tiempo en casa, por tal motivo no había liberado ningún nuevo Video Cast.
Este Video Cast es el primero de una serie, en la cual estaremos trabajando con un pequeño proyecto, en donde implementaremos algunas técnicas relacionadas con metodologias ágiles y otra técnicas para simplificar la dependencia entre clases.
Los puntos que se tocarían en esta serie de Video Casts serian:
Este primer Video Cast trata sobre refactoring y una breve introducción de TDD.
Refactoring es una técnica en la cual se toma el código actual de una clase o un grupo de clases y se modifica su implementación interna ya sea para mejorar su funcionamiento o reorganizar el código, pero siempre con el objetivo que el comportamiento de las clases modificadas sea el mismo que antes de la modificación, es decir, que se busca no ¨romper¨ su funcionalidad.
TDD es una técnica ágil en donde antes de escribir la implementación de una clase de acuerdo a los requerimientos que tenemos, se escriben una serie de pruebas sobre dichas clases para asegurarnos que la clase va a funcionar de acuerdo a lo que se especifico en las pruebas.
Esto tiene 2 implicaciones importantes, la primera es que al escribir primero la prueba, TDD nos ayuda a definir el diseño de nuestra clases antes de que las implementemos, la segunda implicación es que al implementar nuestras clases las pruebas nos ayudan a verificar si la clase cumple con las expectativas y/o requerimientos de nuestras especificaciones y nuestras pruebas.
Las herramientas y librerías necesarias u opcionales se listan en este post
Por cierto este Video Cast lo grabé como a la 1:00am, ya estaba algo dormido.
El video con mejor calidad se puede descargar de aquí.
El código para este video cast se encuentra aquí (V4).
Este Video Cast es el primero de una serie, en la cual estaremos trabajando con un pequeño proyecto, en donde implementaremos algunas técnicas relacionadas con metodologias ágiles y otra técnicas para simplificar la dependencia entre clases.
Los puntos que se tocarían en esta serie de Video Casts serian:
- Refactoring
- Test Driven Development (TDD)
- Mocking
- Inyección de dependencias con contenedores (IoC)
Este primer Video Cast trata sobre refactoring y una breve introducción de TDD.
Refactoring es una técnica en la cual se toma el código actual de una clase o un grupo de clases y se modifica su implementación interna ya sea para mejorar su funcionamiento o reorganizar el código, pero siempre con el objetivo que el comportamiento de las clases modificadas sea el mismo que antes de la modificación, es decir, que se busca no ¨romper¨ su funcionalidad.
TDD es una técnica ágil en donde antes de escribir la implementación de una clase de acuerdo a los requerimientos que tenemos, se escriben una serie de pruebas sobre dichas clases para asegurarnos que la clase va a funcionar de acuerdo a lo que se especifico en las pruebas.
Esto tiene 2 implicaciones importantes, la primera es que al escribir primero la prueba, TDD nos ayuda a definir el diseño de nuestra clases antes de que las implementemos, la segunda implicación es que al implementar nuestras clases las pruebas nos ayudan a verificar si la clase cumple con las expectativas y/o requerimientos de nuestras especificaciones y nuestras pruebas.
Las herramientas y librerías necesarias u opcionales se listan en este post
Por cierto este Video Cast lo grabé como a la 1:00am, ya estaba algo dormido.
El video con mejor calidad se puede descargar de aquí.
El código para este video cast se encuentra aquí (V4).
This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 2.5 Mexico License.
jueves, enero 17, 2008
Semana de violencia en Tijuana
Hoy por la mañana estaba leyendo el post ¨Martes negro¨, donde Stan hace referencia a los acontecimientos de violencia contra policías y sus familias aquí en la ciudad de Tijuana, cuando por messenger me comentan que se estaba llevando a cabo una ¨balacera¨en la colonia Ermita.
No me encuentro actualmente en Tijuana, así que mi única opción fue dirigirme al periódico Frontera por mas información sobre lo que ocurría. Efectivamente un nuevo acto de violencia se estaba llevando a cabo donde policías municipales, estatales, federales y el mismo ejercito intercambiaban disparos con los ocupantes de una casa, a la cual las policías tenían sitiada.

Se cerro la circulación y el acceso a personas alrededor del área donde se llevaban a cabo estos hechos; me es difícil imaginar la angustia de los vecinos alrededor de la casa sitiada y mucho mas aun la angustia de los padres que tenían a sus hijos en una escuela pre-escolar cerca del lugar; los niños tuvieron que ser rescatados en plena ¨balacera¨.
Es realmente triste lo que ha sucedido en la ciudad en este principio de año, pero al mismo tiempo un tanto alentador, ya que si bien durante la gestión de Hank también ocurrieron hechos como los actuales, nunca se pudo capturar a nadie y los que capturaron fueron rescatados; por lo menos en los últimos acontecimientos la policía a sido capaz de realizar arrestos.

Creo que durante mucho tiempo las bandas delictivas se acostumbraron a actuar con impunidad en la ciudad, ahorita mi percepción personal es que el gobierno finalmente esta haciendo algo por enfrentarlas; aunque eso implica que se van a dar mas acontecimientos como el de hoy y como el del martes pasado.
Esperemos que el gobierno y las policías tengan la capacidad para resistir estos embates y se dirijan con honestidad para así poder recuperar nuestra ciudad.
Nota: Todas las fotos las ¨tome¨ del periódico La Jornada en linea, aunque creo que los derechos le pertenecen a Reuters.
Etiquetas:
General
lunes, enero 14, 2008
Kuali, aún no se sabe que pasó con él
A mediados del año pasado publiqué un post realizando la pregunta de, ¿que había pasado con Kuali?, la cual era una herramienta para manejar el desarrollo de software en base a la norma Moprosoft que impulsa ó impulsaba la Secretaría de Economía.
En el post comento que el software fue realizado por Microsoft México bajo el encargo de la misma secretaría, Microsoft delego el desarrollo a uno de sus socios, CrossHorizons. Ademas la Secretaría de Economía firmo un convenio donde erogó una suma de dinero para que Microsoft promocionara la herramienta en los eventos DevDays.
A Kuali solo tuvimos acceso a versiones Beta, nunca se liberó alguna versión final ni mucho menos el código fuente - ya que se según recuerdo se hizo hincapié en que el código seria liberado una vez terminado el proyecto -, y así de repente los sitios de Kuali desaparecieron y toda referencia a la herramienta también.
En ese post se vertieron algunos comentarios descalificando a personas que trabajaron en el proyecto como empleados de CrossHorizons, pero uno de los comentarios es precisamente de Alberto Borbolla - no Bedolla como yo lo indique en el post - con el cual explica que fue lo que ocurrió hasta donde el tiene conocimiento, el comentario en cuestión es el siguiente:
Ahora si, que cada quien haga sus conclusiones.
En el post comento que el software fue realizado por Microsoft México bajo el encargo de la misma secretaría, Microsoft delego el desarrollo a uno de sus socios, CrossHorizons. Ademas la Secretaría de Economía firmo un convenio donde erogó una suma de dinero para que Microsoft promocionara la herramienta en los eventos DevDays.
A Kuali solo tuvimos acceso a versiones Beta, nunca se liberó alguna versión final ni mucho menos el código fuente - ya que se según recuerdo se hizo hincapié en que el código seria liberado una vez terminado el proyecto -, y así de repente los sitios de Kuali desaparecieron y toda referencia a la herramienta también.
En ese post se vertieron algunos comentarios descalificando a personas que trabajaron en el proyecto como empleados de CrossHorizons, pero uno de los comentarios es precisamente de Alberto Borbolla - no Bedolla como yo lo indique en el post - con el cual explica que fue lo que ocurrió hasta donde el tiene conocimiento, el comentario en cuestión es el siguiente:
Para contestar algunas de tus preguntas, y precisar alguna de la información expresada en los comentarios a tu post. Específicamente porque en ellos se hace referencia a mi persona.
Estás en lo correcto, Kuali fue desarrollada por nosotros (CrossHorizons) a petición de Microsoft, con el propósito de favorecer la adopción de MoProSoft entre la industría PYME Mexicana. Y efectivamente los derechos de la propiedad intelectual de la aplicación son de la Secretaría de Economía. Sobre el seguimiento de la herramienta, te comento que nuestra participación en la herramienta solo consistió en el desarrollo de la misma, dentro de lo cual creamos un sitio para que fuera posible a los usuarios probar una versión preliminar (Beta), y recibir retroalimentación de dichos usuarios. Así mismo creamos dentro de nuestros servidores un foro para la recepción de comentarios, sugerencias y reportes de defectos.
Efectivamente las primeras versiones Beta de Kuali incluso usaban versiones Beta del .NET Framework 2.0, así como del SQL Server 2005. Cuando fueron liberados ambos componentes, liberamos nuestra primera versión, la cual contenía nueva funcionalidad que implementamos en base a sugerencias de los primeros usuarios que probaron la herramienta, así mismo solucionamos una serie de problemas (defectos) que se manifestaban en diferentes circunstancias y combinaciones de versiones de .NET Framework vs Versiones de SQL Server 2005. Una vez que realizamos la liberación de la herramienta, entregamos la última versión de código fuente a Microsoft,y con eso concluyo nuestra participación en el proyecto. No tuvimos participación alguna respecto de como se llevó a cabo el mantenimiento, soporte , promoción, mejora o divulgación de la herramienta.
Efectivamente como Tu lo comentas, se realizo una gira de promoción por medio de los DevDays de Microsoft sobre la herramienta, en la cual nosotros ya no participamos.
Lamento no tener mayor información al respecto de la herramienta, supongo que alguien de la Secretaría de Economía o de Microsoft, debe de tener mayor información al respecto. Aprovecho para aclarar que la empresa que contrato nuestros servicios para el desarrollo de la herramienta fue Microsoft.
Tu Servidor
Alberto Borbolla
Director de Consultoría
CrossHorizons
Ahora si, que cada quien haga sus conclusiones.
sábado, diciembre 29, 2007
Windows Vista == Bloathware
En estos días tranquilos me dispuse a crear una maquina virtual con Windows Vista, el motivo, nunca la he utilizado y quería ver que tal funcionaba, ya que en lo general he escuchado muy malos comentarios acerca de Vista, tanto en Internet, como de forma personal de amigos y conocidos.
De los amigos principalmente había escuchado quejas, como que sus laptops eran nuevas con Vista pre-instalado y funcionaban muy lentas, tan solo para cargar el Word tardaba varios minutos.
Quejas sobre ventanas que aparecían una y otra vez para confirmar si se quería realizar una determinada acción, quejas de que aun y con 2GB de RAM y ningún programa ejecutandose la memoria estaba siempre utilizada al 100%.
En fin, se me acercaban a preguntarme como le podían hacer para "actualizarse" a XP, pero el problema en las laptos nuevas, es que el fabricante no tiene drivers disponibles para XP, así que solo había de 2 opciones, quedarse con Vista o ponerle Linux. Es curioso ver en el salón un numero mas o menos balanceado entre laptops XP, Vista y Linux.
Actualmente cuento con una licencia de XP, la cual ejecuto en una maquina virtual, tengo instalado únicamente el Visual Studio 2005, y algunas bases de datos de SQL 2005; cada vez es menos común que utilice esta maquina virtual, por lo tanto el espacio en disco que le tengo destinado, son 12 GB, los cuales están prácticamente ocupados.
Teniendo esto como antecedente, cree una maquina virtual con 10GB de espacio en disco y 512 MB de RAM, la instalación de Vista fue bastante normal, de hecho no tardo tanto tiempo como XP. Inicie Vista y navegue opciones del panel de control, tal y como me comentaron mis amigos, me aparecieron mil y una ventanas para confirmar si quería realizar tal o cual acción. En lo personal no me molesto tanto, ya que solo salen cuando se hacen cambios en la configuración - por lo menos hasta donde pude ver -.
Investigando sobre el uso de la memoria, encontré que Vista usa la memoria como cache para los programas que ya se ejecutaron, es decir cuando un programa se cierra no devuelve inmediatamente la memoria al Sistema operativo, la mantiene ahí hasta que otro programa la reclama o hasta que el mismo programa se vuelve a cargar, cuando sucede esta ultima opción, el programa no se carga completamente desde el disco duro, usa la copia existente en memoria, lo cual hace que se cargue mas rápido.
Linux y OSX hace lo mismo de algún u otro modo, de hecho el algoritmo para manejo de la memoria como cache de programas me toco verlo en la escuela el semestre que acabó.
Quise instalarse el Visual Studio a Vista, pero sorpresivamente me indicaba que no tenia espacio suficiente, que de los 10GB de el disco virtual solo me quedaban 2GB, !!!!! WFT ?????; no tenia nada instalado, solo el sistema operativo!!!!.
Resulta que Vista reserva el 15% del espacio para realizar el ¨System Restore¨, es decir guarda imágenes de como estaba Vista antes de instalar un parche o una aplicación, para que en caso de que exista algún problema, se pueda volver a la configuración anterior.
Ademas existe un fólder llamado WinSXS en el fólder Windows que tiene copias de las librerías instaladas en el sistema, con la finalidad de que cada vez que una aplicación instala la misma librería pero diferente versión, la aplicación siempre encuentre la versión correcta de su librería; a esta ¨caracteristica¨le llaman ¨Side by side assemblies¨.
Así que entre que Vista me protege de fallos en la instalación de parches y aplicaciones y de problemas por el llamado ¨DLL Hell¨, mi espacio en disco duro se agoto y no puedo instalar nada!. Vaya protección si no instalo y no puedo ejecutar nada, nada malo le va a pasar a Vista - no se porque esta situación me recuerda la película I Robot -.
Sobre este ultimo punto encontré quejas y sugerencia de como hacer que Vista te regrese un poco de espacio de disco duro, pero ninguna cantidad relevante, ademas de comentarios de gente que dice que su directorio WinSXS mide mas de 10GB y no hay forma de limpiarlo y hacerlo mas chico.
Por mi parte la única solución que encontré es: Borrar la maquina virtual de Vista, mantener mi maquina virtual de XP, para lo que se ofrezca, y continuar usando mi OSX.
De los amigos principalmente había escuchado quejas, como que sus laptops eran nuevas con Vista pre-instalado y funcionaban muy lentas, tan solo para cargar el Word tardaba varios minutos.
Quejas sobre ventanas que aparecían una y otra vez para confirmar si se quería realizar una determinada acción, quejas de que aun y con 2GB de RAM y ningún programa ejecutandose la memoria estaba siempre utilizada al 100%.
En fin, se me acercaban a preguntarme como le podían hacer para "actualizarse" a XP, pero el problema en las laptos nuevas, es que el fabricante no tiene drivers disponibles para XP, así que solo había de 2 opciones, quedarse con Vista o ponerle Linux. Es curioso ver en el salón un numero mas o menos balanceado entre laptops XP, Vista y Linux.
Actualmente cuento con una licencia de XP, la cual ejecuto en una maquina virtual, tengo instalado únicamente el Visual Studio 2005, y algunas bases de datos de SQL 2005; cada vez es menos común que utilice esta maquina virtual, por lo tanto el espacio en disco que le tengo destinado, son 12 GB, los cuales están prácticamente ocupados.
Teniendo esto como antecedente, cree una maquina virtual con 10GB de espacio en disco y 512 MB de RAM, la instalación de Vista fue bastante normal, de hecho no tardo tanto tiempo como XP. Inicie Vista y navegue opciones del panel de control, tal y como me comentaron mis amigos, me aparecieron mil y una ventanas para confirmar si quería realizar tal o cual acción. En lo personal no me molesto tanto, ya que solo salen cuando se hacen cambios en la configuración - por lo menos hasta donde pude ver -.
Investigando sobre el uso de la memoria, encontré que Vista usa la memoria como cache para los programas que ya se ejecutaron, es decir cuando un programa se cierra no devuelve inmediatamente la memoria al Sistema operativo, la mantiene ahí hasta que otro programa la reclama o hasta que el mismo programa se vuelve a cargar, cuando sucede esta ultima opción, el programa no se carga completamente desde el disco duro, usa la copia existente en memoria, lo cual hace que se cargue mas rápido.
Linux y OSX hace lo mismo de algún u otro modo, de hecho el algoritmo para manejo de la memoria como cache de programas me toco verlo en la escuela el semestre que acabó.
Quise instalarse el Visual Studio a Vista, pero sorpresivamente me indicaba que no tenia espacio suficiente, que de los 10GB de el disco virtual solo me quedaban 2GB, !!!!! WFT ?????; no tenia nada instalado, solo el sistema operativo!!!!.
Resulta que Vista reserva el 15% del espacio para realizar el ¨System Restore¨, es decir guarda imágenes de como estaba Vista antes de instalar un parche o una aplicación, para que en caso de que exista algún problema, se pueda volver a la configuración anterior.
Ademas existe un fólder llamado WinSXS en el fólder Windows que tiene copias de las librerías instaladas en el sistema, con la finalidad de que cada vez que una aplicación instala la misma librería pero diferente versión, la aplicación siempre encuentre la versión correcta de su librería; a esta ¨caracteristica¨le llaman ¨Side by side assemblies¨.
Así que entre que Vista me protege de fallos en la instalación de parches y aplicaciones y de problemas por el llamado ¨DLL Hell¨, mi espacio en disco duro se agoto y no puedo instalar nada!. Vaya protección si no instalo y no puedo ejecutar nada, nada malo le va a pasar a Vista - no se porque esta situación me recuerda la película I Robot -.
Sobre este ultimo punto encontré quejas y sugerencia de como hacer que Vista te regrese un poco de espacio de disco duro, pero ninguna cantidad relevante, ademas de comentarios de gente que dice que su directorio WinSXS mide mas de 10GB y no hay forma de limpiarlo y hacerlo mas chico.
Por mi parte la única solución que encontré es: Borrar la maquina virtual de Vista, mantener mi maquina virtual de XP, para lo que se ofrezca, y continuar usando mi OSX.
martes, diciembre 18, 2007
Video Cast 3, Introducción a nueva funcionalidad en .NET 3.5
Por cuestiones de diversos pendientes, no me había sido posible realizar este Video Cast, pero finalmente aquí está. Este es el ultimo video cast de este año, pero a principios del 2008 estare presentado nuevos.
Ya esta disponible el tercer Video cast que muestra la nueva funcionalidad introducida en .NET 3.5, específicamente se muestra como funciona:
- Expresiones Lambda
- Introducción a LINQ
Las herramientas y librerías necesarias u opcionales se listan en este post.
El código fuente de ejemplo puede ser descargado de aquí. El archivo para este video cast es V3.zip
La liga directa al video esta aquí.
Ya esta disponible el tercer Video cast que muestra la nueva funcionalidad introducida en .NET 3.5, específicamente se muestra como funciona:
- Expresiones Lambda
- Introducción a LINQ
Las herramientas y librerías necesarias u opcionales se listan en este post.
El código fuente de ejemplo puede ser descargado de aquí. El archivo para este video cast es V3.zip
La liga directa al video esta aquí.
This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 2.5 Mexico License.
lunes, diciembre 17, 2007
Nuevo Videocast
Ya esta listo el nuevo VideoCast de la serie "Novedades en los lenguajes de .NET 3.5", por saturación de trabajo, no me fue posible realizarlo la semana pasada - muchos proyectos que entregar en la escuela -, pero por fin hoy quedo. Ya solo resta subirlo a Internet para hacer publico oficialmente.
martes, diciembre 11, 2007
El nuevo Microsoft ASP.NET MVC
Desde la introducción de .NET 1.0 Microsoft le apostó 100% a el framework de ASP.NET para el desarrollo de aplicaciones web. ASP.NET fue un cambio de paradigma importante ya que en el mundo Microsoft las aplicaciones Web eran aplicaciones en las cuales era fácil perder el rumbo o tener un nivel de complejidad muy importante, debido a lo que se llama "código espagueti" en donde no hay una clara separación del código que es parte de la interfaz gráfica, el flujo del programa y el acceso a los datos.
ASP.NET tuvo muy buena acogida, ya que permitía esta separación de forma mas o menos clara, de lo mas importante es que el código que controla el flujo de la aplicación y los datos se puede alojar en una clase, aparte del código html/ tags ASP.NET que conforman la interface gráfica.
Desde mi punto de vista muy particular, ASP.NET si proporcionaba una mejora en cuanto al desarrollo de aplicaciones web con respecto a como se hacían antes de ASP.NET, pero conforme la aplicación iba creciendo la complejidad de la misma aumentaba de forma importante, desafortunadamente los demos que Microsoft nos presentaba sobre "arrastrar y soltar", escribir aplicaciones sin escribir una linea de código, funciona muy bien para demos y aplicaciones pequeñas; y no en el mundo real.
Programé en ASP.NET y la verdad no me gusto la experiencia, definitivamente la complejidad del ciclo de vida de las paginas cae en lo ridículo, así que me dedique a otras cosas, pero de alguna u otra forma me "salía" la necesidad de programar para web. Buscando alternativas para ASP.NET me encontré con Ruby On Rails, una tecnología para desarrollo web que vuelve a lo básico, el modelo Model-View-Controller.
Mi problema con Ruby On Rails es que había que aprender un nuevo lenguaje, y uno de mis proyectos para una intranet estaba a la vuelta de la esquina, buscando sobre opciones del modelo MVC en .NET me encontré el proyecto Castle Monorail, el cual es una implementación muy cercana a ROR pero en .NET.
Castle Monorail y el patrón MVC me permitió terminar el proyecto para mi cliente de forma rápida y sin complicaciones, pero sobre todo me permitió hacer uso de la técnica Test-Drive Development, para llevar a cabo el desarrollo y probar que mi aplicación funcionara correctamente, algo que es muy difícil de lograr con ASP.NET.
Esta complejidad del ASP.NET no fue algo que únicamente yo vi, también una buena parte de los líderes de opinión en las tecnologías Microsoft, sobre todo el Estados Unidos, se empezaron a quejar y a buscar alternativas como ROR y Monorail, se inicio una discusión entre ellos y Microsoft, se creo el grupo ALT.NET que pondera la utilización de practicas ágiles, sobre herramientas, de hecho realizaron su primera conferencia en Austin, Texas.
En este punto la ruptura de Microsoft con parte de su comunidad era un tanto inminente, pero Microsoft realizo su jugada, y al parecer muy buena jugada, contrato a algunos de estos líderes de opinión para trabajar en una alternativa de ASP.NET y proporcionar a su comunidad una herramienta mas sencilla de utilizar y que fuera compatible con las metodologias ágiles, dentro de estos líderes de opinión contratados están Phil Haack, Rob Conery y Scott Haselman.
Así es como en la conferencia de ALT.NET Scott Guthiere y Scott Haselman presentaron el Microsoft ASP.NET MVC Framework, pero no solo eso, invitaron a gente de la comunidad de desarrolladores a dar sus opiniones sobre el mismo y de esa forma retro-alimentarse y realizar cambios sobre la marcha. El fin de semana pasado salió el primer Community Technical Preview o CTP, y al día de hoy hay una enorme cantidad de posts al respecto y ya inclusive proyectos open source como MVCContrib que tiene la finalidad de agregar nueva funcionalidad al MS MVC; es que ademas una de las características de MS MVC es que es totalmente extensible en todos sus aspectos, esto quiere decir que es posible reemplazar la funcionalidad original con una propia.
Ahora surgen las siguientes preguntas entre los defensores de ASP.NET:
- ¿ASP.NET va a ser reemplazado?, no va a seguirse desarrollando
- ¿Me va a afectar el ASP.NET MVC en algún modo?, no si estas contento con desarrollar en ASP.NET sigue desarrollando en ASP.NET e ignora el MVC
- ¿Que necesito para desarrollar en MVC?, nada solo bajarte las extensiones y ver algunos de los tutoriales - aunque todos están en ingles -
-¿Mi experiencia en ASP.NET me va a ayudar a moverme a MVC?, no, MVC es otro paradigma muy diferente a ASP.NET, va a ser necesario aprender nuevos conceptos.
- ¿Puede mezclar en una aplicación ASP.NET y MVC?, si pero no es muy recomendable
- ¿Que pasa con los controles ASP.NET que he desarrollado y los que he comprado de terceros?, no sirven para MVC
- ¿Que tan difícil es cambiarse a MVC?, los conceptos en si de MVC no son complejos y han estado con nosotros desde la década de los 70´s, poco a poco van a hacer sentido
Como conclusión parece que Microsoft esta vez puso mucha atención a su comunidad de desarrolladores, esperemos que siga por ese camino.
ASP.NET tuvo muy buena acogida, ya que permitía esta separación de forma mas o menos clara, de lo mas importante es que el código que controla el flujo de la aplicación y los datos se puede alojar en una clase, aparte del código html/ tags ASP.NET que conforman la interface gráfica.
Desde mi punto de vista muy particular, ASP.NET si proporcionaba una mejora en cuanto al desarrollo de aplicaciones web con respecto a como se hacían antes de ASP.NET, pero conforme la aplicación iba creciendo la complejidad de la misma aumentaba de forma importante, desafortunadamente los demos que Microsoft nos presentaba sobre "arrastrar y soltar", escribir aplicaciones sin escribir una linea de código, funciona muy bien para demos y aplicaciones pequeñas; y no en el mundo real.
Programé en ASP.NET y la verdad no me gusto la experiencia, definitivamente la complejidad del ciclo de vida de las paginas cae en lo ridículo, así que me dedique a otras cosas, pero de alguna u otra forma me "salía" la necesidad de programar para web. Buscando alternativas para ASP.NET me encontré con Ruby On Rails, una tecnología para desarrollo web que vuelve a lo básico, el modelo Model-View-Controller.
Mi problema con Ruby On Rails es que había que aprender un nuevo lenguaje, y uno de mis proyectos para una intranet estaba a la vuelta de la esquina, buscando sobre opciones del modelo MVC en .NET me encontré el proyecto Castle Monorail, el cual es una implementación muy cercana a ROR pero en .NET.
Castle Monorail y el patrón MVC me permitió terminar el proyecto para mi cliente de forma rápida y sin complicaciones, pero sobre todo me permitió hacer uso de la técnica Test-Drive Development, para llevar a cabo el desarrollo y probar que mi aplicación funcionara correctamente, algo que es muy difícil de lograr con ASP.NET.
Esta complejidad del ASP.NET no fue algo que únicamente yo vi, también una buena parte de los líderes de opinión en las tecnologías Microsoft, sobre todo el Estados Unidos, se empezaron a quejar y a buscar alternativas como ROR y Monorail, se inicio una discusión entre ellos y Microsoft, se creo el grupo ALT.NET que pondera la utilización de practicas ágiles, sobre herramientas, de hecho realizaron su primera conferencia en Austin, Texas.
En este punto la ruptura de Microsoft con parte de su comunidad era un tanto inminente, pero Microsoft realizo su jugada, y al parecer muy buena jugada, contrato a algunos de estos líderes de opinión para trabajar en una alternativa de ASP.NET y proporcionar a su comunidad una herramienta mas sencilla de utilizar y que fuera compatible con las metodologias ágiles, dentro de estos líderes de opinión contratados están Phil Haack, Rob Conery y Scott Haselman.
Así es como en la conferencia de ALT.NET Scott Guthiere y Scott Haselman presentaron el Microsoft ASP.NET MVC Framework, pero no solo eso, invitaron a gente de la comunidad de desarrolladores a dar sus opiniones sobre el mismo y de esa forma retro-alimentarse y realizar cambios sobre la marcha. El fin de semana pasado salió el primer Community Technical Preview o CTP, y al día de hoy hay una enorme cantidad de posts al respecto y ya inclusive proyectos open source como MVCContrib que tiene la finalidad de agregar nueva funcionalidad al MS MVC; es que ademas una de las características de MS MVC es que es totalmente extensible en todos sus aspectos, esto quiere decir que es posible reemplazar la funcionalidad original con una propia.
Ahora surgen las siguientes preguntas entre los defensores de ASP.NET:
- ¿ASP.NET va a ser reemplazado?, no va a seguirse desarrollando
- ¿Me va a afectar el ASP.NET MVC en algún modo?, no si estas contento con desarrollar en ASP.NET sigue desarrollando en ASP.NET e ignora el MVC
- ¿Que necesito para desarrollar en MVC?, nada solo bajarte las extensiones y ver algunos de los tutoriales - aunque todos están en ingles -
-¿Mi experiencia en ASP.NET me va a ayudar a moverme a MVC?, no, MVC es otro paradigma muy diferente a ASP.NET, va a ser necesario aprender nuevos conceptos.
- ¿Puede mezclar en una aplicación ASP.NET y MVC?, si pero no es muy recomendable
- ¿Que pasa con los controles ASP.NET que he desarrollado y los que he comprado de terceros?, no sirven para MVC
- ¿Que tan difícil es cambiarse a MVC?, los conceptos en si de MVC no son complejos y han estado con nosotros desde la década de los 70´s, poco a poco van a hacer sentido
Como conclusión parece que Microsoft esta vez puso mucha atención a su comunidad de desarrolladores, esperemos que siga por ese camino.
jueves, diciembre 06, 2007
Extension para hacer compatibles las extesiones con FireFox 3 beta
Cada vez que Firefox esta cerca de liberar una nueva versión de su navegador sucede la misma situación, que las extensiones no son compatibles con la nueva versión del navegador.
Generalmente los desarrolladores de las extensiones no se toman el tiempo de actualizar sus extensiones con las versiones de prueba de Firefox, se esperan hasta que la versión final esta lista, por lo tanto si nos aventuramos a probar las versiones Beta, es mejor olvidarnos de nuestras extensiones mas útiles.
El ultimo comentario es mas o menos cierto, ya que en esta ocasión hay una extensión que se encarga de modificar nuestras extensiones instaladas para que "parezcan" compatibles con Firefox 3 beta, la mayoría de las extensiones funcionaran sin problema, aunque aun queda el caso de que alguna que otra no funcione.
La extensión en cuestión es "Nightly Tester Tool", simplemente hay que instalarla, cargar la ventana de extensiones de Firefox y hacer "click" en el botón que dice " Make all compatible", reiniciar Firefox y listo.
Generalmente los desarrolladores de las extensiones no se toman el tiempo de actualizar sus extensiones con las versiones de prueba de Firefox, se esperan hasta que la versión final esta lista, por lo tanto si nos aventuramos a probar las versiones Beta, es mejor olvidarnos de nuestras extensiones mas útiles.
El ultimo comentario es mas o menos cierto, ya que en esta ocasión hay una extensión que se encarga de modificar nuestras extensiones instaladas para que "parezcan" compatibles con Firefox 3 beta, la mayoría de las extensiones funcionaran sin problema, aunque aun queda el caso de que alguna que otra no funcione.
La extensión en cuestión es "Nightly Tester Tool", simplemente hay que instalarla, cargar la ventana de extensiones de Firefox y hacer "click" en el botón que dice " Make all compatible", reiniciar Firefox y listo.
Etiquetas:
Linux
Suscribirse a:
Entradas (Atom)