Páginas

Traducir

Dibujar punto en Html5

Alguna vez utilizado las primitivas gráficas con html5 nos ha faltado la de dibujar puntos. Una solución podría ser agregar a la librería de JavaScript ya existente un método al que llamaremos punto con los parámetros x e y.

Para dibujar un punto hacemos servir el método "fillRect" que nos dibuja un rectángulo. Los parámetros que hay que pasar son el origen x e y mas el ancho y alto. Como vamos a dibujar un punto pondremos ancho y alto con valor igual a 1.

CanvasRenderingContext2D.prototype.punto = function(x,y) { this.fillRect(x,y,1,1); }

El código completo con la solución se muestra seguidamente.

<!--DOCTYPE html--> <html> <title>Prueba punto</title> <head> <!-- Definimos estilos --> <style type="text/css"> body { background: black; } #lienzo { width: 400px; height: 400px; background: #f2f4ff; } </style> <!-- Introducimos código JavaScript --> <script type="text/javascript"> CanvasRenderingContext2D.prototype.punto = function(x,y) { this.fillRect(x,y,1,1); } window.onload=function() { ele=document.getElementById('lienzo'); ctx=ele.getContext("2d"); maximo=299; minimo=99; for (i=0;i<50000;i++) { x=Math.floor(Math.random()*(maximo-minimo+1))+minimo; y=Math.floor(Math.random()*(maximo-minimo+1))+minimo; cr=Math.floor(Math.random()*(255+1)); cg=Math.floor(Math.random()*(255+1)); cb=Math.floor(Math.random()*(255+1)); ctx.fillStyle = "rgba("+cr+","+cg+","+cb+",1)"; ctx.punto(x,y); } } </script> </head> <body> <!-- width="" height="" si variamos aqui escalamos --> <canvas id="lienzo" width="400" height="400"> <p>Navegador no soporta canvas. Aquí debería haber una imagen</p> </canvas> </body> </html>

Si ejecutamos este código podremos ver una zona cuadrada rellena de puntos en varios colores.

Construir un reloj analogico usando canvas en Html5, Css y Javascript

Usando varias tecnologías para navegadores como HTML5+CSS+Javascript voy a crear el codigo para visualizar un 'Reloj'.

Tu navegador no soporta canvas: Aquí deberías de ver una imagen :

Creo un fichero de texto con el nombre 'reloj.html' y agrego el codigo con cualquier editor de textos.

Para escribir el codigo del programa recomiendo usar el 'Notepad++' ya que es gratuito.

Primero creo la estructura HTML con su parte CSS y JavaScript. Defino el documento HTML5 con !DOCTYPE html

<!DOCTYPE html>
<HTML>
  <title>Ejemplo Reloj</title>

<head>
  <!-- Estilos CSS -->
  <style type="text/css">
  </style>

  <!-- Codigo JavaScript -->
  <script type="text/javascript">
  </script>
</head>

<!-- Cuerpo HTML5 -->
<body>
</body>
</HTML>

En la parte del cuerpo HTML5 se crea el canvas o lienzo. El tamaño 400 de ancho por 400 de alto. Este tamaño debe ser el mismo que se declare en la parte de CSS porque sino nos hace un escalado de la imagen.

Dentro de la etiqueta <canvas> hay un párrafo que se visualiza´en el caso que nuestro explorador no soporte la etiqueta <canvas> de Html5.

<canvas id="lienzo" width="200" height="200">
  <p>Tu navegador no soporta canvas: Aquí deberías de ver una imagen: </p>
</canvas>

En la parte de estilo CSS se da al fondo de la página un color negro y al lienzo un azul claro. También se define el tamaño del lienzo a 200 ancho por 200 alto.

body
  {
    background: black;
  }

#lienzo
  {
    width: 200px;
    height: 200px;
    background: #C3DCFC;
  }

En la parte código JavaScript se crea el programa con sus funciones para que muestre el reloj analógico sobre el lienzo.

Como el reloj tiene manecillas y forma circular eso quiere decir que se va a trabajar con senos, cosenos, radianes y grados para saber en que posición del reloj esta cada manecilla.

Se crea un nuevo metodo que no existe en la clase Math de Javascript para que devuelva un valor en grados a radianes y se agrega a esta clase.

Math.degToRad = function(deg) // Agregamos método a la clase estática
  {
    return deg*Math.PI/180;
  }

Para empezar a ejecutar el codigo JavaScript cuando toda la pagina ha sido cargada se usa window.onload=function(){ } . Dentro de las llaves estará el programa principal que ira llamando a las demás funciones. Para empezar a dibujar en el lienzo que se ha definido anteriormente se debe obtener un contexto de representación del Canvas. El contexto de representación que se usa será en 2D para gráficos en 2D. Para obtener un contexto de representación se llama al método getContext del elemento canvas.

