¿Querés chatear en mi blog? Fijate abajo, en la columna derecha podés usar GTalk
(Si no te funciona con IE probá con Firefox)

lunes, 14 de enero de 2008

LINQ y otras yerbas de C# 3.0

En este post expongo con un ejemplo simple, la impresión de números pares del 1 al 20, algunas características nuevas de C# 3.0 como LINQ, Lamba expressions, Extensions methods, comparadas con algunas características que ya estaban incluidas en C# 2.0 como Anonymous Method en contraste con nuestro viejo y querido foreach. Es un ejemplo muy simplista, pero sirve para ilustrar las nuevas características incorporadas en la nueva versión de C#.

Código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQ_Lab_1
{
    class Program
    {
        static int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };

        static void Main(string[] args)
        {
            PrintHeadLine("For each sample - C# 1.0");
            PrintEvenNumbersForEach();

            PrintHeadLine("Anonymus Method - C# 2.0");
            PrintEvenNumbersAnonymusMethod();

            PrintHeadLine("Anonymus Method 2 - C# 2.0");
            PrintEvenNumbersAnonymousMethod2();

            PrintHeadLine("LINQ - C# 3.0");
            PrintEvenNumbersLinq();

            PrintHeadLine("Lambda Expressions - C# 3.0");
            PrintEvenNumbersLamba();

            PrintHeadLine("Extension Methods - C# 3.0");
            PrintEvenNumbersExtensionMethods();

            PrintHeadLine("Anonymous Type - C# 3.0");
            PrintEvenNumbersAnonymousType();

            Console.ReadLine();
        }

        static void PrintSeparator()
        {
            Console.WriteLine("---------------------------");
        }

        static void PrintHeadLine(string text)
        {
            PrintSeparator();
            Console.WriteLine(text);
            PrintSeparator();
        }

        /// <summary>
        /// Utilizando la clasica version con Foreach
        /// C# 1.0
        /// </summary>
        static void PrintEvenNumbersForEach()
        {
            /* Viejo y querido foreach
             * */
            foreach (int n in numbers)
                if (n % 2 == 0)
                    Console.WriteLine(n.ToString());
        }

        /// <summary>
        /// Utilizando delegados y metodos anonimos
        /// C# 2.0
        /// </summary>
        static void PrintEvenNumbersAnonymusMethod()
        {
            /* Aqui se esta utilizando un delegado que representa un metodo anonimo
             * con el codigo: "return n % 2 == 0"
             * */
            int[] evens = Array.FindAll(numbers, delegate(int n) { return n % 2 == 0; });
            foreach (int n in evens)
                Console.WriteLine(n.ToString());
        }

        /// <summary>
        /// Utilizando Anonymous Method 2
        /// C# 2.0
        /// </summary>
        static void PrintEvenNumbersAnonymousMethod2()
        {
            /* La version mas compacta: 1 sola linea

             * */
            Array.ForEach(numbers, delegate(int n) { if (n % 2 == 0) Console.WriteLine(n.ToString()); });
        }

        /// <summary>
        /// Utilizando LINQ
        /// C# 3.0
        /// </summary>
        static void PrintEvenNumbersLinq()
        {
            //Expresion LINQ al mejor estilo SQL
            var evens = from n in numbers
                        where n % 2 == 0
                        select n.ToString();

            foreach (string n in evens)
                Console.WriteLine(n);
        }

        /// <summary>
        /// Utilizando Lambda Expressions
        /// C# 3.0
        /// </summary>
        static void PrintEvenNumbersLamba()
        {
            /* Aqui se esta utilizando un expresion lambda
             * que se puede interpretar como "para todo n que cumpla con la regla n % 2 == 0"
             * podemos ver el codigo representa una expresion más natural:
             * "Buscar todos los n en numbers que cumplan con la condicion n % 2 == 0"
             * */

            var evens = Array.FindAll(numbers, n => n % 2 == 0);
            foreach (int n in evens)
                Console.WriteLine(n.ToString());

        }

        /// <summary>
        /// Utilizando Extension Methods
        /// C# 3.0
        /// </summary>
        static void PrintEvenNumbersExtensionMethods()
        {
            /* Aqui utilizamos Extension Methods y una expresion lambda para
             * el predicado
             * */

            var evens = numbers.Where(n => n % 2 == 0);
            foreach (int n in evens)
                Console.WriteLine(n.ToString());
        }

        /// <summary>
        /// Utilizando LINQ y Anonymous Types
        /// C# 3.0
        /// </summary>
        static void PrintEvenNumbersAnonymousType()
        {
            /* En la clausula "select" de la expresion LINQ creamos un tipo anonimo
             * conformado por el miebro "n" con el valor del entero y otro miembro
             * "name" que representa a n.ToString().
             * Luego utilizamos "n.name"
             * */
            var evens = from n in numbers
                        where n % 2 == 0
                        select new { n, name = n.ToString() };

            foreach (var n in evens)
                Console.WriteLine(n.name);
        }

    }
}

