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.

 

Tags: , ,

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.


 

Tags: , ,

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/

 

Tags: ,

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.

 

Tags: ,

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.

 

Tags: ,

ALM | TFS

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.

 

 

Tags:

Gestión de Proyectos | Metodologías y Procesos

Acerca de los Autores

Este es el blog del equipo de VEMN SA 
Presentaremos temas que nos parezcan de interés sobre tecnología .NET, Procesos y Metodologías y todo aquello relacionado con el proceso de desarrollo de Software

Month List

BlogRoll

Download OPML file OPML