Que hay de nuevo en VS2010? por Daniel Laco

4. marzo 2010

Ya se viene la liberación de la versión final de Visual Studio 2010 y .NET 4.0 y uno siempre quiere tener una vista rápida de los cambios, agregados, etc.

En http://msdn.microsoft.com/en-us/library/bb386063(VS.100).aspx pueden encontrar un listado de todos los temas nuevos de esta plataforma.

 

.NET, ADO.NET, ASP.NET, Entity Framework, Visual Studio, WCF, WinForms , , , ,

La correcta elección de las KEYWORDS en SEO (Search Engine Optimization) por Alejandra Federico

17. febrero 2010

A la hora de querer seleccionar cuáles son aquellas palabras claves que debemos utilizar, para que nuestro sitio web este posicionado entre los primeros en los resultados de una búsqueda, se nos hace realmente dificil.

Es por ello que aquí les dejo algunas herramientas que quizás les sirva de ayuda para la selección de las palabras claves:

  • http://www.keyworddiscovery.com/search.html Esta herramienta nos sirve permite descubrir las diferentes palabras que los usuarios están utilizando en los buscadores, relacionada con la palabra que escribimos
  • http://www.kwmap.net/  Es una herramienta gráfica que muestra las relaciones entre los término de búsqueda como un gráfico.
  • http://freekeywords.wordtracker.com/ Esta herramienta te dará una lista con al menos 100 palabras relacionada con las palabras que buscamos y, lo más importante es que lo hace en orden de importancia según la cantidad de veces buscada.
  • http://www.abakus-internet-marketing.de/tools/topword.htm Es una herramienta que analiza las palabras claves y frases de las palabras claves de un sitio. Nos puede servir para estudiar nuestro propio sitio.

 

ASP.NET, Desarrollo Web , ,

Acceso a datos con Entity Framework por Daniel Laco

11. febrero 2010

El 2 de Marzo estaremos dando con Maxi Guillen en el MUG una charla sobre  Entity Framework

Aqui les dejo los datos del evento:

 

Titulo: Acceso a datos con Entity Framework

Oradores: Daniel Laco / Maxi Guillen
Horario: 18:30 a 21:30 hs.
Dirección: Auditorio MUG - Rivadavia 1479 1º A , Ciudad de Buenos Aires

Descripción: Con el avance de nuevos paradigmas de programación y la incorporación de nuevas extensiones a los lenguajes, es necesario contar con nuevas herramientas para trabajar con datos y su persistencia. La cantidad de fuentes de información existentes y la necesidad de brindar nuevos puntos de publicación de esa información, con dispares protocolos, nos abre un panorama amplio en cuanto a que utilizar con los datos en nuestros desarrollos.

En esta conferencia se revisará Entity Framework pieza fundamental de la plataforma de datos de Microsoft
Se explicará cómo este Framework de persistencia facilita  el modelado de objetos y su interacción con la base de datos. 

También veremos los servicios de objetos, las implementaciones y herramientas nos permiten tratar los datos como objetos y así olvidarse de las filas y columnas a las que estamos acostumbrados los desarrolladores.

Por último mostraremos de manera somera las nuevas incorporaciones en la Versión 4.0 que será lanzada en Abril de este año.


 

Entity Framework, Eventos , ,

Optimización de sitios webs con Sprites por Daniel Laco

5. febrero 2010

Si bien es una técnica antigua, existe la posibilidad de utilizarla en páginas webs mediante el uso de CSS.

Esto nos permite reemplazar el uso de muchas imágenes en nuestro sitio, por una sola que contenga lo que necesitamos. Esto reduce mucho los request al sitio, con la consiguiente mejora en la carga de las páginas.

Aqui les dejo una recopilación de artículos (en Inglés) con explicaciones y ejemplos sencillos de está forma de pensar las páginas.

Creando fácilmente Sprites con CSS

http://cssglobe.com/post/3028/creating-easy-and-useful-css-sprites

Explicación de que son los Sprites

http://www.peachpit.com/articles/article.aspx?p=447210

El misterio de los Sprites de CSS, Tutoriales y Ejemplos