Resultado:

image

Performance:

Aquí podemos observar que en cuestiones de performance el método más veloz es el foreach, mientras que el que peor rendimiento posee es del de creación de un tipo anónimo.

image

 

GB.

viernes, 11 de enero de 2008

FILESTREAM uno de los nuevos tipos de datos en SQL Server 2008

Hace poco tiempo estuve involucrado en algunas iniciativas para sistemas de gestión de documentos (una solución que incluía MOSS 2007 + BizTalk Server 2006 + SQL Server 2005) y me di dejó rondando en la cabeza el poco soporte para bases de datos documentales que tenía SQL Server hasta ese entonces, dado que la única solución para almacenar documentos es el clásico tipo de datos binario (BLOB). Esto no es conveniente ya que es un tipo de datos muy genérico para almacenar objetos binarios y no tiene ningún soporte específico para gestionar tal columna como un documento.

Ahora SQL Server 2008 incorpora un nuevo tipo de datos denominado FILESTREAM (en realidad es un atributo que se coloca a un tipo de datos varbinary) y que permite que el contenido de esta columna se almacene directamente en el File System (utilizando NTFS) lo que mejora notablemente la performance y llevando cualquier restricción de tamaño a los límites del File System. Esta columna se comparta como cualquier BLOB, solo cambia el almacenamiento físico utilizado.

Esta característica sumada  a la posibilidad de crear columnas BLOB remotas (que pueden almacenarse en dispositivos específicos para este fin) mejorará las capacidades intrínsecas de SQL Server para dar soporte a mejores soluciones documentales.

Tabla comparativa de las opciones para manejar BLOBs

image

 

GB.

jueves, 3 de enero de 2008

Chau a Netscape

El viejo navegador web Netscape a dado sus últimos pasos con su versión número 9, luego de la cual no habrá más versiones ni actualizaciones de seguridad. El navegador que en un momento poseía el 80% del mercado, hoy no llega a recolectar ni el 1% de adeptos, por lo que no habrá muchos que lo extrañen, salvo por fines históricos, claro. A pesar de todo supongo que a sus creadores mal no les fue, dado que habían vendido, en la época de la burbuja de Internet, la empresa por 4.200 millones de dólares.

Fuente: http://www.libertaddigital.com/index.php?action=desanoti&cpn=1276320465

GB.

jueves, 6 de diciembre de 2007

Próximos eventos en Córdoba

Technight en Córdoba (Diciembre de 2007)

Día y hora: Martes 11 de Diciembre de 2007, de 18.00 a 21.00 hs.
Conoce Windows 2008
En pocos tiempo será liberado Windows 2008, el nuevo sistema operativo de servidor de Microsoft. En esta presentación veremos las nuevas características del mismo, como por ejemplo:

  • Virtualización
  • Cierre limpio de servicios
  • Windows Hardware Error Architecture
  • Entre muchos otros...
Duración: 90 minutos.
Orador:
Enrique Dutra - Microsoft MVP - Punto Net Soluciones
Mejores prácticas de acceso a datos en .NET
En esta disertación se verán soluciones a problemas comunes de acceso a bases de datos relacionados con el performance, concurrencia y seguridad. La modalidad de este evento será abierta, es decir que los asistentes podrán hacer preguntas y plantear inquietudes.
Se abordarán los siguientes temas:
  • Comparación entre Dataset, Datareader y LINQ
  • Conversiones de datos
  • Comparaciones entre sentencias SQL y procedimientos almacenados
  • Optimización de Queries
  • Cacheo de datos
  • SQL Injection
  • Transacciones
  • Bloqueos y Niveles de aislamiento

Duración: 90 minutos.
Orador:
Ing. Marcos Mellibosky - ArSoft.
Lugar: Universidad Tecnológica Nacional (UTN) - Aula Magna
Maestro M. López esq. Cruz Roja Argentina
Ciudad Universitaria
Cordoba, Argentina.
Para registrarse a este evento, haga click aqui.



