Ask to The Experts Abril 29, 2008
Posted by elmercarias in .Net.Tags: .Net
add a comment
Les comento que a partir del día Lunes 28 de Abril inicio el Evento Online de Lanzamiento de Visual Studio 2008, y una de las tantas actividades que se realizaron se llamo “Ask to the Experts”
De la cual fui partícipe, y debido a que una persona en el Chat comento si alguien podía postear en el Blog todo el Chat,
Lo guarde, y lo comparto con todos.
El nombre del Chat fue “Descubre las novedades de Visual Studio 2008 y el .net Framework en desarrollo Web (Silverlight 2.0, ASP.NET 3.5, ASP.NET AJAX, MVC, IIS 7.0)”
http://www.cariasyasociados.com/downloads/Chat-AskToTheExperts.doc
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
Patrones de Diseño Abril 26, 2008
Posted by elmercarias in Arquitectura de Software.Tags: Arquitectura de Software, patrones
add a comment
El martes anterior en el tema que compartió Jorge Barrientos, compañero de la Comunidad de Desarrolladores MSNETSV, tratamos un tema bastante importante y que hizo recordar cuando leí al respecto por primera vez.
En ese entonces, fue en el año 2005 cuando encontré sobre ese tema en la red, la verdad no entendí mucho a lo que se refería el tema, ya que todavía pensaba en el desarrollo tradicional (aunque se suponía que ya empezaba a realizar tareas de Arquitectura de Software) y todavía no digería todo completamente.
Esta introducción la hago porque este tipo de temas es donde hay que pensar de una forma no tan tradicional para poder comprender los conceptos y la utilidad de los Patrones de Diseño.
Entonces surge la pregunta de rigor, ¿Que es un Patrón de Diseño?
El nombre por si solo no nos dice mucho, ya que talvez pensaremos que es sobre Diseño Web, o será Diseño de Datos, o bien puede ser Diseño de Interfaz de Usuario. Y realmente no tiene nada que ver con ninguna de las cosas que comento, para no ser tan dificil el asunto empezaremos por decir que un Patron de Diseño no es mas que la experiencia de resolver problemas especificos de programación expresados en un formato estándar para poder ser implementado en cualquier lenguaje de programación.
La utilidad o su razón básica en la nos puede ayudar es para la reutilización (o reusabilidad) de código. Esto asu vez nos deja entrever que el Diseño de Patrones esta intimamente ligado a la Programación Orientada a Objetos (POO) ya que se vale de varios conceptos de la POO para definir las estrategias para la implementación del Patrón.
Ahora veamos para que nos sirven los Patrones de Diseño en el Desarrollo de Software.
Normalmente cuando decidimos realizar un nuevo sistema, comenzamos como el Ciclo de Vida del Desarrollo de Software nos invita, a la parte de Requerimientos, y casi todas las metodologías inician por esta etapa. Despues diseñamos la Base de Datos y a Programar. Es raro quien se tome el tiempo para definir piezas de software que serán reutilizadas en el sistema. Normalmente con la POO pensamos que lo tenemos todo, pero como no conocemos la aplicación de los patrones de Diseño entonces reinventamos la rueda.
Los patrones de diseño nos pueden ayudar a reutilizar muchas piezas de software, y no solamente para un Sistema en particular, sino que pueen ser reutilizados en varioas sistemas. Algunos patrones por su naturaleza serán aplicados solo para un sistema. El Patrón no es mas que una forma estandarizada de resolver un problema. Talvez muchos piensan que se perderá mucho tiempo(y realmente el tiempo de desarrollo se puede incrementar la primera vez que realizamos esta tarea) pero no es así, al final ganamos tiempo en el Mantenimiento del Sistema.
Se categorizan en 3 clases:
- Patrones de Creación: Aqui se agrupan los patrones que su propósito es la Creación de Clases y Objetos, asi como para que las utilizaremos una vez creadas. El ejemplo mas sencillo de este grupo es el de Singleton, que no es mas que la implementación de creación de una única instancia de un objeto, el cual mantiene su estado siempre. ¿Que aplicaciones practicas le encontramos a este patrón? Podríamos utilizarlo para mantener una Clase con la información básica de un Usuario conectado a nuestra aplicación, para que no tengamos que ir a la Base de Datos a recuperarla cada vez que la necesitamos.
- Patrones de Estructura: Aqui se agrupan los patrones que definen la estructura interna de una clase, por ejemplo el patrón Facade el cual muestra métodos o funciones fáciles de entender para realizar una acción, encapsulando el detalle de la complejidad de la tarea a realizar. Por ejemplo con un solo método podemos mostrar un mensaje al usuario, seteando una barra de Estado, mostrando un mensaje emergente, ver si es de error o no, etc. o la combinación de estas acciones, en una sola llamada, quitando así la complejidad de saber a que objetos asignarles el mensaje, como mostrar un mensaje emergente, y otras tareas que serían repetitivas en una aplicación.
- Patrones de Comportamiento: Aqui se agrupan los patrones que se enfocan en la comunicación entre clases y objetos. Un ejemplo es el patron Observer, el cual permite que una clase A pueda permitir a otras a registrarse para que cuando suceda un Evento en la clase A esta le notifique a la clase registrada. El patron Observer es asociado al paradigma Model-View-Controller, ya que en base a eventos que suceden en View se intercomunican con el Controller y Model.
Si quieren profundizar mas al respecto, se pueden conseguir el libro Design Patterns: Elements of Reusable Object-Oriented Software que es donde se inicio a hablar de Patrones de Diseño, por sus creadores GOF(The Gang of Four - La banda de los Cuatro), Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides.
Uno de los sitios que aglomera varios patrones importantes es http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
Tablas Cruzadas con DataWindow .Net Abril 10, 2008
Posted by elmercarias in .Net, DataWindow, PowerBuilder.Tags: .Net, DataWindow, PowerBuilder
add a comment
Continuando con el control DataWindow de Sybase para .Net
Les mostraré como hacer una Consulta con Tablas Cruzadas que muestre los Envíos de Productos por Pais y Año, utilizando
las estructuras de Datos de la base de datos NorthWind
- Orders
- Orders Details
- Products
Campos a utilizar en la consulta
[Orders].ShippedDate : de aqui sacaremos el año de envío
[Orders Details].Quantity : Cantidad de Produto Enviado
[Orders Details].UnitPrice : Precio Unitario del Producto Enviado
[Products].ProductName : Nombre del Producto Enviado
El primer paso será despues de tener creado un Espacio de Trabajo, crear un nuevo DataWindow y elegimos que sea tipo CrossTab.
Despues elegiremos el origen de Datos del CrossTab, para el caso elegimos SQL Select, que es la forma mas fácil de crear los querys.
En el siguiente paso elegimos las tablas que utilizaremos en el Query, esto de forma similar al QueryBuilder de .Net, pero ami manera de ver mas fácil de usar, para el caso del ejemplo, elegimos las tres tablas que utilizaremos
Posteriormente elegimos el campo ProductName de la Tabla Products y ShipCountry de la Tabla Orders, en la parte inferior elegimos la viñeta Compute, para crear un par de campos calculados, como lo son Ventas([Orders Details].Quantity * [Orders Details].UnitPrice) y Año(year([Orders].ShippedDate)).
Posteriormente elegimos el Tab Where para Filtrar nuestro Set de Datos, y lo realizamos para que excluya las Ordenes que tienen NULL en [Orders].ShippedDate.
En el siguiente paso y que lo haremos porque la versión actual el Bug de que no agrega los Corchetes a tablas que tienen espacios en Blanco en su nombre, como el caso de la tabla [Order Details]. Para eso elegimos en el Menu Design\Convert to Sintax
En el siguiente paso debemos agregarle los corchetes( [ ] ) a la tabla [Order Details] para que funcione correctamente.
Posteriormente debemos de hacer el paso mas importante que es la elección de los campos que utilizaremos como columnas, filas y cuales totalizaremos, para el caso elegiremos la columna Año en Columns, ShipCountry y ProductName en Rows y por ultimo arrastramos(hacemos Drag&Drop) de ventas hacia Values.
Al final podremos ver el resultado que devolverá esta Consulta, donde podremos cambiar el Formato para mejorar la salida de nuestra Consulta(recuerda que este DataWindow lo podrías utilizar desde una Aplicación Windows o Web desde .Net). A continuación mostramos el ejemplo.
Con esto finalizamos la creación del objeto DataWindow, lo unico que restaría es hacer referencia a el desde .Net , lo cual cubriremos en otro posteo.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
DataWindow .Net Abril 9, 2008
Posted by elmercarias in .Net, DataWindow, PowerBuilder.add a comment
Recientemente di una charla de DataWindow .Net y tuve que bajarme la nueva versión, yo conocía la versión 1.0 y actualmente existe la versión 2.5
Para los amantes de Power Builder, esta puede ser una alternativa para utilizar este control en aplicaciones .Net ya sean estas aplicaciones Windows o Web.
Una de las cosas importantes es que se puede llenar un DataWindow desde distintos origenes de datos como un Web Service, un DataSet y por supuesto manteniendo la forma que Power Builder maneja el DataWindow con ODBC, OleDB, Clientes Nativos de SQL Server, Sybase, Oracle, Informix, Direct Connect y algo nuevo que le incluyeron es ADO Net Provider.
Una de las ventajas del DataWindow es que el mismo interfaz de diseño para Grids, Entradas de Datos tipo Forma, Treeviews de multiples niveles, Reportes Tabulares, Gráficos, Reportes con Tablas Cruzadas(CrossTab), Reportes Compuestos(Composite), Reportes de Etiquetas(por ejemplo, la impresión de viñetas de códigos de barra), y muchas opciones más.
La potencia que PowerBuilder tiene se basa en el uso del DataWindow que es el control por excelencia en una aplicación PowerBuilder, con esta versión en .Net tenemos la capacidad de utilizar este control y aprovechar la potencia que ofrece.
Si realizamos una analogía el diseñador de DataWindows es similar al diseño de Formularios, Reportes y Grids que tiene Access(osea con uso de bandas de detalle, grupos, etc) y ademas combina lo que el Wizard que el SQLDataAdapter tiene para generar un DataSet, donde uno graficamente arma el Query de Select y el internamente genera los querys de Update, Delete e Insert, pudiendole indicar que lo haga de forma optimistica o pesimistica.
El DataWindow recoge las facilidades que Access tiene para el diseño de Formularios/Reportes y la facilidad de Generación de Querys de forma fácil. Ademas incluye facilidades para agregar validaciones de entrada, formateo de datos(fecha, strings, numeros con decimales, currency, etc), así como mascaras para entrada de datos.
Pudes bajarte un Trial para probar el producto en
http://www.sybase.com/products/development/datawindownet
Suerte y espero les sea útil esta información.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
LINQ una buena alternativa Abril 2, 2008
Posted by elmercarias in .Net.Tags: .Net, linq
2 comments
En las ultimas semanas he estado conociendo mas sobre las novedades de Visual Studio 2008, y una de las que mas me llama la atención es la tecnología LINQ, ya que ofrece mucha versatilidad para acceder los datos.
Pienso que es mas fácil de usar ya que no es necesario conocer mucho sobre SQL para realizar consultas complejas.
Como introducción les comento que LINQ ha sido creado para estandarizar el acceso a los datos, estos sean XML, una Base de Datos, ya sea Microsoft SQL Server, Oracle, Sybase etc.; así como tambien el manejo de Objetos en memoria. Esto es lo que mas llama la atención porque permitirá acostumbrarse a una sola sintaxis para acceder a los datos.
La manera mas fácil de tener acceso a objetos creados con LINQ, hay que adicionar a nuestro proyecto un nuevo Item llamado “LINQ to SQL”
Y en esta pantalla arrastrar los objetos que deseemos, en la imagen de ejemplo se utiliza la base de Datos Northwind,
Despues de seguir los pasos de previa configuración
Ejemplo #1:
Despues en cualquier ubicación de nuestra aplicación podemos hacer el siguiente ejemplo sencillo:
Dim query = from c in Customers
where c.Country = “Italy”
select c.CompanyName
El resultado de lo anterior es una Colección de Strings(que queda guardado en “query”), conteniendo los Nombres de Clientes(Customers) del país de Italia.
El query que genera y ejecuta es el siguiente:
Select CompanyName
From Customers
Where Country = “Italy”
Se preguntarán ¿Porque esta primero el FROM y despues el SELECT al escribirlo con LINQ?
Eso responde a que como .Net ofrece Intellisense en el SELECT y en el FROM es necesario decirle sobre que objeto se hará SELECT, y así el IDE nos ofrece el Intellisense.
El resultado obtenido en la variable “query” puede ser utilizado como origen de datos de un DropDownList, ListBox, etc.
Si notan en este primer ejemplo es completamente sencillo y no se ve la potencia de LINQ.
Ejemplo #2
En este ejemplo devolveremos los Clientes que tienen mas de 20 Ordenes de Compra(Orders) en el sistema
Dim query = from c in Customers
where c.Orders.Count > 20
select c.CompanyName
Esta ejecución genera el Query :
Select c0.CompanyName
From Customers AS c0
Where (Select Count(*)
From Orders AS c1
Where c1.CustomerID = c0.CustomerID
) > 20
En este ejemplo ya se empieza a ver que lo versatil de LINQ, ya que en sintaxis LINQ solamente se hace referencia a la relación con Orders y se utiliza la propiedad Count para comparar que sea mayor a 20,
si lo hubieramos hecho en SQL hubieramos que tenido que hacer el SubQuery para ese calculo.
Ejemplo #3
En este ejemplo a diferencia del anterior devolveremos las Ordenes de los Clientes que tienen mas de 20 Ordenes de Compra en el sistema
Dim query = from c in Customers
where c.Orders.Count > 20
select c.CompanyName, c.Orders
Esta ejecución genera los siguientes querys:
El primero es para devolver el listado principal de Compañias
SELECT [t0].[CompanyName], [t0].[CustomerID]
FROM [dbo].[Customers] AS [t0]
WHERE ((
SELECT COUNT(*)
FROM [dbo].[Orders] AS [t1]
WHERE [t1].[CustomerID] = [t0].[CustomerID]
)) > 20
El segundo es ejecutado para cada Customer del Query, en este caso son 3; esto es ejecutado en el RowDataBound del GridView donde se implementa el llenado de las Ordenes
SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate],
[t0].[RequiredDate], [t0].[ShippedDate], [t0].[ShipVia], [t0].[Freight],
[t0].[ShipName], [t0].[ShipAddress], [t0].[ShipCity], [t0].[ShipRegion],
[t0].[ShipPostalCode], [t0].[ShipCountry]
FROM [dbo].[Orders] AS [t0]
WHERE [t0].[CustomerID] = @CustomerID
Bueno esto es un poco de lo que se puede hacer con LINQ, en este caso LINQ con SQL, en proxima entrega hablare de LINQ sobre XML y LINQ sobre Objetos.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación.”
Iniciando con Team Foundation Server Marzo 14, 2008
Posted by elmercarias in .Net.add a comment
La pregunta obligatoria que tendré que responder en esta ocasión es ¿Que es el Team Foundation Server?
Para entrar en materia, les comento que el Team Foundation Server es la herramienta que Microsoft ofrece desde la versión del Visual Studio 2005, en lo que se conoce como Visual Studio Team System(que no es mas que la combinación de los productos de Desarrollo para la colaboración del equipo de trabajo en el Desarrollo de un Proyecto de Software).
Pues en esta ocasión les hablare un poco sobre el Team Foundation Server para la versión Visual Studio 2008, ya que he estado en pruebas del mismo en la presente semana y quisiera compartirles un poco al respecto.
Una de las primeras consideraciones que se tienen que tomar en cuenta antes de instalar el Team Foundation Server es contar con un Windows Server 2003 con Service Pack 1, SQL Server 2005 Standard Edition con Service Pack 1, instalados los servicios de Reporting Services y Analisys Services.
El instalador verifica previo a su instalación que el equipo cumpla con los requisitos.
Yo he lo personal he instalado la versión de Prueba del Visual Studio Team System 2008 Team Foundation Server que la baje del sitio de Microsoft
Tambien baje para posteriormente instalar el software para los Participantes del equipo de Desarrollo “Visual Studio Team System 2008 Team Suite “
Para los que no quieran aprender a instalar, entonces se pueden bajar una maquina virtual que ya contiene la instalación de los dos productos, la cual la encuentran en:
La unica particularidad de la maquina virtual es que se necesita minimo 1.5 GB de RAM(Este fue el motivo por el cual mejor instale los productos, ya que solo cuento con 1GB en RAM)
El mas importante de todos los productos para la Colaboración es el Team Explorer, el cual es el que permitirá a los integrantes del equipo interactuar en el proyecto. Aunque tambien se cuenta con la posibilidad de hacerlo atravez de Microsoft Project, Microsoft Excel o el Portal del Proyecto(el cual esta en Windows Sharepoint 3.0, que es instalado y configurado por el Team Foundation Server).
Lo primero a tomar en cuenta ya que tengamos instalado el server es crear un Projecto de Equipo (Team Project), que se hace desde el Team Explorer y el encargado es el Project Manager para esta tarea.
Bueno hasta el momento es todo, hasta la proxima entrega seguire ampliando sobre el tema.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
Comunidad de Desarrolladores en Santa Ana, El Salvador Marzo 11, 2008
Posted by elmercarias in .Net, Comunidades.add a comment
Les comento que la semana pasada fue el Lanzamiento de Visual Studio 2008, estuvo interesante ya que platique con varias personas que tenía tiempo de no ver, y ademas surgió la posibilidad de abrir abrir una comunidad de Desarrolladores en la Universidad UNICO de Santa Ana, esperemos que con esto contribuyamos al crecimiento académico de estas personas.
Junto con Roque Mocán estamos coordinando esto y se espera que el proyecto se de sin problemas, por cierto ya se cuenta con apoyo de directivos de la Universidad, y coordinaremos la apertura de charlas lo mas pronto posible, para así permitirles a los estudiantes que lo deseen una oportunidad de compartir información de .Net.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
Seleccion de Clases en Solution Explorer Febrero 25, 2008
Posted by elmercarias in .Net.add a comment
Tengo aproximadamente 7 años de conocer .Net y como 5 años de estarlo utilizandolo constantemwente y nunca me habia dado cuenta de que el Solution Explorer se puede utilizar el “type-ahead selection” que no es mas que posicionarse en el inicio de un nodo del TreeView y empezar a digitar las letras de la clase que se busca y automaticamente se posiciona en la misma.
Probe la funcionalidad y desde la Versión 2003 del IDE se puede realizar esta particularidad.
Ejemplo:
Si tenemos 10 clases que empiedan con db mas el nombre de la clase, posicionarse en el nodo principal que los contenga, estando este expándido digitar “db” mas el nombre de la clase a buscar.
Espero este tip les ayude.
Atte. Elmer Carías
”El fracaso tiene mil excusas, el éxito no requiere explicación”
Codigo fuente de .Net Framework puede ser leido Febrero 15, 2008
Posted by elmercarias in .Net.Tags: .Net
add a comment
El año pasado leí que Microsoft liberaría el codigo fuente de las clases del .Net Framework para poder realizar debug sobre las mismas desde Visual Studio 2008, este año he leido que no se liberará como muchos pensaron de forma abierta sino que solamente en forma de lectura, lo cual incluye los comentarios de los desarrolladores sobre la implementación de lo que veamos.
Esto lo veo muy bueno porque nos permitirá conocer de la fuente directa el como funcionan exactamente las cosas internamente en las clases que utilizamos, además de permitirnos aprender las buenas practicas que el equipo de desarrollo de las clases ha implementado.
Para habilitar esto es necesario configurar un par de cosas en el Visual Studio 2008:
1) Instalar Visual Studio 2008 QFE
2) En Tools\Options y en la parte de Debugging\General hay que realizar lo siguiente:
- Deshabilitar “Enable Just My Code”
- Habilitar “Enable Source Server Support”
3) En Debugging\Symbols asignar el File location del .PDB a http://referencesource.microsoft.com/symbols , asignar una ruta donde guardara en Cache la información, y habilitar “Search the above locations only when symbols are loaded manually”(Nota: esta ultima opción deberias quitarsela despues de cargar la primera vez una aplicación con muchas referencias a las clases del Framework, porque sino cada vez se conectará al sitio para bajarselas, sin esta opcion se puede hacer manualmente con “Load Symbols” en el menu contextual de la Ventana Modules.
Con esto es suficiente para que puedas ver el codigo , espero que este tip te sirva.
Atte. Elmer Carías
“El fracaso tiene mil excusas, el éxito no requiere explicación”
Un nuevo Blog para ofrecer mejores servicios Febrero 1, 2008
Posted by elmercarias in Uncategorized.add a comment
Bienvenido a mi nuevo Blog ya que despues de 4 meses me he decidido cambiar de Blog para ofrecer mas servicios y que sean mas faciles de usar por todos.
A partir del 1 de Febrero de 2008 iniciare el uso de este sitio y dejare el antiguo solo como historia http://elmercarias.spaces.live.com/
Espero les guste mas este ya que es mas fácil de usar y nos permitirá compartir mas fácilmente.










