DotNetMania@GT

Blog Personal de Carlos Lone
Msdn Tour "Plataforma para la nueva generación de Software"


El jueves 25 tuve la oportunidad de brindar una conferencia con mi compañero Sergio Rodríguez en el MSDN Tour "Plataforma para la nueva generación de Software". La verdad fue una sesión muy buena y que llamo mucho la atención de los asistentes, quienes mostraron bastante interés en las nuevas tecnologías que Microsoft pone a nuestra disposición, a continuación detallo algunos de los temas presentados:

 

Les quiero compartir a todos ustedes la presentación que fue utilizada y la demo de Mesh que quedo pendiente, espero les sea de mucha utilidad!

Presentación:

Bajar Presentación Utilizada

Demos:

Una de las demos que quedo pendiente fue la de Mesh, sin embargo si quieren ver la demo en acción les comparto un screencast y el script para que ustedes mismo hagan la demo:

Screencast

Demo Script

Recursos:

http://www.mesh.com
http://www.popfly.com
http://www.codeplex.com/litwareHR
Windows Internet Explorer 8- Home page

Saludos

Carlos A. Lone

Posted: Sep 29 2008, 12:55 AM by carlone | with no comments
Filed under: ,
Test Driven Development (TDD) al Maximo

Me gustaría poder llegar a este nivel de desarrollo !!!


Extreme Test-Driven Development with UNA (Java) from N-BRAIN, Inc. on Vimeo.

Saludos

Carlos A. Lone

Posted: Sep 10 2008, 08:03 PM by carlone | with no comments
Filed under:
Configurar un repositorio con Subversion y accesarlo con Tortoise SVN

 Subversion Logo

En muchas charlas que he brindado siempre me ha gustado recalcar el aspecto de los sistemas de control de versione (SCS), no se por que existen muchos programadores que les gusta tener sus fuentes en la linea de fuego, en donde si se hace un cambio que causa algun tipo de catastrofe en el sistema no existe forma fácil de revertir a una versión anterior. Un sistema de control de versiones es primordial en cualquier equipo de desarrollo de sistemas, afortunadamente existen opciones para no tener que gastar miles de $'s en software para esto. Una excelente herramienta, muy querida por los amigos de la comunidad open source, es Subversion (SVN), el cual es open source y gratuito, este software es utilizado en miles de proyectos alrededor del mundo, es muy estable, confiable y seguro. Adicionalmente existen herramientas como Tortoise SVN, el cual es un plug-in que habilita opciones para trabajar con SVN desde el explorador de windows.

Habiendo dicho esto, quiero compartirles un articulo introductorio que explica como pueden configurar un repositorio con Subversion y accesarlo con Tortoise SVN, escrito por Rick Strahl en la revista CoDe....

http://www.code-magazine.com/article.aspx?quickid=0807081&page=1

 Aprovechenlo...

Saludos,

Carlos A. Lone

Posted: Sep 10 2008, 10:05 AM by carlone | with no comments
Filed under:
Developers are in Pain

 

Saludos!

Carlos A. Lone

Posted: Sep 09 2008, 11:38 PM by carlone | with 1 comment(s)
Filed under:
LINQ IN ACTION a must Have!

 

 Linq in Action

I have finished reading Linq in Action Book, this was a very pleasant experience. I would like to recommend this book to all the folks looking for very deep yet understandable information about LINQ.  I think that Fabrice, Steve and Jim did a great work on this book, is very refreshing when you read a book written by people who really understand and have a good knowledge about the topic. Linq in Action is definitely the official learning guide to learn LINQ, it has history, the pros and cons, the why , the when and how of LINQ.

Get it at Manning Publisher!

I have started the book review on my blog (In spanish), I will be posting my review chapter by chapter

Carlos A. Lone

 

 

 

Posted: Aug 28 2008, 01:32 PM by carlone | with no comments
Filed under:
Aprovechen Entrenamiento gratuito de ASP.NET 3.5 en APPDev

AppDev

El sitio oficial de ASP.NET hizo publico el anuncio de entrenamiento gratuito de ASP.NET 3.5 proveido por la empresa AppDev, una empresa lider en el trainning de tecnología de .NET. En esta oportunidad estan ofreciendo un acumulado de 4 horas gratuitas de entrenamiento en videos, ademas incluye material, laboratorios y otros. Aprovechen esta oportunidad de aprender mas sobre la nueva versión 3.5 de ASP.NET.