http://www.smashingmagazine.com/2009/04/27/the-mystery-of-css-sprites-techniques-tools-and-tutorials/

 

ASP.NET, Desarrollo Web, Sharepoint ,

Sintaxis diferentes para consultas en LINQ to Entities por Gustavo Lombardo

4. febrero 2010

Hoy en día la mayor parte de las aplicaciones se desarrollan para que accedan a los datos de las bases interactuando con los mismos ya que se encuentran representados en un formato relacional (modelo relacional). Entity Framework nos permite trabajar con datos en forma de objetos y propiedades específicas del dominio sin tener que pensar en las tablas de las bases de datos o columnas en las que se almacenan estos datos. LINQ (Language-Integrated Query) nos facilita la vida a la hora de formular consultas en el código de las aplicaciones para interactuar con la base de datos, sin tener que usar un lenguaje de consulta independiente. A través de la infraestructura de Entity Framework, ADO.NET  muestra una vista conceptual común de los datos, como objetos del entorno .NET. Esto hace que la capa de datos sea compatible con LINQ. Esta tecnología, LINQ (LINQ to Entities), nos permite escribir consultas flexibles mediante el uso de operadores de consulta estándar y de expresiones LINQ en el entorno de desarrollo. Las consultas se expresan en el propio lenguaje de programación y no como literales de consulta incrustados en el código permitiendo que el compilador detecte errores de sintaxis en tiempo de compilación.

Una operación de consulta LINQ consta de tres acciones: obtener el origen o los orígenes de datos, crear la consulta y luego ejecutarla. Las instancias de la clase ObjectQuery, que implementa la interfaz genérica IQueryable, actúan como origen de datos para las consultas LINQ to Entities. La clase ObjectQuery genérica representa una consulta que devuelve una instancia o colección de entidades tipadas. Primero debemos crear una instancia de ObjectContext, que es la clase principal para interactuar con un Entity Data Model (EDM) como objetos de CLR (Common Language Runtime). Luego en la consulta especificamos exactamente la información que deseamos recuperar del origen de datos. Una vez creada se debe ejecutar.

Las consultas de LINQ to Entities se pueden formular en dos sintaxis diferentes:

  • Sintaxis de expresiones de consulta
  • Sintaxis de consultas basadas en métodos

La sintaxis de expresiones de consulta consta de un conjunto de cláusulas escritas en una sintaxis declarativa similar a Transact-SQL. Al usar la sintaxis de consulta, se pueden realizar operaciones complejas de filtrado, clasificación y agrupación en orígenes de datos con una cantidad mínima de código. En el siguiente ejemplo se muestra la operación de consulta completa que incluye la creación de un origen de datos, la definición de la expresión de consulta y la ejecución de la consulta en una instrucción forech:

class LINQQueryExpressions
{
    static void Main()
    {
        // Especificar origen de datos.
        int[] numeros = new int[] { 97, 92, 81, 60 };
 
        // Definir la consulta mediante la sintaxis de expresiones.
        IEnumerable<int> listaNumeros =
        from nro in numeros
        where nro > 80
        select nro;
 
        // Ejecutar la consulta.
        foreach (int i in listaNumeros)
        {
            Console.Write(i + " ");
        }            
    }
}
// Salida: 97 92 81

Todas las variables utilizadas con este tipo de sintaxis tienen establecimiento inflexible de tipos, aunque no es necesario que proporcionemos el tipo explícitamente ya que el compilador puede deducirlo. Debido a que .NET CLR no reconoce la sintaxis de expresiones de consulta por sí mismo, en tiempo de compilación las expresiones de consulta se convierten en elementos que CLR reconoce: las llamadas a métodos. Estos métodos se conocen como operadores de consulta estándar y tienen nombres como Where, Select, GroupBy, Join, Max, Average, etc. Este tipo de sintaxis no es más que una secuencia de llamadas directas a los métodos de operador de LINQ a las que le debemos pasar como parámetros expresiones lambda. En el siguiente ejemplo use el Select para devolver todas las filas de Empleados que cumplan con la condición  de tener 33 años y mostrar sus nombres.

