miércoles, 26 de noviembre de 2014

Conceptos en Datawharehouse

Cuando nos disponemos a adentrarnos un poco más en el mundo de las bases de datos multidimensionales y después de saber como se estructura un cubo olap tenemos que aprender algunos nuevos conceptos. En primer lugar observar como se estructuran los cubos en bases de datos relacionales, para lo cual abajo podéis ver como hay que estructurar las tablas en lo que se denomina esquema en estrella que consta de 2 partes fundamentales:

  • Tabla de hechos, que es la tabla central en la que se calculan todas las medidas que queremos almacenar. En el esquema de abajo es la tabla central del dibujo y la medida que queremos guardar es CantSol
  • Tablas de dimensiones: son las tablas que rodean a la tabla de hechos y que como veis contienen los datos para ir clasificando la información agregada o medida que almacenamos en la tabla de hechos







Os voy a presentar 1 concepto que debemos que conocer:

Cuando a una dimensión no se le pueden asociar múltiples atributos, se dice que tenemos una dimensión degenerada, y solo aparecerá como una columna en la tabla de hechos. Por ejemplo, si tuviéramos en nuestro ejemplo una dimensión “Estado de la Venta”, con los posibles valores: “Confirmada”, “Pendiente”, “Cancelada”; en este caso la dimensión serviría solo para separar las ventas según su estado, y no se requieren atributos adicionales.

Es decir, Dimensión Degenerada hace referencia a un campo que será utilizado como criterio de análisis y que es almacenado en la tabla de hechos y que como posee el mismo nivel de granularidad que los datos de la tabla de hechos no se pueden realizar agrupaciones o sumarizaciones a través de este campo. 

lunes, 24 de noviembre de 2014

Como descubrir las tecnologías que emplean sitios web

Hola a todos!

Muchas veces los profesionales en tecnologías nos preguntamos, ¿Y con que tecnología estará hecho este site? Pues bien hay maneras de saberlo. Hay múltiples tools que lo hacen, que están online y que además nos proporciona otra información del site como plantillas, plugins, el servidor, etc que está utilizando.

Aquí os indico algunos de los que más me gustan:
1. W3Techs
Similar a Built With, ya que tiene aspectos comunes a las herramientas anteriores, se puede utilizar para comparar resultados, y obtener algún dato más que la herramienta anterior no ofrece.
2. WhatCms.org
WhatCms.org es una herramienta online que nos revela unicamente que CMS (gestor de contenidos) puede estar usando un sitio web. Unicamente nos indicará si el sitio web utiliza Joomla!, Drupal, WordPress, etc.
3. CMS Detector
Similar a la herramienta WhatCms.org en un principio solo te muestra el CMS que utiliza una web, pero se puede pulsar en "Click here to fully analyze ...” y entonces presentará un informe con una información general sobre el sitio web, el ranking, páginas que tiene indexadas, redes sociales, etc.

Aqui os dejo una captura de toda la información que se obtiene para una página como el diario informativo www.elmundo.es


jueves, 6 de noviembre de 2014

Ganar dinero con vende-cookies

El otro día comencé a examinar la aplicación vendecookies, otra aplicación para ganar dinero. En esta aplicación el usuario debe cocinar galletas virtuales y las galletas virtuales se venden a la página por dinero real. Esta aplicación reúne todos los requisitos para triunfar: divertida, gratuita, buen soporte al usuario, condiciones legales claras, puntual en los pagos, adictiva, buen sistema de referidos.

El objetivo es ir consiguiendo cada uno de los ingredientes para cocinar las galletas:



Los ingredientes se ganan jugando a minijuegos. Al final, cuando tienes dinero suficiente cocinas las galletas



Si tienes referidos ganarás más dinero. El modelo de negocio es la publicidad, reparten el 50% de los beneficios entre los usuarios.

El valor de las galletas varia cada 30 días.

Puedes darte de alta aquí:


Aquí tienes un video tutorial del funcionamiento

http://www.vendecookies.com/

martes, 4 de noviembre de 2014

El motor de vistas razor de .Net

Una aplicación ASP.NET MVC, soporta diferentes Motores de Vistas (View Engine), los cuales definen la manera en que se estructura la página HTML.



Uno de estos motores de vistas, es el clásico .aspx/.ascx/.master utilizado en los Web Forms de ASP.NET.

Razor es un motor de vista, que permite embeber código C# dentro de una página, sin utilizar los delimitadores <%=%>. Los archivos basados en este motor de vistas, poseen la extensión .cshtml.