Detalles del Curso

Free Training for Microsoft® ASP.NET 3.5
 


 
Ken Getz is a nationally renowned speaker and best-selling author who specializes in programming with Visual C# and Visual Basic. He is the author and presenter of some of AppDev's most popular courses, and has been showing developers how to build powerful, robust applications for over 10 years.

Don Kiely is a nationally recognized author, instructor and consultant who travels the country sharing his expertise in ASP.NET, SQL Server and security. He is a features speaker at industry conferences and specializes in security as it relates to databases and application development.


 

AppDev is an award-winning provider of learning solutions for developers, IT pros and computer users. Recent honors include:

 

- 2003-2008 Visual Studio Magazine
 
Readers Choice Award Winner

- 2008 Visual Studio Magazine  
  Editors Choice Award Winner

- 2007 Windows IT Pro Editors
  Choice Award  Winner

- 2007 asp.netPRO Magazine
  Readers Choice Award Winner
 


 

"The depth and breadth of AppDev courses provide a great level of training which I have found lacking in other training programs. The customer support at AppDev is fantastic...I have been using AppDev for several years and I highly recommend this training."
-Paul Mooney, Secure IT Solutions, Dublin, Ireland

 

“I love the flexibility with training that AppDev offers. I typically don’t have time to leave the office for days at a time so AppDev allows me to get up to speed on new technologies on my own time. I also have the option of viewing the entire training or skipping to just the topics I need to learn.”
- Dennis Podgorski, IT Manager
 

   
Download 4 hours of content from one of our new courses now!

Description: Download the first four modules from your choice of our new
16-module ASP.NET 3.5 courses. Each download includes approximately
four hours of step-by-step instruction by experts Ken Getz and Don Kiely, plus hands-on lab exercises, printable courseware, sample code and pre/post exams. Topics covered in this free download include:
4 Introduction to ASP.NET 4 List Controls
4 ASP.NET Controls 4 Calendar Control
4 Data Binding 4 AdRotator / XML Controls
4 Introduction to Controls 4 Retrieve Data
4 Hyperlink Buttons 4 DataSet and Providers
 
Audience: Developers who are familiar with the Visual Basic or Visual C# language.
 

Aprovechenlo!

Saludos,

Carlos A. Lone

 

Posted: Aug 26 2008, 10:57 PM by carlone | with 1 comment(s)
Filed under: , ,
Mi charla sobre ASP.NET MVC

ASP.NET MVC 

El día de ayer tuve la oportunidad de presentar el ASP.NET MVC a la Comunidad de desarrolladores de .Net de Guatemala. Realmente estuvo muy buena, sobre todo por la interacción entre los participantes, quienes aclararon bastante sus dudas sobre este nuevo framework.

Que necesito para utilizar ASP.NET MVC?

Les comparto la presentación y uno de los proyectos utilizados durante la misma.

Presentacion

Proyecto Ejemplo (route tester)

Saludos,

Carlos A. Lone

DotNetSlackers Ajax Data Controls

DotNetSlackers 

Estimados Amig@s:

 Recuerdo hace un buen tiempo haberle dado una vista a estos controles, se trata de controles para manejo de datos "AJAX Enabled", los jovenes de DotNetSlackers se dedicaron a la ardua tarea de encapsular funcionalidad que comunmente necesitamos en nuestro manejo de datos en controles que tradicionalmente utilizamos, como el famoso Gridview, el cual muchas veces a nuestras necesidades se puede quedar corto.

Bien, sucede que este proyecto ha avanzado mucho y desde hace un buen tiempo fue cargado a nuestro estimado CodePlex, aca podran bajar el codigo fuente y revisar la forma en que fue programado,así como también tienen la oportunidad de poder aportar mejoras o bug fixes.

 Adicionalmente en DotNetSlackers existe un sitio de Ejemplo, donde existe una diversidad de ejemplos sobre como utilizar los diferentes controles de esta librería.