Evento del Grupo de Usuarios de Mícrosoft en Córdoba
Día y hora: Jueves 13 de Diciembre de 2007, de 18.30 a 21.30 hs.
Presentación Web con Silverlight
Evento gratuito que cierra la Gira Nacional del MUG 2007. Organizado en conjunto con la Institución Cervantes. Silverlight es una nueva tecnología de presentación web creada por Microsoft para su ejecución en distintos navegadores y plataformas. Hace posible la creación de aplicaciones más completas, atractivas e interactivas, y se puede ejecutar en múltiples dispositivos y sistemas operativos de escritorio. Es, en escencia, una versión liviana del CLR, que permite utilizar lenguajes .Net en el lado del cliente. Además, como se verá en la presentación, se puede integrar fácilmente con Javascript y AJAX.
Lugar:
Institución Cervantes
Santa Rosa 1793,
Barrio Alberdi,
Córdoba Capital
Orador:
Eugenio Serrano - Microsoft MVP - Solid Quality Mentors
Para registrarse a este evento, haga click aqui.
(Por favor, ignore la pregunta sobre forma de pago. El evento es gratuito.)
Informes e Inscripción en Córdoba:
Institución Cervantes, Telefónicamente: (0351) 489-0008 interno 110 ó por mail a extension@cervantes.edu.ar indicando: Empresa, Apellido y Nombre, Dirección, Teléfono, Mail y DNI.
Los asistentes al evento recibirán un CD con software instalable. Solicitamos a los asistentes llevar, de serles posible, un alimento no perecedero. Lo reunido será entregado en las distintas campañas sociales en que participa la Institución Cervantes.


Eugenio Serrano
Solid Quality Mentors
Microsoft MVP (ASP/ASP.Net)
http://www.eugenioserrano.com.ar

 

GB.

lunes, 26 de noviembre de 2007

TechNight en Córdoba (Noviembre de 2007)

TechNight en Córdoba (Noviembre de 2007)
Día y hora: Lunes 26 de Noviembre de 2007, 18.00 hs.
ADO.Net Entity Framework

El nuevo ADO.Net Entity Framework permite manipular datos usando un modelo de objetos.
Aprenda sobre esta nueva tecnología de Microsoft que cambia la forma en que se piensa acerca de los datos. Algunos de los temas que veremos son:

  • Introducción a los ORM
  • Arquitectura de ADO.Net Entity Framework
  • Modelado con Entity Framework
  • Consulta de datos con Entity SQL
  • Consulta de datos con Linq To Entities
  • Entity Data Model Tools
  • Actualizacion de datos
  • Linq versus Entity Framework
  • Arquitectura de las nuevas aplicaciones

Duración: 180 minutos.
Oradores:
Eugenio Serrano - Microsoft MVP - Solid Quality Mentors
Ing. Marcos Mellibosky - ARSoft
Lugar: Universidad Tecnológica Nacional (UTN) - Aula Magna
Maestro M. López esq. Cruz Roja Argentina
Ciudad Universitaria
Cordoba, Argentina.
Para registrarse a este evento, haga click aqui.

GB.

miércoles, 31 de octubre de 2007

ClickHeat

clickheat  Hace un tiempo posteé una entrada sobre un sofisticado sistema de Eyetracking (ver...) que permitía medir qué lugares de las páginas tienen mayor visibilidad para un usuario. Esto no es para cualquiera porque es necesario un sistema especial en verifique dónde está el usuario fijando la vista. Pero lo que sí podemos utilizar son las aplicaciones de "Click Tracking" y realizar un mapa similar pero basado en el lugar y la cantidad de clicks.

En este link se pueden bajar uno gratis que utiliza javascript y PHP: Click Heat.

Y aquí hay un blog que explica cómo hacerlo utilzando javascript y Perl, y luego en Ruby: The Definitive Heat Map.

GB.

lunes, 8 de octubre de 2007

Evento en la UTN

Título: Migrando de Visual Basic 6 a .Net

Descripción: En esta conferencia hablaremos de los motivos por los cuales migrar a .Net. Describiremos las diferencias tecnológicas, y las mejoras de Visual Basic.net contra Visual Basic 6. De esta forma, lograr un mejor entendimiento de .Net y poder adoptarlo con facilidad.

Orador: Ing. Matías Iacono

            Microsoft MVP ASP/ASP.net
            Orador Regional Ineta Latam

            Motorola Argentina

Horario: 20:00 a 22:00 Hrs.

Fecha: 29/10/2007

Donde: Aula Magna

           UTN Regional Córdoba

           Edificio central, primer piso

GB