using (EmpresaSAEntities data= new EmpresaSAEntities())
{
    IQueryable<string> nombreEmpleados = data.EmpleadosSet
        .Where(e=> e.Edad == 33)
        .Select(p => p.Nombre);
 
    Console.WriteLine("Nombre Empleados:");
    foreach (var nombre in nombreEmpleados)
    {
        Console.WriteLine(nombre);
    }
}

Para ambas sintaxis es posible usar operadores estándar para confeccionar consultas de agrupación (GroupBy), de combinación (Join o GroupJoin), de ordenamiento (OrderBy combinado con ThenBy o ThenByDescending por ejemplo), etc. Algunas operaciones de consulta como Count o Max, no tienen ninguna cláusula de expresión equivalente y, por tanto, deben expresarse como una llamada a método. La sintaxis de método se puede combinar con la sintaxis de consulta de varias maneras.

Como programador, tenemos la posibilidad de escribir la consulta mediante sintaxis de consulta como también con sintaxis de método. Sin embargo, en la mayoría de los casos, la sintaxis de consulta es más fácil y concisa porque utiliza muchas construcciones de lenguaje de C# familiares. Si bien, no existe ninguna diferencia semántica o de rendimiento entre las dos formas, las expresiones de consulta suelen ser más legibles que las expresiones equivalentes escritas con sintaxis de método. Un claro ejemplo que nos llevo a cambiar por sintaxis de consulta en el proyecto del que formo parte, es que la sintaxis de método resulta casi ilegible al tener una consulta con una gran cantidad de Joins o GroupJoins en secuencia donde los datos son seleccionados mediante clases anónimas. Veamos este caso:

Ejemplo con sintaxis de consulta basada en método:

//Join entre la tabla PermisosSet con los EmpleadosSet 
//para obtener los ids de Empresa y Articulo.    
var permisos = data.PermisosSet
    .Join(data.EmpleadosSet,
    p => p.IdLegajo,
    e => e.IdLegajo,
    (p, e) => new
    {
        p.IdEmpresa,
        p.IdArticulo
    });
 
//Join entre el IQueryable de "permisos" con los 
//EmpresasSet para obtener información de la Empresa.
var resultadoConEmpresas = data.EmpresasSet
    .Join(permisos,
    em => em.IdEmpresa,
    p => p.IdEmpresa,
    (e, p) => new
    {
        p.IdArticulo,
 
        DatosEmpresas = new
        {
            em.CodEmpresa,
            em.Descripcion
        }
    });
 
//Join entre el IQueryable de " resultadoConEmpresas " con 
//los ArticulosSet para obtener información del Articulo.
var resultadoFinal = data.ArticulosSet
    .Join(resultadoConEmpresas,
    a => a.IdArticulo,
    r => r.IdArticulo,
    (a, r) => new
    {
        DatosArticulos = new
        {
            a.CodArticulo,      
                a.Descripcion,
                a.Vigencia
        }
    });

Ejemplo con sintaxis de expresiones de consulta:

var permisos = from r in data.PermisosSet
    //Realizar todos los Joins
    join e in data.EmpleadosSet on r.IdLegajo equals e.IdLegajo
    join em in data.EmpresasSet on r.IdEmpresa equals em.IdEmpresa
    join a in data.ArticulosSet on r.IdArticulo equals a.IdArticulo
    
    //El Select se realiza al final para obtner todos los datos que se retornaran.
    select new
    {
        DatosEmpresas = new
        {
            em.CodEmpresa,
            em.Descripcion
        },
 
        DatosArticulos = new
        {
            a.CodArticulo,      
            a.Descripcion,
            a.Vigencia
        }
    };

Si bien las consultas devuelven los mismos resultados puede verse claramente que la consulta confeccionada mediante sintaxis de expresiones es más legible y similar a T-SQL que la realizada son sintaxis de métodos.

ADO.NET, Entity Framework ,

Cómo forzar la actualización de Datawarehouse de TFS por Victor Passador

3. febrero 2010

Al trabajar en la creación de reportes para TFS, con uno de los problemas con los que nos cruzaremos es con el hecho de que los cambios que realicemos en la base de datos de TFS (por ejemplo al crear/modificar Work Items) no se reflejarán inmediatamente en el reporte.

