lunes, 29 de mayo de 2017

Instalación y configuración de Proxmox














¿Qué es Proxmox? 
Proxmox VE es una herramienta de virtualización. Está basado en KVM, gestiona máquinas virtuales, almacenamiento, redes virtualizadas y clústeres HA.

La interfaz web intuitiva está diseñada para ayudar a aumentar el uso de los recursos existentes y reducir los costos de hardware y tiempo de administración.

Los recursos de la máquina que vayamos a instalar Proxmox han de ser considerables, 
puestos que virtualizaremos diferentes SO.

·         RAM > 4 Gb
·         Disco Duro > 250 Gb

Para instalarlo necesitaremos un CD con PROXMOX.  (No utilizar imagen ISO en USB, no es posible la instalación).
Al iniciar nos encontramos con la pantalla de bienvenida, simplemente con pulsar Enter continuaremos con la instalación…

  






Si pulsamos F2 vemos todo lo que va haciendo durante la instalación, reconocimiento de drivers, carga de módulos, etc…
Después de la carga, nos detalla el tipo de licencia y cuáles son las condiciones de uso, si estamos de  acuerdo aceptamos…

















A continuación nos dice en que partición se va a instalar, en nuestro caso es: 
/dev/sda

Seleccionamos el país, la zona horaria y automáticamente nos detecta teclado…

















Nos pedirá que introduzcamos un password para el usuario, también nos pide un correo electrónico. Guardaremos bien la contraseña porque nos va hacer falta, el usuario lo crea por defecto Proxmox

·         Usuario: root
·         Pass: la que hayamos definido
   















Es el momento de configurar la dirección de red:

Hostname: Proxmox.asirn.info
Ip: 192.168.1.11
Netmask: 255.255.255.0
Gateway: 192.168.1.1
DNS Server: 192.168.1.1
   















En acabar la instalación veremos que la IP que hemos asignado nos servirá para el acceso vía web.

Una vez acabada la instalación el programa reiniciará, sacamos el CD para que no haya conflictos.
Después de cargar y antes de loguearnos, vemos el siguiente mensaje, en el paso anterior pusimos una IP, esta la utilizaremos para acceder vía web, en este mensaje nos muestra cual es la Url que debemos introducir en nuestro navegador para acceder a la interfaz gráfica de Proxmox.









Como ya hemos visto, para acceder a la interfaz gráfica vía web debemos introducir la url en el navegador, de esta manera podremos configurar Proxmox de una manera mucho más intuitiva.
  



El no ser una conexión segura nos pide una confirmación, añadimos la excepción y confirmamos…
Nos pide Usuario y contraseña para acceder, lo introducimos, elegimos el idioma, y conectamos…














Bueno, es todo por el momento, espero que les haya sido de mucha utilidad. En otro artículo comentaré sobre la configuración de plantillas de servicios virtualizados y su configuración.
{ Leer Más }


martes, 23 de mayo de 2017

Valores y porcentajes de gráficas sobre ChartJS











Hace un tiempo mientras trabajaba con un sitio que usaba gráficas creadas con ChartJS y éstas solo permitían mostrar los valores al pasar el puntero del ratón por encima, en ese momento me hacía una pregunta, ¿Cómo le podría colocar no solo los valores sino también los porcentajes y los mismos no se sobrepusieran uno encima del otro? Las gráficas ya estaban creadas en aquel entonces, solo faltaba cambiar el funcionamiento de las mismas. Hoy les traigo la solución a las gráficas de tipo pieChart(circular).
Antes quiero comentarles que este artículo es para aquellos que tienen conocimiento básico o que ya hayan trabajado antes con chart.js.
Ahora bien, manos a la obra, lo primero que haremos es integrar la librería de jquery y de chartJS a nuestro sitio, luego colocar un contenedor en el sitio para mostrar la gráfica.
<div id=”grafica”></div>
El siguiente paso es crear un fichero js o en el mismo sitio, abrir una etiqueta javascript para colocar el código que nos facilitará ver la gráfica con valores y porcentajes.
Declaramos una variable y le colocamos el siguiente código:
var grafica = $("#grafica").get(0).getContext("2d");
A continuación le pondré la solución y luego abajo le doy una breve explicación de las líneas más importantes, o las líneas que resuelven el problema de los valores y porcentajes.
var pieChart = new Chart(grafica, {
        type: 'pie',
        data: {
        labels: ["Primero","Segundo","Tercero","Cuarto"],
        datasets: [{
            backgroundColor: ["#2ecc71","#3498db","#f1c40f","#e74c3c","#4D5360"],
            data: [4, 8, 5, 2]
        }]},

        options: {
            legend: {
                display: false
            },
            events: false,
            animation: {
                duration: 1200,
                easing: "easeOutQuart",
                onComplete: function () {
                    var ctx = this.chart.ctx;
                    ctx.font='14px LatoRegular, Helvetica,sans-serif';
                    ctx.textAlign = 'center';
                    ctx.textBaseline = 'bottom';
                    this.data.datasets.forEach(function (dataset) {
                        for (var i = 0; i < dataset.data.length; i++) {
                            var m = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model,
                                    t = dataset._meta[Object.keys(dataset._meta)[0]].total,
                                 mR = m.innerRadius +
      (m.outerRadius - m.innerRadius) / 2,
                                sA = m.startAngle,
                                eA = m.endAngle,
                                mA = sA + (eA - sA)/2;
                            var x = mR * Math.cos(mA);
                            var y = mR * Math.sin(mA);
                            ctx.fillStyle = '#fff';

                            var p = String(Math.round(dataset.data[i]/total*100)) + "%";
                            if(dataset.data[i] > 0) {
                                ctx.fillText(dataset.data[i], m.x + x, m.y + y-10);
                                ctx.fillText(p, m.x + x, m.y + y + 5);
                            }
                        }
                    });
                }
            }
        }
    });