window.onload=function()
  {
    ele=document.getElementById('lienzo');
    ctx=ele.getContext("2d");
  }

Llegados a este punto abriendo con el navegador el archivo reloj.html se veria la siguiente imagen:

Dentro de la funcion principal se agregaran variables que servirán para ayudar a las funciones que se crearan mas adelante para que sepan el punto central, margenes y tamaño del reloj. En la línea final se escribe una función con el nombre relojIniciar(); que es la que llama a las funciones restantes.

xmax=ele.offsetWidth; // ancho de lienzo
ymax=ele.offsetHeight; // alto de lienzo
xo=xmax/2; // Centro reloj coordenada x
yo=ymax/2; // Centro reloj coordenada y
radiox=xo-(xo/10); // Tamaño del radio ancho de la circunferencia
radioy=yo-(yo/10); // Tamaño del radio alto de la circunferencia

relojIniciar();

Se crea una función llamada relojCarcasa() que será la que dibuje los 12 puntos horarios en circulo. Con el metodo fillRect() se da a cada punto horario un ancho de 4x4 pixels. Con fillStyle se da un color negro eligiendo las tres componentes del color rgb a 0 'rgba(0,0,0, 1)'. Entre ctx.beginPath() y ctx.stroke() se dibuja las líneas o puntos del lienzo. Para situar los puntos horarios en circulo se hace uso de la formula polar de la circunferencia donde coordenada x=radio*sin(angulo) e y=radio*cos(angulo). En JavaScript los métodos Math.sin() y Math.cos() utilizan radianes por lo que si se piensa en grados habrá que hacer la conversión con el metodo Math.degToRad() que se había creado al principio. Para dividir una circunferencia en 12 partes se hace una parte por cada 30 grados y esto es lo que nos hace el bucle con el for.

function relojCarcasa() // Circulo con puntos
  {
    ctx.fillStyle = 'rgba(0,0,0, 1)';
    ctx.beginPath();
    for (ang=0; ang<360; ang=ang+30)
      {
        radianes=Math.degToRad(ang);
        x=radiox*Math.sin(radianes);
        y=radioy*Math.cos(radianes);
        x=x+xo;
        y=y+yo;
        ctx.fillRect(x,y,4,4);
      }
    ctx.stroke();
  }

Si se abre el navegador y se llama solo a la función relojCarcasa() desde la principal obtenemos esta imagen:

Se crean las tres manecillas del reloj con tres funciones llamadas relojManecillaHora(pos), relojManecillaMinuto(pos), relojManecillaSegundo(pos). Cada función recibirá un valor numérico que corresponderá a la posición de hora, minuto o segundo de la manecilla en el reloj. Con lineWidth se da grosor a la línea que dibuja la manecilla y con strokeStyle se da el color. Para dibujar las manecillas se hace con el método que dibuja líneas lineTo(x,y) siendo el origen de la línea el que posiciona con el método moveTo(xo,yo). Se usa la formula polar de la circunferencia para colocar cada manecilla en su lugar.

function relojManecillaHora(pos)
  {
    ctx.lineWidth = 4;
    ctx.strokeStyle = 'rgba(0,0,0, 1)';
    ctx.beginPath();
    radianes=Math.degToRad(180-pos*30); // hora
    x=radiox/1.5*Math.sin(radianes);
    y=radioy/1.5*Math.cos(radianes);
    x=x+xo;
    y=y+yo;
    ctx.moveTo(xo,yo);
    ctx.lineTo(x,y);
    ctx.stroke();
  }

function relojManecillaMinuto(pos)
  {
    ctx.lineWidth = 2;
    ctx.strokeStyle = 'rgba(0,0,0, 1)';
    ctx.beginPath();
    radianes=Math.degToRad(180-pos*6); // minuto
    x=radiox/1.25*Math.sin(radianes);
    y=radioy/1.25*Math.cos(radianes);
    x=x+xo;
    y=y+yo;
    ctx.moveTo(xo,yo);
    ctx.lineTo(x,y);
    ctx.stroke();
  }

function relojManecillaSegundo(pos)
  {
    ctx.lineWidth = 1;
    ctx.strokeStyle = 'rgba(221,64,4, 1)';
    ctx.beginPath();
    radianes=Math.degToRad(180-pos*6); // segundo
    x=radiox*Math.sin(radianes);
    y=radioy*Math.cos(radianes);
    x=x+xo;
    y=y+yo;
    ctx.moveTo(xo,yo);
    ctx.lineTo(x,y);
    ctx.stroke();
  }