Esto se debe a que, por defecto, la actualización del Datawarehouse se realiza a intervalos de una hora, ya que es un proceso que consume una cantidad importante de recursos del servidor. Además, al tratarse generalmente de reportes basados en datos estadísticos, contar con información que se actualiza a cada hora es suficiente para la mayoría de los casos.

Como mencionábamos, esto es válido en un entorno de producción, pero cuando estamos haciendo el ajuste fino de un reporte en un ambiente de pruebas, este lapso no nos sirve y nos encontramos en la necesidad de actualizar el Datawarehouse “on demand”.

Para esto podemos utilizar un Web Service que, además de ésta, cuenta con otras funcionalidades:

http://teamserver:8080/Warehouse/v1.0/WarehouseController.asmx

 

Una vez allí, debemos hacer click en la operación “Run” y luego el botón “Invoke”

La yapa

Si  son lo suficientemente impacientes como para pretender algo más cómodo, los voy a invitar a que lean el post de Eric Lee donde publica una pequeña aplicación que realiza esto mismo pero con sólo presionar un botón.

 

ASP.NET

Especificaciones sin ambigüedades? por Patricia Scalzone

3. febrero 2010

Se imaginan? Nos cambiaría la vida a los analistas de sistemas, tal vez correríamos el riesgo que pase a ser la profesión más codiciada.

El Ing. Simón Pristupin está trabajando desde 1997 en una teroría denominada Gramática Distributiva (GD), que tiene por objetivo mejorar las capacidades de las personas para redactar discursos complejos.

En realidad, esto se aplica a cualquier disciplina o individuo que esté dispuesto a escribir correctamente. Un proyecto muy interesante sería que los niños aprendieran esta técnica desde pequeños, para mejorar en el futuro las malas interpretaciones provenientes de la escritura. Se están haciendo experiencias en este aspecto.

La comunicación es un proceso complejo, y más aún cuando es escrita.

En el desarrollo de Software, es habitual que en el momento del relevamiento, el usuario no cuente todo lo que sabe, o asuma que nosotros conocemos del tema, y es así como se omiten las aclaraciones de lo obvio. El analista lo recibe en su contexto conceptual, lo interpreta de cierta forma, lo escribe, y se lo entrega al desarrollador para que produzca lo que está plasmado en el documento de especificaciones. Entonces vuelve a cobrar vigencia la hamaca de Slabbovia, que la vi por primera vez pegada en el pasillo del 4to. piso de la Fiuba allá lejos cuando estudiaba, y no perdió vigencia en absoluto (se muestra más abajo).

Lo que propone Simón con la GD es no utilizar el lenguaje natural en la escritura de discursos que deben ser precisos, claros, sencillos y directos. Hay que depurar las ambigüedades e impurezas que nos ofrecen los textos escritos en dicho lenguaje. Para lograrlo, transfiere la complejidad de una cadena de muchas palabras a un conjunto de cadenas binarias (de dos palabras) mediante un proceso analítico, y luego se reconstruye la cadena de muchas palabras a partir de cadenas binarias, mediante un proceso de síntesis. Dicho de otra manera, la GD logra desglosar en forma sencilla discursos complejos, analizándolos desde la perspectiva de la cadena de palabras de menor complejidad (dos palabras o binaria). En su libro http://www.universia.com.ar/contenidos/LIBRO-GRAMATICA-DISTRIBUTIVA.pdf se explica claramente.

Parece complejo, pero es bastante sencillo. Creemos que vale la pena conocerlo y aplicarlo.

A medida que avancemos en nuestras pruebas, las iremos publicando.

 

 

Gestión de Proyectos, Metodologías y Procesos , , ,

9 puntos para lograr posicionarse (SEO) por Alejandra Federico

30. enero 2010


9 puntos para lograr posicionarse (seo)

 

El SEO (Search Engine Optimizer) consiste en aplicar diversas técnicas que tienden a lograr que los buscadores de internet sitúen nuestra página en una buena posición y categoría alta, para determinados términos y frases claves.