Todo el código es importante, pero las líneas que están en negrita son las que permite que en la gráfica de tipo circular se muestren los valores y porcentajes. Espero que este pequeño artículo le pueda ayudar.
{ Leer Más }


lunes, 8 de mayo de 2017

Filtros en CSS3


Desde la llegada de CSS3 hemos tenido una nueva variedad de características que nos han permitido enriquecer la vida de las páginas internet como son los bordes redondeados, las sombras, degradados, animaciones, etc. 
Todos ellos nos han permitido tener un sitio web mucho más amistoso y que genere una mejor interfaz de usuario.
Entre las propiedades una de las que más destaca son los filtros, estos nos dan la capacidad de aplicarle efectos a las imágenes como opacidad y desenfoque.  En este artículo te mostrare como trabajar con ellos.
Cabe mencionar que los filtros no son totalmente compatibles con todos los navegadores, en la mayoría hay que usar prefijos.
Sintaxis
Aunque todos los filtros tienen diferentes funcionalidades su sintaxis es la misma:
1.       del fichero pegar lo siguiente:
    .filtro {
         filter: <filter-function> [<filter-function>]* | none
    }               

Un ejemplo práctico de aplicar un filtro a una imagen:
HTML
    <img class="blur" src="imagen.jpg" />

CSS
    .blur {
         -webkit-filter: contrast(1.5); /* 1.5 = 150% */
         filter: contrast(1.5);
    }  

Ahora te mostrare una lista de los filtros que podemos utilizar en nuestras páginas:
Contrast
Ajusta el contraste de nuestra imagen dependiendo del valor que le asignemos, el valor proporcionado corresponde a un porciento en el ejemplo debajo 1.5 = 150%.
Ej:
    .filtro {
         -webkit-filter: contrast(1.5);
         filter: contrast(1.5);
    }

Hue-rotate
Se aplica una rotación de matriz en la imagen. El valor define el número de grados alrededor del círculo de color. (360deg. valor máximo).
Ej:
    .filtro {
         -webkit-filter: hue-rotate(180deg);
         filter: hue-rotate(180deg);
    }

Sepia
Convierte una imagen a sepia. Entre más grande el valor proporcionado más se va a ver el efecto.
Ej:
    .filtro {
         -webkit-filter: sepia(1);
         filter: sepia(1);
    }

Saturate
Aplica saturación a una imagen.
Ej:
    .filtro {
         -webkit-filter: saturate(3);
         filter: saturate(3);
    }

Opacity
Aplica transparencia a una imagen. Este filtro se comporta similar a la propiedad opacity la diferencia es que, con los filtros, algunos navegadores ofrecen la aceleración de hardware para mejorar el rendimiento.
Ej:
    .filtro {
         -webkit-filter: opacity(0.3);
         filter: opacity(0.3);
    }

Invert
Invierte los colores de una imagen. Un valor de 100% sería totalmente invertido.
Ej:
    .filtro {
         -webkit-filter: invert(1);
         filter: invert(1);
    }

Grayscale
Aplica un efecto de escala de grises. El valor define la proporción de la conversión; mientras más grande sea el valor, más gris va a ser (100% valor máximo).
Ej:
    .filtro {
         -webkit-filter: grayscale(1);
         filter: grayscale(1);   
    }

Drop-shadow
Aplica un efecto de sombra a la imagen y acepta el parámetro de fondos definido por CSS3. Este filtro es similar a la propiedad box-shadow la diferencia es que, con filtros, algunos navegadores ofrecen la aceleración de hardware para mejorar el rendimiento.
Ej:
    .filtro {
         - webkit-filter: drop-shadow(10px 10px 10px rgba(0,0,0,0.9));
         filter: drop-shadow(10px 10px 10px rgba(0,0,0,0.9));
    }

Blur
Da un desenfoque gaussiano. El valor define cuántos pixeles en la pantalla se mezclan entre sí. Entre más grande el valor más borroso va a ser.
Ej:
    .filtro {
         -webkit-filter: blur(2px);
         filter: blur(2px);
    }

De manera general esta es la forma de utilizar los filtros así lograremos darles mayor calidad visual a nuestros sitios.

Espero les haya servido de ayuda.
{ Leer Más }


viernes, 5 de mayo de 2017