Este recurso es gratuito y sobre todo muy funcional. Personalmente se los recomiendo ... espero en un futuro no muy lejano comenzar una serie de screencasts para demostrar el uso de este tipo de librerías.

Ajax Data Controls

Saludos,

Carlos A. Lone

LINQ in Action Chapter 1 Book Review (Que es LINQ?)

linq in Action

Estimados Compañer@s:

Recientemente hemos logrado tener el apoyo en la comunidad de Manning, a cambio algunos ofrecimos colaborar con Book Reviews de los libros de .net.

He decidido ir haciendo el review del libro "LINQ in Action" por capítulos e ir trasladándoles a ustedes el conocimiento adquirido!, así que es suficiente y comenzamos con el primer capítulo "Introducción a Linq"

Básicamente en este capítulo nos encontraremos con la definición de LINQ(Language Integrated Query), sus orígenes, su visión y el por que fue integrado al .net Framework. Comenzaré este post explicando un poco el por que de LINQ.

Como programadores sabemos que el software es algo simple, ya que lo podríamos reducir a dos cosas: Código y datos. Sin embargo, escribir software no es tan simple y una de las mayores actividades que envuelve el escribir código es trabajar con datos.

Normalmente como desarrolladores tenemos la necesidad de tener que conocer, y no solo conocer sino realmente ser buenos, en diferentes lenguajes y tecnologías cuando desarrollamos una aplicación, tal es el caso que no solo necesitamos utilizar un lenguaje de programación, sino también conocer de SQL y algunas veces API's para trabajar con documentos en XML.

Que es LINQ?

En el esquema actual supongamos que tenemos que escribir una aplicación, la posibilidad que tengamos que hacer persistir objetos hacia la base de datos es muy alta, así como enviar consultas a la base de datos y cargar esos resultados en objetos. Esta es una tarea que normalmente consume bastante tiempo al desarrollador de aplicaciones y el problema principal es que existe una brecha entre los lenguajes de programación y las bases de datos.

Los motivos principales originales detrás de LINQ fueron administrar las dificultades conceptuales y técnicas al momento de trabajar con bases de datos y lenguajes de programación de .net. Pero, realmente la intención de Microsoft fue proveer una solución para el problema del "mapeo relacional de objetos" (ORM en ingles), así como simplificar la interacción entre objetos y fuentes de datos. LINQ evoluciono hacia un conjunto de herramientas integradas para consultas. Estas herramientas pueden ser utilizadas para acceder a información almacenada en objetos en memoria (LINQ to Objects), bases de datos (LINQ to SQL) , documentos XML (LINQ to XML), un sistema de archivos o cualquier otra fuente. Veamos la siguiente gráfica:

Arquitectura Linq

Como vemos en la gráficas anterior, LINQ es una tecnología que nos puede ayudar mucho a resolver los problemas que se presentan para hacer consultas hacia fuentes de datos, noten que LINQ es extensible y de hecho hoy en día hay muchas implementaciones de linq hacia otras fuentes de datos o servicios. Un factor clave de LINQ es que fue diseñado para ser utilizado contra cualquier tipo de objeto o fuente de datos y para proveer un modelo de programación consistente.

Otra característica importante de LINQ es que al utilizarlo se trabaja en un mundo fuertemente tipado (Strongly Typed), lo que permite tener verificaciones en tiempo de compilación para las consultas, así como la asistencia del Intellisense de Visual Studio.

Por que necesitamos LINQ?