A la hora de querer posicionarnos primeros debemos tener en cuenta los siguientes puntos:

  • Para empezar debemos focalizarnos en el título. Es lo más importante, primero porque los buscadores le dan bastante importancia a las palabras del título (sobre todo google) y luego porque es lo primero que se ve en la página de resultados. Hay que redactar un título que contenga las palabras claves en las que queramos estar bien posicionados y que sea atractivo al usuario que ve el resultado de la búsqueda. Debemos evitar colocar artículos (el, la, un, una). No se recomienda que sea superior a 60 caracteres, debe poseer aproximadamente entre 4 a 6 palabras. Los buscadores le dan mucha importancia a las palabras en negrita y de mayor tamaño.
  • Otro punto a tener en cuenta son las palabras claves. Para poder aparecer en los buscadores es necesario que nos focalicemos en aquellas palabras por las cuales creemos que nos van a buscar. Estas palabras claves deben ir en los títulos, etiquetas alt de las imágenes, los metatags, las URLS de nuestra página y en los enlaces de otras web.
    Se deben medir la densidad de las palabras claves. La densidad es el ratio de apariciones de una palabra o frase clave en el total de palabras que componen un texto. Por ejemplo, para un texto de 200 palabras, si una palabra aparece 10 veces, su densidad será del 5%.
    La densidad de palabras clave es uno de los factores que tienen en cuenta los buscadores para ordenar los resultados de una búsqueda.
    Para poder chequear como se encuentra nuestro sitio con respecto a la densidad existen algunos programas que nos indican cuales son las palabras más relevantes que figuran en nuestra web: 
  • Nuestro sitio debe poseer contenido de calidad de esta manera vamos a lograr que otras web nos enlacen. El blog nos puede servir de gran utilidad para que otros realicen visitas. Como mínimo hay que publicar un artículo por mes. Un modo para poder mantenerlo es obtener de otro sitio algún artículo interesante y copiar el link de donde fue sacado.
  • Los enlaces funcionan como una especie de voto o adhesión a una web en particular. Si los enlaces son de calidad esa valoración será positiva, de lo contrario nos perjudicarán.
  • En las etiquetas se debe utilizar H1 H2 H3… El H1 es recomendable que haya uno sólo por página, H2
    y H3 se pueden repetir algunas veces, aunque siempre ubicados de forma
    correcta:

    H1 para el título
    H2 para el título de las entradas
    H3 para los comentarios y otras subcategorías
  • No se debe insertar contenido importante en pdf, medios gráficos o flash. El abuso de JavaScript y Flash dificulta que un buscador nos "entienda".
  • Participar en redes sociales, por ejemplo Linkedin, Facebook, Hi5, Orkut, y de esta manera poder obtener mas visitas a nuestro sitio web.
  • Se debe realizar un mapa del sitio (site map). Si no se tiene es conveniente confeccionar un mapa del sitio actual, que contenga todas las URL’s de la páginas publicadas, incluyendo sus títulos, descripciones, palabras clave, meta tag robots, fecha de última modificación y nivel o algún tipo de clasificación de importancia dentro del árbol.
  • Puntos que no hay que realizar para NO ser penalizados por los buscadores:
    1. Evitar utilizar textos ocultos
    2. Evitar utilizar enlaces ocultos.
    3. No cargar la página con palabras claves irrelevantes.
    4. No enviar consultas automatizadas a google.
    5. Venta y/o compra de enlaces con el sólo motivo de aumentar artificialmente el PageRank.
    6. Técnicas de alto riesgo como el cloaking (mostrar dos o más páginas diferentes según quien desee visualizarla, es decir, no enviar la misma página al usuario y al buscador).
    7. Páginas Doorway (páginas creadas con el propósito de posicionarse para una determinada palabra clave y, entonces, ser una página de entrada a la web alternativa) creadas masivamente o de contenido prácticamente idéntico.
    8. Enlaces entrantes, es decir, hacia nuestra web, en cantidad masiva desde weblogs, guestbooks o granjas de enlaces.
    9. Enlaces salientes, es decir, desde nuestra web, hacia sitios web que realizan prácticas de alto riesgo o SPAM.
    10. No crear varias páginas, subdominios o dominios que presenten básicamente contenido duplicado.