En este punto ya se tienen las funciones mas básicas del reloj, solo falta crear una función que asigne la hora a las manecillas y las dibuje junto a la carcasa a la cual se llamara relojAvanza(). Se utiliza la clase Date() que nos dara la hora, minutos, segundos del sistema con los métodos getSeconds(), getMinutes(), getHours().

function relojAvanza()
  {
    var f=new Date();
    ctx.clearRect(0,0,xmax,ymax);//borra canvas, hacerla transparente o sin contenido gráfico
    relojCarcasa();
    relojManecillaSegundo(f.getSeconds());
    relojManecillaMinuto(f.getMinutes());
    relojManecillaHora(f.getHours());
  }

También se necesitara otra función que se encargue de llamar cada segundo a relojAvanza() que es la que se ha llamado en un punto anterior relojIniciar(). Esta función usa el método setInterval('función()',ms) cada intervalo de un valor en milisegundos ira llamando a 'función()' en este caso 1000 será 1 segundo.

function relojIniciar()
  {
    window.setInterval('relojAvanza()', 1000);
  }

Ya estaría acabado todo el código. Si ahora abrimos el fichero 'reloj.html' con el navegador podremos ver el reloj analógico marcando el tiempo actual.

Las variables en JavaScript se han declarado globales y se ha programado pensando en programación estructurada mediante funciones y no mediante objetos.

VirtualBox compartir carpetas entre Windows anfitrion y Windows invitado

Con VirtualBox vamos a compartir carpetas entre Windows anfitrion y Windows invitado.

En la imagen podemos ver que en el sistema operativo anfitrión hemos creado una carpeta con enlace directo. Esta carpeta será la compartida.

Windows anfitrion:

  1. Pulsamos "Windows + R" y tecleamos "explorer" para abrir "Explorador de archivos"
  2. Creamos carpeta con nombre por ejemplo "cvbox" en la unidad que queramos.
  3. Nos situamos encima de la carpeta, pulsamos con botón derecho de raton y pulsamos la opción "acceso directo".
  4. Nos preguntará si deseamos hacer un "acceso directo al escritorio" diremos que si.

VirtualBox:

  1. Vamos al menú Máquina -> Configuración -> Carpetas compartidas
  2. Agregamos carpeta pinchando en icono carpeta con +
  3. Introducimos Ruta, Nombre Carpeta, seleccionamos Automontar y Hacer permanente

Windows invitado:

  1. Pulsamos "Windows + R" y tecleamos "explorer" para abrir "Explorador de archivos"
  2. Podremos ver como se ha creado una unidad compartida en nuestro caso "cvbox (\\vboxsrv) (E:)"
  3. Si entramos podremos acceder a los archivos compartidos
  4. Para facilitar el acceso a esta unidad creamos un acceso directo al escritorio. Pulsamos con el botón izquierdo del raton en el icono de la unidad compartida y lo arrastramos hasta el escritorio.

VirtualBox compartir carpetas entre Windows anfitrion y Ubuntu invitado.

Vamos a ver la manera de como compartir carpetas entre Windows y Ubuntu cuando utilizamos máquinas virtuales en VirtualBox.

En la imagen podemos ver que en cada sistema operativo anfitrión e invitado hemos creado una carpeta con enlace directo. Esta carpeta es compartida por lo que su contenido será el mismo al entrar con uno de los dos sistemas operativos.

VirtualBox:

  1. Vamos al menú Máquina -> Configuración -> Carpetas compartidas
  2. Agregamos carpeta pinchando en icono carpeta con +
  3. Introducimos Ruta, Nombre Carpeta, seleccionamos Automontar y Hacer permanente

Windows:

  1. Abrimos "Explorador de archivos" con tecla "Windows + X"
  2. Creamos carpeta con nombre por ejemplo "cvbox" en la unidad que queramos.
  3. Nos situamos encima de la carpeta, pulsamos con botón derecho de raton y pulsamos la opción "acceso directo".
  4. Nos preguntará si deseamos hacer un "acceso directo al escritorio" diremos que si.

Ubuntu:

  1. Abrimos ventana del Terminal de sistema.
  2. Vamos al directorio /media donde esta montada la carpeta con nombre "sf_NombreNuestraCarpeta" o "sf_cvbox"
  3. Si intentamos entrar no nos dejara pues el usuario no tiene permisos.
  4. Damos permisos tecleando en el Terminal de sistema "sudo adduser usuario vboxsf", donde usuario es el nombre de usuario de Ubuntu que tengamos.
  5. Reiniciamos el sistema para que tengam efectos los cambios.
  6. Agregamos enlace de carpeta al escritorio para ello abrimos ventana símbolo de sistema.
  7. Dentro del Terminal del sistema tecleamos enlace.
  8. "ln -s /media/sf_cvbox /home/usuario/escritorio", donde sf_cvbox es el nombre de la carpeta compartida que hemos creado y usuario el nombre de usuario que tengamos en la maquina Ubuntu.