Elementos Básicos sobre Normalización en Bases de Datos. Parte I



El presente artículo tiene como objetivo proveer al lector de conocimientos básicos acerca de la Normalización en Bases de datos, como uno de los aspectos principales a tener en cuenta cuando desarrollamos aplicaciones web y queremos, entre otras cosas, lograr: código PHP más fácil de comprender, ampliar, y en determinados casos, hacer tu aplicación más rápida.

En general

Un factor vital en la creación de páginas web dinámicas es el diseño de las Bases de Datos (BD). Si tus tablas no están correctamente diseñadas, te pueden causar muchos problemas cuando tengas de realizar complejas llamadas SQL en el código PHP para extraer los datos que necesitas. Si conoces como establecer las relaciones entre los datos y la normalización de estos, estarás preparado para comenzar a desarrollar tu aplicación en PHP.

Las reglas de Normalización están encaminadas a eliminar redundancias e inconsistencias de dependencia en el diseño de las tablas, debes que tener en cuenta que debes crear una BD funcional y eficiente.

Digamos que queremos crear una tabla con la información de usuarios, y los datos a guardar son el nombre, la empresa, la dirección de la empresa y algún email si lo tienen. En principio comenzarías definiendo la estructura de una tabla como esta:

Formalización Cero:

usuarios

nombre
empresa
dirección_empresa
email1
email2
Pedro
LCT
Lacetel, Miramar, Habanal
direccion@lacetel.com
economia@lacetel.cu
Jorge
CGR
Cubagran, Bayamo, Granma
direccion@cubagran.com
economia@cubagran.cu

Diríamos que la anterior tabla esta en nivel de Formalización Cero porque ninguna de nuestras reglas de normalización ha sido aplicada. Observa los campos email1 y email2 ¿Qué haremos cuando en nuestra aplicación necesitemos un tercer email? ¿Quieres tener que añadir otro campo/columna a tu tabla y tener que reprogramar toda la entrada de datos de tu código PHP? Seguramente, tú quieres crear un sistema funcional que pueda crecer y adaptarse fácilmente a los nuevos requisitos. A continuación veremos las reglas del Primer Nivel de Formalización-Normalización, y las aplicaremos a nuestra tabla.

Primer nivel de Formalización/Normalización. (F/N)

1. Eliminar los grupos repetitivos de las tablas individuales.
2. Crear una tabla separada por cada grupo de datos relacionados.
3. Identificar cada grupo de datos relacionados con una clave primaria.



Como puedes apreciar estamos rompiendo la primera regla cuando repetimos los campos email1 y email2. ¿Y qué pasa con la tercera regla, la clave primaria? La regla tres básicamente significa que tenemos que poner un campo tipo contador auto-incrementable para cada registro. De otra forma, ¿Qué pasaría si tuviéramos dos usuarios llamados Joe y queremos diferenciarlos. Una vez que aplicáramos el primer nivel de F/N nos encontraríamos con la siguiente tabla:

usuarios
id
nombre
empresa
dirección_empresa
email
1
Pedro
LCT
Lacetel, Miramar, Habanal
direccion@lacetel.com
1
Pedro
LCT
Lacetel, Miramar, Habanal
economía@lacetel.com
2
Jorge
CGR
Cubagran, Bayamo, Granma
direccion@cubagran.com
2
Jorge
CGR
Cubagran, Bayamo, Granma
economía@cubagran.com

Ahora diremos que nuestra tabla está en el primer nivel de F/N. Hemos solucionado el problema de la limitación del campo email. Pero sin embargo vemos otros problemas. Cada vez que introducimos un nuevo registro en la tabla usuarios, tenemos que duplicar el nombre de la empresa y del usuario. No sólo nuestra BD crecerá muchísimo, sino que será muy fácil que la BD se corrompa si escribimos mal alguno de los datos redundantes. Aplicaremos entonces el segundo nivel de F/N:

Segundo nivel de F/N:

1. Crear tablas separadas para aquellos grupos de datos que se aplican a varios registros.
2. Relacionar estas tablas mediante una clave externa.

Hemos separado el campo email en otra tabla, de forma que podemos añadir más en el futuro si tener que duplicar los demás datos. También vamos a usar nuestra clave primaria para relacionar estos campos:

id
nombre
empresa
dirección_empresa
1
Pedro
LCT
Lacetel, Miramar, Habanal
2
Jorge
CGR
Cubagran, Bayamo, Granma


email_id
user_id
email
1
1
direccion@lacetel.com
2
1
economia@lacetel.com
3
2
direccion@cubagran.com
4
2
economia@cubagran.com


Hasta ahora bien, hemos creado tablas separadas y la clave primaria en la tabla usuarios, id, está relacionada ahora con la clave externa en la tabla emails, user_id. Esto está mejor. ¿Pero qué ocurre cuando queremos añadir otro empleado a la empresa LCT? ¿o 500 empleados? Por el momento es todo, en mi próximo artículo titulado Elementos Básicos sobre Normalización en Bases de Datos. Parte II, continuaremos el estudio de los niveles de F/N.
{ Leer Más }


IconIconIcon