Como conclusión, en el posicionamiento juegan cientos de variables y algorítmos que cambian día a día. Por más que en determinados
momentos se logren excelentes resultados, nadie tiene la verdad. No es una ciencia cierta.

ASP.NET, Desarrollo Web , ,

Problemas para compartir archivos? He aquí una herramienta salvadora! por Maxi Guillen

22. enero 2010

Hay ocaciones cuando necesitamos compartir rapidamente archivos entre pcs de escritorio, notebooks y/o dispositivos móviles.Ya sea dentro de la red interna o con otro usuario que utiliza internet. Si estamos en una LAN incluso podemos tener problemas de seguridad con firewalls, carpetas compartidas y dependiendo si estamos en un dominio o no, con las cuentas para acceder a estos recursos en la máquina remota. Ni hablar de compartir archivos entre máquinas con distintos sistemas operativos o contra celulares por ejemplo. Si queremos compartir un archivo con un usuario de internet que esta fuera de la LAN tenemos varias alternativas, por ejemplo: FTP, MSN, Google Talk (La versión en inglés permite transferir archivos!), Rapidshare!?. Bueno como todos sabemos puede que el receptor no tenga posibilidades de utilizar ninguna de estas herramientas o podemos tener problemas de lentitud.

 

Encontré esta herramienta muy interesante llamada HFS,  que  permite publicar los archivos deseados generando un link para que el usuario remoto haga una descarga común http. No necesitamos ninguna infraestructura especial, ni IIS, apache, JRE, nada extraño, la herramienta se encarga de hostear el archivo.

 

Se puede descargar de: http://www.rejetto.com/hfs/

 

Espero que les sea útil!

 

 

Tecnología

El uso de múltiples monitores incrementa la productividad por Maxi Guillen

22. enero 2010

Un estudio realizado por NEC, ATI y la Universidad de Utah concluye que el uso de múltiples monitores incrementa la productividad

 

El Dr. James Anderson, profesor del departamento de Comunicaciones de la Universidad de Utah afirma:

“El estudio revela que los usuarios de pantallas múltiples trabajan más rápido, 

realizan más tareas y con menos errores al editar documentos,

planillas de cálculo y edición de imágenes en comparación a los usuarios de una sola pantalla.”


Los principales resultados del estudio arrojaron que los participantes, utilizando una configuración de múltiples monitores:

  • Fueron 10% más productivos.
  • Disminuyeron sus errores de edición en un 18%.
  • Fueron un 29% más efectivos al realizar sus tareas.
  • Se sintieron un 24% más cómodos al usar esta configuración para realizar su trabajo.
  • En un 39% les fue más fácil mover ya acomodar sus fuentes de información.


El estudio menciona los siguientes beneficios de los puestos de trabajo con múltiples monitores:

  • Permite procesar múltiples fuentes de información en forma simultánea, mover y cambiar su tamaño en una o todas las pantallas disponibles para incrementar la productividad.
  • Puede impactar en el ROI de la empresa si se considera la disminución de los errores en cada puesto de trabajo
  • Puede impactar positivamente en la moral de los trabajadores haciendo que se sientan más cómodos y hábiles para completar sus tareas permitiéndoles una navegación más ágil y un enfoque mayor en sus tareas.
  • Tiene una curva de aprendizaje muy baja.


Aplicaciones inmediatas para el desarrollo de software

Podríamos utilizar una pantalla para tener maximizado nuestro entorno de desarrollo y al mismo tiempo, en la otra pantalla, tener un documento con los requerimientos, buscar en internet con un navegador, hacer consultas sobre la BD, etc. Interesante no?

 

Ahora que está demostrado científicamente tal vez las empresas puedan hacer una buena inversión!

Quien se anima a llenar la F-10? (Chiste interno – solo para entendidos!)

 

Para más detalles se pueden consultar las siguientes fuentes

http://www.necus.com/necus/media/press_releases/template.cfm?DID=1947

http://www.nytimes.com/2006/04/20/technology/20basics.html

http://www.tufuncion.com/dos-monitores

http://www.youtube.com/watch?v=TVVLzaMMqRM


Tecnología ,