Veamos algunos ejemplos:
Bloque de Sentencia Simple.
Cada bloque de código debe comenzar con el símbolo @, y posteriormente debe ir encerrado entre llaves { } el código C# correspondiente.

@{ var mensaje = "Hola Mundo"; }
El Mensaje de esta página es : @mensaje





En este bloque se asigno a una variable una cadena de texto "Hola Mundo", posteriormente, fuera del bloque, dicha variable es accesible globalmente por medio del caracter @.




Bloque de Múltiples Sentencias.

Cuando se trabaja con un grupo de sentencias, para generar un resultado, la forma de trabajar es exactamente igual que en el caso previo, pero teniendo en cuenta de finalizar cada línea con punto y coma.

@{
    var montoinicial = 100;
    var interes = 12;
    var montofinal = (montoinicial * interes) / 100;
}
Aplicando al monto inicial @montoinicial un interés del @interes % nos da como reresultado @montofinal

 


Condicionales.

Con el Motor de Vistas Razor, puede definirse un condicional dentro de bloque Razor o fuera del mismo, como puede observarse en el siguiente ejemplo.



@{
var esValido = true;
if(esValido)
{
    <p>Probando un Condicional dentro de bloque Razor, entrada positiva</p>
}
else
{
    <p>Probando un Condicional dentro de bloque Razor, entrada negativa</p>;
}
}
 


Bucles.

Puede incluirse dentro de una páginas ASP.NET MVC con Motor de Vistas RAZOR, los mismos bucles que se utilizan en la programación C#, es decir, for, while do while, foreach


@{ 

for(var cont=1, cont<=3, cont++) {
    <p>Contador es @cont</p>
}

string[] nombres = {"Juan","Jose","Maria"};
foreach(var nombre in nombres) {
    <p>El Nombre es @nombre</p>
}

var contador=1;
do {
  <p>Este es el paso @contador por el Bucle DO</p>
  contador++;
} while(contador<3);

}



Comentarios.

Existen 3 maneras de realizar comentarios en un bloque RAZOR, las dos primeras son las clásicas utilizadas por C#, es decir, anteponer a una línea los caracteres // o encerrar un bloque entre /* */.
Además de estas, RAZOR incluye la posibilidad de comentar un bloque de texto, encerrando el mismo entre los caracteres @* *@.

domingo, 2 de noviembre de 2014

Los índices bitmap en sql

Los índices son elementos fundamentales para acelerar las consultas en las aplicaciones que creemos. Generalmente los íncides normales son árboles B-tree que aceleran la velocidad de las queries que se lanzan en una Base de datos evitando que los recorridos en las tablas sean secuenciales. Internamente los índices lo que hacen es  almacenar una lista de rowids de las filas de la tabla con el valor clave.

Los índices bitmaps funcionan de forma diferente.  En un indice bitmap, en vez de una lista de rowids, se crea un mapa de bits para cada valor clave del indice. Cada bit del mapa corresponde a un rowid posible. Si el bit esta en 1, significa que el rowid contiene dicho valor clave. Los indices bitmap ofrecen la misma funcionalidad que los indices B-tree, pero con una representacion interna distinta.


IMPORTANTE: Si la cantidad de valores diferentes  que puede tomar el dominio el indice es pequeá, entonces el indice bitmap sera muy eficiente en cuanto al uso de espacio fisico.

Veamos un ejemplo:

Supongamos que tenemos la siguiente tabla de clientes:

CLIENTE      APELLIDO       ESTADO_CIVIL
1            ALONSO         CASADO
2            GARCIA         SOLTERO
3            LOPEZ          DIVORCIADO
4            SAN MARTIN     SOLTERO


La columna estado civil tiene baja cardinalidad, ya que los valores posibles son muy pocos (ESTADO, CASADO, SOLTERO). Hay solamente tres valores posibles por lo tanto un indice bitmap seria apropiado para esta columna. Sin embargo, no es recomendable un indice bitmap para la columna CLIENTE o APELLIDO, dada su alta cardinalidad.

La representación interna sería la siguiente:

CASADO SOLTERO DIVORCIADO
1                   0                    0
0                   1                    0
0                   0                    1
1                   0                    1

Un indice bitmap puede resolver esta sentencia con gran eficiencia contando la cantidad de unos existentes en el mapa de bits resultante como se muestra en la siguiente figura

select count(*) from CLIENTES
    where ESTADO_CIVIL in ('SOLTERO','DIVORCIADO');