Cualquiera que ya halla trabajado en .net podría argumentar lo siguiente: si ya tengo un modelo de acceso a datos con ADO.NET y a través del mismo puedo hacer mis consultas y actualizaciones de datos por que necesito LINQ?, para dar respuesta a esto enumeremos a continuación algunos de los problemas mas comunes con este escenario:

  • Generalmente los Queries están expresados como cadenas de datos (strings), lo que significa que estos sobrepasan cualquier tipo de chequeo en tiempo de compilación. Que pasaría si el nombre de una columna fue escrito erróneamente?, que pasaría si el nombre de una columna es renombrado?
  • Generalmente no nos preocupamos por utilizar Ansi SQL al hacer nuestras consultas, lo cual no nos garantiza que al tener que cambiar de base de datos nuestra consulta no tendrá problemas.
  • Cuando se habla de Object Relational Mappers (ORM's) generalmente se hace referencia al termino "impedance mismatch", que se resume a la siguiente expression Datos != Objetos y mas especificamente Datos Relacionales != Objetos. Ambos paradigmas son totalmente diferentes.
  • Existen diferentes ORM's en el mercado, ya sea open source o comprados, pero el problema principal es que utilizan métodos diferentes para solucionar el "impedance mismatch" o bien requieren de hacer mapeos por archivos XML entre las entidades de base de datos y objetos POCO (Plain Old Clr Object), tal es el caso de Nhibernate.

Aquí es donde LINQ entra al rescate, en primer lugar con LINQ trabajamos en un ambiente fuertemente tipado, lo cual nos garantiza que alguno cambio en la fuente de datos, inmediatamente tendremos los warnings del compilador. Los programadores no se tendrán que preocupar con las sentencias SQL que se deben enviar a la base de datos, ya que este trabajo de traducción lo maneja automáticamente LINQ. Por ultimo utilizamos un esquema de programación consistente, lo que significa que no importa a que fuente de datos vamos a realizar la consulta, la sintaxis siempre es la misma.

HELLO WORL LINQ

Bueno, para terminar esta primer capítulo veamos un poco de código. Al final a muchos nos aburre la teoría y preferimos las cosas prácticas. Ok, a continuación realizaremos nuestra primer consulta con LINQ, se trata de nuestro viejo amigo "Hello World".

Que necesitan tener instalado para usar LINQ? pueden utilizar VS2008, o algunas de las versiones express como Visual Web Developer Express 2008 y por su puesto tener instalado el .net framework 3.5.

Veamos el siguiente código que nos demuestra el uso de Linq to objects, en el cual crearemos una lista de strings y obtendremos las palabras con mas de 4 letras:

   1: private static void EjemploConLinq()
   2:         {
   3:             string[] palabras = {"Guatemala", "Pais", "Eterna", "Primavera", "Hermosa","El"};
   4:  
   5:             var consulta = from p in palabras
   6:                            where p.Length >= 4
   7:                            select p;
   8:  
   9:             foreach (var palabra in consulta)
  10:             {
  11:                 Console.WriteLine(palabra);
  12:             }
  13:         }

VB.NET

   1: Private Sub EjemploConLinq()
   2:         Dim palabras() As String = {"Guatemala", "Pais", "Eterna", "Primavera", "Hermosa", "El"}
   3:  
   4:         Dim consulta = From p In palabras _
   5:                        Where p.Length >= 4 _
   6:                        Select p
   7:  
   8:         For Each p In consulta
   9:             Console.WriteLine(p)
  10:         Next
  11:     End Sub

Si se dan cuenta hay algunos aspectos nuevos que estamos utilizados y que realmente no todo tiene que ver con LINQ, por ejemplo la palabra "var" o "Dim" sin tipo (vb.net) sirve para poder definir variables sin tener que especificar el tipo de dato de la misma, este es un feature de C#3 y Vb 9 llamado Type Inference. Luego viene la consulta, si se dan cuenta es muy parecida a una sentencia de SQL. Por el momento no se preocupen por la sintaxis, más adelante en otro post veremos a detalle la misma, lo importante es observar lo simple y consistente que es el modelo de programación. Pero esperen, como se miraría este código sin linq?, veamoslo

   1: private static void EjemploSinLinq()
   2:         {
   3:             string[] palabras = { "Guatemala", "Pais", "Eterna", "Primavera", "Hermosa", "El" };
   4:  
   5:             foreach (string p in palabras)
   6:             {
   7:                 if (p.Length>=4)
   8:                     Console.WriteLine(p);
   9:             }
  10:         }

VB.NET

   1: Private Sub EjemploSinLinq()
   2:         Dim palabras() As String = {"Guatemala", "Pais", "Eterna", "Primavera", "Hermosa", "El"}
   3:  
   4:         For Each p As String In palabras
   5:             If p.Length >= 4 Then _
   6:                 Console.WriteLine(p)
   7:         Next
   8:     End Sub

Esperen un momento.... Al parecer el EjemploSinLinq contiene menos líneas de código y se ve más fácil, entonces?, bueno no se desanimen, para poder ver el poder de linq ahora hagamos el siguiente ejemplo: Listas los valores de la lista del ejemplo anterior agrupado por largo de la cadena y ordenado descendentemente y las palabras ascendentemente:

   1: private static void EjemploLinqConGrupos()
   2:         {
   3:             string[] palabras = { "Guatemala", "Pais", "Eterna", "Primavera", "Hermosa", "El" };
   4:  
   5:             var consulta = from p in palabras
   6:                            orderby p ascending 
   7:                            group p by p.Length into GrupoPorLongitud
   8:                            orderby GrupoPorLongitud.Key descending 
   9:                            select new {Length= GrupoPorLongitud.Key, Palabra=GrupoPorLongitud};
  10:             
  11:             foreach (var grupo in consulta)
  12:             {
  13:                 Console.WriteLine("Palabra con logitud {0}",grupo.Length);
  14:                 foreach (var palabra in grupo.Palabra)
  15:                 {
  16:                     Console.WriteLine("  "+palabra);    
  17:                 }
  18:                 
  19:             }
  20:         }

VB.NET

   1: Private Sub EjemploLinqConGrupos()
   2:     Dim palabras() As String = {"Guatemala", "Pais", "Eterna", "Primavera", "Hermosa", "El"}
   3:  
   4:     Dim consulta = From p In palabras _
   5:                    Order By p Ascending _
   6:                    Group By p.Length Into GrupoPorLongitud = Group _
   7:                    Order By Length Descending
   8:  
   9:     For Each p In consulta
  10:         Console.WriteLine("Palabra con logitud {0}", p.Length)
  11:         For Each palabra In p.GrupoPorLongitud
  12:             Console.WriteLine("  " + palabra)
  13:         Next
  14:     Next
  15: End Sub

Como ven con LINQ una tarea muy sencilla, les dejo de tarea realizar esta operación sin el uso de LINQ (en el área de comentarios pueden postear su solución). Verán que esta en realidad se convierte en una tarea más complicada.

Ahora que hemos visto nuestro primer ejemplo es hora de ver el poder de LINQ para trabajar con XML, supongamos que tenemos un que armar un documento XML con información de clientes para esto definiremos una clase Cliente:

   1: class Cliente
   2:     {
   3:         public int idCliente { get; set; }
   4:         public string NombreCliente { get; set; }
   5:         public string Pais { get; set; }
   6:  
   7:         public Cliente(int id, string nombre, string pais)
   8:         {
   9:             idCliente = id;
  10:             NombreCliente = nombre;
  11:             Pais = pais;
  12:         }
  13:     }

VB.NET

   1: Public Class Cliente
   2:  
   3:     Private _idCliente As Integer
   4:     Public Property idCliente() As Integer
   5:         Get
   6:             Return _idCliente
   7:         End Get
   8:         Set(ByVal value As Integer)
   9:             _idCliente = value
  10:         End Set
  11:     End Property
  12:  
  13:  
  14:     Private _nombreCliente As String
  15:     Public Property nombreCliente() As String
  16:         Get
  17:             Return _nombreCliente
  18:         End Get
  19:         Set(ByVal value As String)
  20:             _nombreCliente = value
  21:         End Set
  22:     End Property
  23:  
  24:  
  25:     Private _pais As String
  26:     Public Property Pais() As String
  27:         Get
  28:             Return _pais
  29:         End Get
  30:         Set(ByVal value As String)
  31:             _pais = value
  32:         End Set
  33:     End Property
  34:  
  35:     Public Sub New(ByVal id As Integer, ByVal nombre As String, ByVal paisCliente As String)
  36:         _idCliente = id
  37:         _nombreCliente = nombre
  38:         _pais = paisCliente
  39:     End Sub
  40:  
  41:  
  42: End Class

Ahora supongamos que vamos a tener una colección de objetos tipo cliente y queremos obtener los clientes cuyo país sea igual a Guatemala y lo queremos mostrar en un documento XML con el siguiente formato:

   1: <clientes>
   2:     <cliente id="1" nombre="Carlos Lone">
   3:         <pais>Guatemala</pais>
   4:     </cliente>
   5:     <cliente id="2" nombre="Juan Perez">