Solución a problemas ejecutando RSSOwl en Windows 64bits

RSSOwl se carga con la maquina virtual Java que tenemos en el PATH o JAVAHOME pero si tenemos Java 64 bits no podrá ya que requiere Java 32 bits. Nos aparece una ventana con aviso.

Como seguramente tendremos aplicaciones que queremos ejecutar con Java 64 bits instalaremos la versión Java 32 bits sin desinstalar la que tenemos. Crearemos un acceso directo de RSSOwl en el escritorio. Pulsaremos con el boton derecho del raton encima y en propiedades cambiaremos el contenido de "Destino" por la versión jdk o jre que hayamos instalado (jdk1.8.0_20) y le indicamos la ruta del archivo "jvm.dll". Ponemos lo siguiente: "C:\Program Files (x86)\RSSOwl\RSSOwl.exe" -vm "C:\Program Files (x86)\Java\jdk1.8.0_20\jre\bin\server\jvm.dll"

Lubuntu 14.04 instalar "Guest Additions" en Virtual Box

Si hay algún problema al instalar en Virtual Box las "Guest Additions" bajo Lubuntu podremos solucionarlo de la siguiente manera.

  1. En Virtual Box vamos al menú "Dispositivos" y luego elegimos "Insertar imagen de CD de las Guest Additions."
  2. Abrimos "terminal" de comandos del sistema
  3. Vamos al directorio donde esta el paquete de instalación tecleando "cd /media/USUARIO/VBOXADDITIONS_4.3.16_95972" teniendo en cuenta que USUARIO es el nombre de usuario que tenga nuestra máquina. El directorio VBOXADDITIONS_x.x.xx_xxxxx puede tener una numeración diferente.
  4. Si tenemos problemas al hacer "sudo apt-get install .." teclearemos "sudo dpkg --configure -a"
  5. Instalamos compilador c++ tecleando "sudo apt-get install gcc"
  6. Instalamos paquete make tecleando "sudo apt-get install make"
  7. Instalamos paquete Guest Additions tecleando "sudo sh VBoxLinuxAdditions.run"
  8. Reiniciamos el sistema para que tenga efecto los cambios

Configurar Bluetooth en HP Pavilion para enviar y recibir archivos en Windows 8

Para todos aquellos que tengan el sistema operativo Windows 8 y al intentar enviar un archivo con el teléfono móvil por Bluetooth falla el envío pongo una posible solución. El fallo fue detectado en mi portátil HP Pavilion Touchsmart con Windows 8.1 desconozco si en otras marcas o modelos ocurre lo mismo.

  1. En carpeta C:\Windows\System32 buscamos el archivo fsquirt.exe
  2. Pulsamos botón derecho del ratón sobre el archivo.
  3. Seleccionamos "Crear acceso directo" y nos lo creará en el escritorio.
  4. Cambiamos el nombre del acceso directo por Bluetooth.
  5. Copiamos el acceso directo en carpeta C:\Usuarios\Usuario\AppData\Roaming\Microsoft\Windows\Sendto

Ahora para enviar o recibir un archivo solo tendremos que pulsar en el icono de acceso directo.

Configurar variable de entorno para Java en Windows 7 y 8

Crearemos la variable JAVA_HOME y la agregamos al PATH para que los programas al usar Jdk de Java se puedan ejecutar. Ademas esto hara que cada vez que reiniciemos el sistema no haga falta indicar de nuevo la ruta donde esta el Jdk.

  1. En linea de comandos "CMD" o pulsando tecla "Windows + R" escribimos SYSDM.CPL para abrir ventana "Propiedades del Sistema"
  2. Seleccionamos pestaña "Opciones avanzadas" y pulsamos boton "Variables de entorno"
  3. Se abrira ventana "Variables de entorno". En la zona "Variables del sistema" pulsamos "Nueva..."
  4. Nos pedira de la nueva variable el nombre = JAVA_HOME y valor ponemos = C:\Program Files\Java\jdk1.8.0_05
  5. Finalmente en la misma zona "Variables del sistema" buscamos variable "Path" y pulsamos "Editar..."
  6. Agregamos al principio del valor de la variable la siguiente ruta: %JAVA_HOME%\bin;