martes, 15 de diciembre de 2015

Ejemplo de programación con Allegro: Reloj analógico

Para todos aquellos interesados en la programación gráfica con la librería Allegro en C; les comparto este ejemplo en donde se muestra un reloj analógico. Es un ejemplo sencillo que espero pueda servir de utilidad.

Fig. 1. Reloj en Allegro

Les dejo el código fuente y ejecutable en los siguiente repositorios:

viernes, 11 de diciembre de 2015

Ejemplo de programación con Allegro: Esfera

En esta ocasión quiero compartir con ustedes un ejemplo sencillo de programación gráfica con la librería de Allegro para DevC. Se trata de una esfera. La esfera está formada por círculos de diferente diámetro; al final obtenemos una vista 3d de una esfera simple. Desde luego es algo básico, usando sólo una figura geométrica definida en la librería de Allegro. Espero que les sirva a aquellas personas que están iniciándose en la programación gráfica con Allegro, y para las que no, que se animen a programar en esta área que les podrá llevar a la programación de video juegos.

Fig. 1. Esfera con Allegro

El código fuente y ejecutable se encuentran en los siguientes repositorios:

jueves, 10 de diciembre de 2015

PACMAN en Allegro

Hace algunos años empecé un juego en C con Allegro. Sin embargo no logré terminarlo; pero algunas personas me han preguntado si tengo juegos programados. Realmente la programación de videojuegos es muy interesante, pero no es un área en la que me familiarice bastante. De todas formas comparto con ustedes este juego empezado, quizá pueda darles alguna idea o por qué no, terminarlo.

NOTA: Es indispensable que la librería alleg42.dll se encuentre ubicada junto al archivo ejecutable del juego.

Fig. 1. PACMAN con Allegro

El código fuente y ejecutable se encuentran en los siguientes repositorios:


lunes, 23 de noviembre de 2015

Split inverso en Java

Muchos conocemos la función de Split en Java. Split separa una cadena de texto de acuerdo a un delimitador y pone el resultado de esa separación en un arreglo de elementos.

Es decir, si tenemos una cadena como la siguiente:

String cadena = "uno,dos,tres,cuatro,cinco";

Y utilizamos la función split de la siguiente forma:
String cadena = "uno, dos, tres, cuatro, cinco";
String arreglo[] = cadena.split(",");

La variable arreglo[] contendrá los elementos resultado de la división de la cadena mediante el delimitador ",". Esto significa que el arreglo contendrá lo siguiente:
arreglo[0] = "uno"
arreglo[1] = "dos"
arreglo[2] = "tres"
arreglo[3] = "cuatro"
arreglo[4] = "cinco"

Pero en ocasiones tal vez necesitemos llevar a cabo la acción inversa de split; esto es: dado un arreglo de elementos, obtener un cadena con esos elementos, divididos por un delimitador. Teniendo el arreglo anterior, el split inverso nos devolvería una cadena como la siguiente:
cadena = "uno,dos,tres,cuatro,cinco";

Para hacer esta acción inversa tenemos que usar la librería java.util.Arrays; aquí un ejemplo:
import java.util.Arrays;

public class clsReverseSplit {
    public clsReverseSplit() {
    }
    
    public String reverseSplit(String gArreglo[], String delimiter){
        return Arrays.toString(gArreglo).replace(", ", delimiter).replaceAll("[\\[\\]]", "");
    }
    
    public static void main(String args[]){
        clsReverseSplit objeto = new clsReverseSplit();
        String arreglo[] = {"Uno", "Dos", "Tres", "Cuatro", "Cinco"};
        
        /* Imprimimos los elementos del arreglo */
        System.out.println("Elementos: ");
        for(String elemento:arreglo)
            System.out.println(elemento);
            
        /* Obtenemos los valores del arreglo separados por coma */
        System.out.println("Split inverso (separado por comas): ");
        System.out.println(objeto.reverseSplit(arreglo, ","));
        
        /* Obtenemos los valores del arreglo separados por punto y coma */
        System.out.println("Split inverso (separado por punto y coma): ");
        System.out.println(objeto.reverseSplit(arreglo, ";"));
        
        /* Obtenemos los valores del arreglo separados por tabulador */
        System.out.println("Split inverso (separado por tabulador): ");
        System.out.println(objeto.reverseSplit(arreglo, "\t"));
        
        String ac = "uno,dos";
        String arre[] = ac.split(",");
        for(String elemento:arre)
            System.out.println(elemento);
    }
}

Espero pueda ser de utilidad como lo fue para mí. A continuación comparto el archivo de ejemplo:

jueves, 29 de octubre de 2015

Ordenar lista de Strings en Java

Aquí les dejo un ejemplo sencillo de cómo ordenar una lista de Strings en Java.

Fig. 1. Resultado del ordenamiento en Java

El ejemplo de ordenamiento lo implementé directamente sobre el método principal de una clase. Este es el código:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package ordenarnombres;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Balam-PC
 */
public class OrdenarNombres {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        List<String> nombres = new ArrayList<String>();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int opcion = 0;
        int numeroInserciones = 0;
        
        try {
            do{
                System.out.println("============== MENU ==============\n");
                System.out.println("1) Insertar nombres");
                System.out.println("2) Imprimir nombres");
                System.out.println("3) Ordenar nombres");
                System.out.println("4) Salir\n");
                System.out.println("Inserta la opción (1, 2, 3 ó 4): ");
                opcion = Integer.parseInt(br.readLine());
                
                switch(opcion){
                    case 1:
                        System.out.println("¿Cuántos nombres deseas insertar? ");
                        numeroInserciones = Integer.parseInt(br.readLine());
                        for (int i = 0; i < numeroInserciones; i++) {
                            System.out.println("Nombre [" + (i+1) + "]: ");
                            nombres.add(br.readLine());
                        }
                        break;
                    case 2:
                        System.out.println("Nombres:");
                        for (String str : nombres) {
                            System.out.println(str);
                        }
                        System.out.println("Presione enter para continuar...");
                        br.readLine();
                        break;
                    case 3:
                        Collections.sort(nombres);
                        System.out.println("Arreglo ordenado. Presione enter para continuar...");
                        br.readLine();
                        break;
                }
            }while(opcion != 4);
        } catch (IOException ex) {
            Logger.getLogger(OrdenarNombres.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
 
Les dejo el proyecto; está hecho en NetBeans 7.4:


miércoles, 28 de octubre de 2015

Envío de correos electrónicos con PHP y Gmail

En esta ocasión quiero compartir un ejemplo que preparé para el envío de correos electrónicos mediante PHP. Estoy usando la librería phpmailer. La página web principal solamente contiene los elementos como cajas de textos y un botón para enviar la información del usuario a un archivo que llevará a cabo la conexión con una cuenta de Google para poder enviar el correo electrónico. Por lo tanto, voy a centrarme en explicar el archivo que lleva a cabo la tarea del envío del correo electrónico.

Lo primero que requerimos es tener una cuenta en Gmail. Si no contamos con una cuenta en Gmail, habrá que crearla, ya que este ejemplo funciona específicamente con una cuenta de Gmail.

Ahora tendremos que hacer unos ajustes a nuestra cuenta de Gmail para poder enviar correos electrónicos desde nuestra aplicación de PHP. Para esto entramos a nuestra cuenta y en la esquina, donde se muestra nuestro nombre de usuario, damos clic y elegimos Mi cuenta.

Fig. 1. Acceder a mi cuenta de Gmail

A continuación, debemos buscar la opción Cómo acceder a Google

Fig. 2. Cómo acceder a Google

En la pantalla siguiente, debemos buscar y activar la opción Permitir el acceso de aplicaciones menos seguras.

Fig. 3. Permitir el acceso de aplicaciones menos seguras. 

Con esto termina la configuración necesaria de la cuenta de Gmail para poder enviar correos desde nuestra aplicación en PHP.

NOTA: es posible que la primera vez que usemos la aplicación PHP para envío de mensajes con Gmail, la cuenta se bloquee; esto es normal. Para solucionar el problema, deben loguearse nuevamente en la cuenta de Gmail y les pedirá un modo seguro de autenticación (eligen la opción por mensaje). Después de autenticarse deberían poder enviar mensajes desde PHP a través de su cuenta de Gmail.

En el archivo sendMail.php, dentro de la carpeta php (del proyecto que les comparto hasta abajo), encontramos los siguientes datos de configuración:

$mail->SMTPSecure = "tls";            /* El tipo de seguridad será TLS */
$mail->Host       = "smtp.gmail.com"; /* Este es el host smtp de Gmail */
$mail->Port       = 587;              /* Configuramos el puerto, si es TLS el puerto es 587 */
$mail->Username   = "pruebaelrincondelprogramador@gmail.com";  /* Nombre de usuario de la cuenta Gmail que usaremos para envío de mensajes */
$mail->Password   = "prueba12345";                   /* Contraseña de la cuenta de Gmail anterior */

De estos datos, lo único que modificaremos será la propiedad Username y la propiedad Password; que son simplemente el nombre de usuario y la contraseña de nuestra cuenta de Gmail que usaremos como medio para envío de correos electrónicos mediante nuestra aplicación en PHP. Los datos como SMTPSecure, Host y Port, son exclusivos para cuentas de Gmail, si queremos usar una cuenta de Hotmail u otra, habrá que investigar cuál es el host, la seguridad y el puerto de ese tipo de cuenta en específico.

En las siguientes líneas, tendremos que modificar los datos de la propiedad SetFrom; esta propiedad indica quién es el remitente. La propiedad Subject sirve para definir el asunto del mensaje. La propiedad MsgHTML es el cuerpo del mensaje; podemos utilizar código HTML para definir nuestro mensaje. La propiedad AddAddress sirve para configurar el correo y el nombre al que se le va a enviar el correo electrónico.

$mail->SetFrom($correo, $nombre); /* Configuramos los datos que se mostrarán del remitente (el que escribe el mensaje) */
$mail->Subject    = "El asunto del mensaje"; /* Configuramos el asunto que contendrá el mensaje */
$mail->MsgHTML($nombre." escribió:".$comentarios." - Teléfono: ".$telefono." - Correo: ".$correo); /* Configuramos el contenido del mensaje */
$mail->AddAddress($correo, $nombre); /* Configuramos el correo y el nombre a quien se le va a enviar el mensaje (el destinatario) */

Finalmente les dejo los archivos del proyecto completo. También pueden hacer uso de la cuenta de Gmail que dejo en el ejemplo (sólo no abusen de su utilización ya que podrían bloquearla o marcarla como spam).


También si quieren ver la demostración en línea, ingresen al siguiente link: [DEMO]


martes, 6 de octubre de 2015

Nube de palabras con JavaScript y jQCloud

¿Qué es?

Una nube de palabras o nube de etiquetas es una representación visual de las palabras que conforman un texto, en donde el tamaño es mayor para las palabras que aparecen con más frecuencia (wikipedia).

Fig. 1. Nube de palabras

¿Para qué sirve?

Uno de sus usos principales es la virualización de las etiquetas de un sitio web, de modo que los temas más frecuentes en el sitio se muestren con mayor prominencia. Las etiquetas son palabras clave que suelen estar oredenadas alfabéticamente o, en ocasiones, agrupadas semánticamente. La importancia de una etiqueta se muestra con el tamaño de la fuente y/o color.

¿Qué se necesita para hacer una nube de palabras?

En Internet existen librerías diversas para la creación de una nube de palabras. Es algo bastante sencillo; para este caso voy a usar la librería jQCloud, la cuál podrán descargar desde este link.

Primeramente, debemos agregar la librería JQuery entre las etiquetas <head></head> de nuestra (s) página (s) web. Para esto utilizamos la siguiente línea de código:

        <script src="js/jquery.min.js"></script>

Si no contaran con la librería JQuery en su proyecto, pueden agregar la ruta web para descargarla cada vez que entren a la página web:

A continuación, debemos agregar las librerías de jQCloud; para esto copiamos las siguientes líneas de código dentro de la etiquetas <head></head>:

        <script src="jqcloud2/dist/jqcloud.min.js"></script>
        <link rel="stylesheet" href="jqcloud2/dist/jqcloud.min.css">

Una vez hecho lo anterior, es el momento de insertar las palabras y el div donde se va a visualizar nuestra nube de palabras. Para hacer esto, agregamos el código siguiente entre las etiquetas <body> y </body>:

        <div style="width:90%; height: 70%;" id="demo"></div>    
        <script>
            var words = [
                {text: ".NET", weight: 13},
                {text: "C++", weight: 16.5},
                {text: "Java", weight: 9.4},
                {text: "Ruby", weight: 8},
                {text: "Python", weight: 6.2},
                {text: "PHP", weight: 5},
                {text: "Pascal", weight: 5},
                {text: "Javascript", weight: 5},
                {text: "HTML5", weight: 5},
                {text: "Ensamblador", weight: 5},
                {text: "Lorem", weight: 13},
                {text: "Ipsum", weight: 10.5},
                {text: "Dolor", weight: 9.4},
                {text: "Sit", weight: 8},
                {text: "Amet", weight: 6.2},
                {text: "Consectetur", weight: 5},
                {text: "Adipiscing", weight: 5},
                {text: "Java", weight: 9.4},
                {text: "Ruby", weight: 8},
                {text: "Python", weight: 6.2},
                {text: "PHP", weight: 5},
                {text: "Pascal", weight: 5},
                {text: "Javascript", weight: 5},
                {text: "HTML5", weight: 5},
                {text: "Ensamblador", weight: 5}
              /* ... */
            ];

            $('#demo').jQCloud(words);
        </script>

El resultado es el siguiente:

Fig. 2. Nube de palabras con jQCloud

El código completo de la página web es el siguiente:

<html>
    <head>
        <title>
        </title>
        <script src="js/jquery.min.js"></script>
        <script src="jqcloud2/dist/jqcloud.min.js"></script>
        <link rel="stylesheet" href="jqcloud2/dist/jqcloud.min.css">
    </head>
    <body>
        <div style="width:90%; height: 70%;" id="demo"></div>    
        <script>
            var words = [
                {text: ".NET", weight: 13},
                {text: "C++", weight: 16.5},
                {text: "Java", weight: 9.4},
                {text: "Ruby", weight: 8},
                {text: "Python", weight: 6.2},
                {text: "PHP", weight: 5},
                {text: "Pascal", weight: 5},
                {text: "Javascript", weight: 5},
                {text: "HTML5", weight: 5},
                {text: "Ensamblador", weight: 5},
                {text: "Lorem", weight: 13},
                {text: "Ipsum", weight: 10.5},
                {text: "Dolor", weight: 9.4},
                {text: "Sit", weight: 8},
                {text: "Amet", weight: 6.2},
                {text: "Consectetur", weight: 5},
                {text: "Adipiscing", weight: 5},
                {text: "Java", weight: 9.4},
                {text: "Ruby", weight: 8},
                {text: "Python", weight: 6.2},
                {text: "PHP", weight: 5},
                {text: "Pascal", weight: 5},
                {text: "Javascript", weight: 5},
                {text: "HTML5", weight: 5},
                {text: "Ensamblador", weight: 5}
              /* ... */
            ];

            $('#demo').jQCloud(words);
        </script>
    </body>
</html>

Los archivos de este ejemplo pueden descargarlos desde los siguientes links:

MEGA | OneDrive

Para ver la demostración en línea, ingresen al siguiente link: [DEMO]

miércoles, 29 de julio de 2015

Actualización a Windows 10

El día de hoy 29 de Julio de 2015 ya está disponible la actualización a Windows 10 de manera gratuita. Los pasos para reservar la actualización son los siguientes:

Puedes reservar la actualización gratuita en la aplicación Get Windows 10. Para encontrar la aplicación:

  • Haz clic en el icono pequeño (con la figura de una ventana) de Windows ubicado en el extremo derecho de la barra de tareas para comenzar.
  • Haz clic en "Reservar la actualización gratuita" en la ventana de la aplicación.
  • Escribe tu correo electrónico si deseas una confirmación de esta reserva.
  • Todo está listo. Una vez que reserves, Windows 10 se descargará en cuanto esté disponible. No hay obligaciones y puedes cancelar la reserva en cualquier momento.

Requisitos del sistema

Si deseas actualizar tu equipo o tableta a Windows 10, necesitarás esto.

  • Sistema operativo más reciente: Asegúrate de que estás ejecutando la versión más reciente, como Windows 7 SP1 o Windows 8.1 Update.
    • ¿No sabes qué versión estás ejecutando? Consúltalo y descúbrelo aquí.
    • ¿Necesitas descargar la versión más reciente? Haz clic aquí para descargar Windows 7 SP1 o Windows 8.1 Update.
  • Procesador: Procesador o SoC de 1 gigahercio (GHz) o superior
  • RAM: 1 GB para 32 bits o 2 GB para 64 bits
  • Espacio en el disco duro: Sistema operativo de 16 GB para 32 bits y de 20 GB para 64 bits
  • Tarjeta gráfica: Controlador DirectX 9 o posterior con WDDM 1.0 
  • Pantalla: 1024x600

jueves, 7 de mayo de 2015

Patrón de diseño Singleton en Java

En esta ocasión quiero compartir esta implementación del patrón de diseño Singleton en Java. Veamos primeramente qué es un patrón de diseño:

"El patrón de diseño singleton (instancia única) esta diseñado para restringir la creación de objetos pertenedientes a una clase o el valor de un tipo a un único objeto". Fuente: Wikipedia

Como nos indica la definición anterior; el patrón de diseño singleton sólo permite crear un único objeto. Pero vamos a ver el ejemplo de cómo crear un patrón singleton para que quede claro:

1) Vamos crear la clase Futbol:

package equipofutbol;

/**
 *
 * @author Balam-PC
 */
public class clsFutbol {
    private static clsFutbol instance;
    private String equipo;
    
    private clsFutbol(){
    }
    
    public static clsFutbol getinstance(){
        if(instance == null)
            instance = new clsFutbol();
        return instance;
    }
    
    public void setEquipo(String gEquipo){
        equipo = gEquipo;
    }
    
    public String getEquipo(){
        return equipo;
    }
}

La clase clsFutbol va a permitir crear una instancia; si intentamos crear otro objeto, simplemente se vuelve a llamar a la instancia creada anteriormente.

2) Vamos a crear una clase para implementar la clase clsFutbol:

package equipofutbol;

/**
 *
 * @author Balam-PC
 */
public class EquipoFutbol {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        clsFutbol instancia1 = clsFutbol.getinstance();
        
        instancia1.setEquipo("Uruguay");
        System.out.println("Instancia 1: " + instancia1.getEquipo());
        
        clsFutbol instancia2 = clsFutbol.getinstance();
        System.out.println("Instancia 2: " + instancia2.getEquipo());
        
        clsFutbol instancia3 = clsFutbol.getinstance();
        System.out.println("Instancia 3: " + instancia3.getEquipo());
        
        clsFutbol instancia4 = clsFutbol.getinstance();
        System.out.println("Instancia 4: " + instancia4.getEquipo());
    }
}

Como podemos observar, creamos 4 instancias de la clase clsFutbol; sin embargo, en la primera instancia llenamos la clase con el parámetro Uruguay. Las siguientes instancias que se generen no se tratan de instancias diferentes, son la misma instancia; ejemplo de esto es que si imprimimos la variable donde almacenamos el equipo que configuramos en la primera instancia, este es el mismo para cada "objeto" que creamos posteriormente:

Fig. 1. Salida de ejecución de la clase EquipoFutbol.java


El patrón singleton se usa cuando queremos limitar las instancias de una clase a sólo una. Por ejemplo, cuando deseamos que una clase de conexión a una base de datos se tenga que instanciar una sola vez para evitar crear múltiples conexiones a la base de datos.

El ejemplo lo pueden descargar de los siguientes enlaces (desarrollado en NetBeans 7.4):

martes, 28 de abril de 2015

Acceder a "manager webapp" en Tomcat 7

En este vídeo explico cómo acceder al administrador de aplicaciones (manager webapp) de Tomcat 7. Las líneas que se deben agregar al archivo XML que menciono en el vídeo son las siguientes:

<role rolename="manager-gui"></role>
<user username="miusuario" password="mipassword" roles="manager-gui"></user>

jueves, 16 de abril de 2015

Máquina virtual en VirtualBox no inicia por problema con dll en Windows 8

Hoy 16 de Abril por la mañana reinicié mi computadora porque algunas actualizaciones se instalaron por la noche; al intentar iniciar una máquina virtual que tengo en VirtualBox, me mandaba un mensaje de error como el siguiente:

Figura 1. Mensaje de error 1 al intentar iniciar VM

Figura 2. Mensaje de error 2 al intentar iniciar VM

Después de investigar un poco, encontré en un foro que una actualización (de las que se instalaron anoche) en Windows 8 provocó ese error (todavía no saben si es culpa de oracle o de microsoft); sin embargo esa actualización no deja iniciar la máquina virtual de VirtualBox (ninguna). Para solucionar esto (mientras oracle corrige este asunto), será necesario eliminar la actualización que está causando conflicto con VirtualBox; la actualización a eliminar es: Actualización de seguridad para Microsoft Windows (KB3045999). Sólo tienen que entrar a panel de control>Programas y características>Actualizaciones instaladas y ya dentro, desinstalar la actualización mencionada:

Figura 3. Desinstalar la actualización KB3045999

Finalmente, después de desinstalar la actualización KB3045999 la máquina virtual inicia normalmente:

Figura 4. Máquina virtual iniciada correctamente



martes, 14 de abril de 2015

Instalación de PHP 5.2.6 sobre IIS 5.1 en Windows XP 32 bits

En esta ocasión quiero compartir un vídeo donde explico cómo instalar la versión 5.2.6 de PHP sobre el servidor de Microsoft IIS 5.1 en el sistema operativo Windows XP de 32 bits.

Para la instalación de IIS es necesario tener una copia de Windows XP; si no contaran con una, pueden descargar el iso en el siguiente link (o buscar uno en Google). Nota: Esta imagen ISO no la subí yo, es una que encontré en Internet "googleando".


También es necesario contar con un programa para montar imágenes (en caso de que utilicen una imagen ISO de Windows XP 32 bits):


Finalmente, es necesario tener una versión de PHP (source), la versión con la que trabajé (por compatibilidad) fue la 5.2.6, la pueden descargar del siguiente enlace a donde lo he subido:


Ahora sí, aquí está el vídeo y espero les pueda ser de utilidad. Saludos.

lunes, 6 de abril de 2015

Menú ASP.NET no funciona en Google Chrome

Hace unos días estaba desarrollando un sitio web en Visual Studio y me di cuenta que el menú no se veía correctamente en el explorador Chrome de Google, pero sí en Internet Explorer (qué novedad). Así que me di a la tarea de investigar el por qué del problema y rápidamente encontré una solución  (sacada del blog de Soluciones Informáticas Sierra) que me sirvió y fue fácil de implementar. A continuación se las comparto:

1. En el Explorador de Soluciones hacemos clic con el botón derecho sobre nuestro proyecto y añadimos una carpeta de ASP.NET con el nombre App_Browsers.

Fig. 1. Creación de una carpeta en el Explorador de Soluciones

Fig. 2. Carpeta App_Browsers creada

2. Añadimos, dentro de esta carpeta, un nuevo elemento del tipo Archivo de explorador (.browser) y lo llamamos safari.browser.

Fig. 3. Añadir un nuevo elemento a la carpeta App_Browsers

Fig. 4. Crear el elemento del tipo Archivo de Explorador con el nombre safari.browser

Fig. 5. Elemento safari.browser creado

3. Eliminamos TODO el código que se genera por defecto y pegamos lo siguiente:

<browsers>
<browser refID="safari1plus">
<controlAdapters>
<adapter controlType="System.Web.UI.WebControls.Menu" adapterType="" />
</controlAdapters>
</browser>
</browsers>

Fig. 6. Código del elemento safari.browser

Con estos sencillos pasos deberíamos poder corregir el problema de visualización del menú ASP en Google Chrome. Espero les sirva. Un saludo.




martes, 3 de marzo de 2015

Proyecto contador de pasos para Android

En esta ocasión quiero compartir con ustedes un proyecto que me pareció más que interesante. Este proyecto está desarrollado para la plataforma Android, y yo lo he probado personalmente con la versión 4.1.2, con un Samgung S3 mini y ha funcionado correctamente.
El proyecto contador de pasos o pedometer, fue desarrollado por Levente Bagi y lo compartió con la comunidad a través de GitHub. Pueden descargar este proyecto desde GitHub en el siguiente enlace:


También he subido el proyecto al servidor de MEGA y de OneDrive por si quieren descargarlo; de todas formas no pesa mucho.


Para aquellos que tengan la última versión del ADT (v1.0) será necesaria la conversión; si por alguna razón la conversión resultara errónea aquí les dejo el proyecto ya convertido (sólo para la versión del ADT más nueva v1.0).


Este proyecto para la plataforma Android, cuenta los pasos que damos y mediante algunos cálculos, nos arroja también cuál es el número de millas, pasos por minuto, millas por hora y calorías quemadas que llevamos durante el tiempo que la aplicación se mantiene en ejecución. La licencia es de código abierto así que podemos hacer uso de este proyecto de forma libre. Espero les sirva esta aportación. Saludos.

Fig. 1. Contador de pasos


martes, 24 de febrero de 2015

Redimensionar espacio del disco duro de una máquina virtual en VirtualBox

Cuando creamos una máquina virtual en VirtualBox de Oracle debemos especificar un tamaño de disco inicial para el sistema operativo que vamos a instalar. Sin embargo, muchas veces no calculamos de manera correcta ese tamaño en disco y nos vemos en la necesidad, posteriormente, de requerir más espacio del que configuramos inicialmente.
Como saben, a los que les ha pasado este caso, VirtualBox no tiene un apartado gráfico donde se pueda redimensionar el tamaño del disco de la máquina virtual; pero sí que tiene una herramienta para hacerlo, sólo que habremos de utilizar la línea de comandos.
Los siguientes pasos han sido llevados a cabo en una computadora con Windows 8 de 64 bits.

Paso 1. Abrir la terminal de Windows (abrirlo normal, sin modo de administrador ya que el modo de administrador causa conflictos). Para abrir la terminal de Windows presiona la tecla que tiene la ventana de Windows + R, y en la ventana que aparece escribir CMD y presionar enter.

Figura 1. Abrir la terminal de Windows

Paso 2. Una vez abierta la terminal, debemos navegar hasta el directorio de VirtualBox (es más cómodo que agregar una variable global para que sea reconocida la palabra del programa VBoxManage). Por lo regular VirtualBox se instala en la siguiente dirección: C:\Program Files\Oracle\VirtualBox. Si sabemos la ruta, sólo escribimos lo siguiente en la ventana de comandos:

cd "C:\Program Files\Oracle\VirtualBox"

y al presionar enter ya estaremos en ese directorio.

Figura 2. Abrir la carpeta de instalación de VirtualBox

otra forma sería navegar por las carpetas:

  • cd C:\
  • cd "Program Files"
  • cd Oracle
  • cd VirtualBox
Figura 3. Abrir la carpeta de instalación de VirtualBox

Paso 3. Una vez dentro de la carpeta de instalación de VirtualBox mediante la línea de comandos, debemos escribir lo siguiente:

VBoxManage modifyhd "ubicación.vdi" --resize tamaño

  • ubicación.vdi: Es la ubicación del archivo de la máquina virtual con extensión VDI.
  • tamaño: Es el nuevo tamaño del disco, la capacidad que queremos ponerle; multipliquemos 1024 por el número de GB que requerimos (ya que el tamaño se pone en Megas).

Con esto, la instrucción quedaría así:

VBoxManage modifyhd "C:\Users\Balam-PC\VirtualBox VMs\XP IIE\Mara XP.vdi" --resize 51200

La ubicación que he puesto es donde se encuentra el archivo VDI de mi máquina virtual, y el tamaño que quiero para el disco duro es de 50 GB, porque 50 x 1024 = 51200.
Al presionar enter, nos aparecerá unos números de progreso que indican que ya se ha terminado de redimensionar el disco de la máquina virtual:

Figura 4. Ejecución de la instrucción de redimensión del disco duro

Si no sabes la ubicación del archivo VDI de la máquina virtual, abre VM VirtualBox, selecciona la máquina virtual y presiona el botón de Configuración.

Figura 5. Abrir la configuración de la máquina virtual

Ahora debemos seleccionar la pestaña de almacenamiento y luego, en el área que dice Árbol de almacenamiento, el nombre que tenga extensión VDI. En mi caso, Mara XP.dvi, del lado derecho aparecerá información sobre el archivo, entre ellos, la ubicación, sólo le dan un clic derecho y copiar.

Figura 6. Ruta del archivo de la máquina virtual

Paso 4. Ahora ya debemos tener el nuevo espacio en nuestra máquina virtual, sin embargo, si teníamos, por ejemplo, 40 GB en la máquina virtual, y el nuevo espacio que le asignamos es de 50GB (en mi caso), habrán 10 GB de diferencia, 10 GB que están libres y no han sido asignados al disco todavía. A continuación mostraré cómo redimensionar el disco en Windows XP, y en versiones posteriores a este (Windows Vista, 7, 8).

Redimensionar disco duro en Windows XP

Windows XP no viene con la herramienta para redimensionar el disco duro, por ello, debemos descargar una para esta actividad. El que yo utilicé es Partition Magic 8.0, la pueden descargar del siguiente enlace:


Al abrir la herramienta nos aparecerá una ventana como la siguiente:

Figura 7. Pantalla principal de Partition Magic 8.0

En esta pantalla podemos observar que, como lo mencioné anteriormente, existen 10 GB libres, que no están asignados y por lo tanto, no pueden utilizarse para almacenar información todavía. Para poder utilizarlo, primeramente vamos a dar clic derecho sobre el recuadro con contorno Fucsia y elegir la opción Redimensionar/Desplazar del menú contextual que aparece:

Figura 8. Abrir opción de Redimensión del disco duro

Aparecerá una pantalla donde sólo debemos desplazar con un clic sostenido, el cuadro color Fucsia, hasta el tope (cubriendo la zona gris). De esta manera, asignaremos el espacio que se encuentra libre, al disco principal y ya podremos utilizarlo.

Figura 9. Redimensionar el espacio en el disco duro

Al hacer clic en aceptar, veremos que ahora el cuadro con contorno Fucsia ocupa todo el espacio (incluso el espacio que no se encontraba asignado), ahora sólo basta con presionar el botón color verde para aplicar cambios.

Figura 10. Aplicar cambios para finalizar la redimensión del disco duro

Al aplicar los cambios nos pedirá confirmación, le decimos que sí, y si todo ha salido bien, nos aparecerá un cuadro como el siguiente:

Figura 11. La redimensión fue satisfactoria

Ahora si vamos a propiedades del disco duro podremos ver que ya tenemos nuestro espacio total de 50GB.

Figura 12. Espacio redimensionado del disco duro


Redimensionar disco duro en Windows Vista, 7 y 8

Para esto, vayamos a panel de control y en el cuadro de búsqueda, escribir la palabra "Herramientas" y elegir la opción que dice "Herramientas administrativas".

Figura 13. Panel de control

Al estar en la ventana de Herramientas administrativas, buscamos y abrimos "Administración de equipos".

Figura 14. Herramientas administrativas

Del árbol que aparece al lado izquierdo, navegamos hasta Almacenamiento/Administración de discos.

Figura 15. Administración de equipos

La interfaz es algo parecida a Partition Magic 8.0. Habrá que dar clic derecho sobre la unidad que queremos redimensionar y ocupar todo el espacio que se requiera.

Figura 16. Redimensionar disco duro

Espero les sirva esta información y cualquier duda o comentario es bienvenido. Saludos.









sábado, 21 de febrero de 2015

OneDrive regala 100GB con vigencia de un año

Parece ser que OneDrive está trabajando en la parte promocional de su servicio en la nube. Desde hace algún tiempo empezó a ofrecer 15GB en su servicio sólo con registrarse de forma gratuita, luego incorporó la promoción de 15GB adicionales a tu cuenta si activabas la copia automática de fotos desde su aplicación móvil. Ahora está regalando 100GB adicionales a las cuentas gratuitas de forma sencilla; desde luego, esto no es más que estrategia de mercado para atraer posibles clientes a su servicio en la nube. De todas formas, para los que quieran hacerse de 100GB adicionales en OneDrive aquí les dejo la información; cabe señalar que los 100GB de OneDrive tienen una vigencia de 1 año, es decir, después de 1 año, se nos retirará ese espacio de nuestra cuenta; desde luego tendremos siempre la opción de pagar para conservar ese espacio, pero ya está en cada quien. También es necesario tener una cuenta en Dropbox (la pueden obtener de manera gratuita aquí)

Para obtener los 100 GB de OneDrive sólo basta con ingresar a la siguiente dirección:


Les aparecerá una página como la siguiente:



Solamente tienen que dar clic sobre el botón azul (Verify and get my storage) con lo cual serán re-dirigidos a la página de logueo de su cuenta en hotmail; introducen sus datos para iniciar sesión:


Inmediatamente después de iniciar sesión con tu cuenta de hotmail, te aparecerá una ventana como la siguiente, debes presionar Save to Dropbox.


Lo único que hará OneDrive, además de verificar tu cuenta en Dropbox, será guardar un archivo. Si no has iniciado sesión en tu cuenta de Dropbox, te aparecerá una ventana donde tendrás que introducir tus datos para iniciar sesión; inmediatamente después te aparecerá una ventana como la siguiente donde le darás clic en Guardar.



Con esto, ya veremos una pantalla donde nos indicará que el almacenamiento ha sido aplicado satisfactoriamente, sólo resta presionar el botón Get Started para dirigirnos a nuestra cuenta OneDrive con el espacio re-dimensionado.


El espacio aplicado tiene una vigencia de 1 año a partir del día en que se aplicó el cambio.





miércoles, 18 de febrero de 2015

Conexión con OpenViBE mediante Java

En esta ocasión quiero compartirles un vídeo donde muestro cómo obtener datos de OpenViBE desde Java, utilizando el IDE NetBeans en su versión 7.4 con el JDK 1.7. 


OpenViBE es un software para el tratamiento de señales EEG basado en cajas negras; si queremos extender ciertas funcionalidades de los escenarios creados en OpenViBE, lo podríamos hacer creando nuestras propias cajas; sin embargo, aquí presento un método para poder extender la funcionalidad de OpenViBE utilizando Java. Ya sea que deseemos obtener datos desde Java para graficarlos de otra manera, o para enviarlos por un puerto serial, o realizar diferentes tareas con un lenguaje de programación potente.

Para esto necesitamos hacer uso de la librería VRPN la cual la podemos descargar desde el sitio oficial:


o también la pueden descargar directamente del siguiente link (esta fue la que utilicé en el vídeo):


Necesitamos de igual forma Visual Studio 2010, yo utilicé la versión Ultimate, sin embargo, pueden descargar la versión express de forma gratuita desde la página oficial de Microsoft:


También necesitamos el IDE de NetBeans, lo pueden descargar del siguiente enlace o desde la página oficial:


Necesitamos OpenViBE, la versión con la que hice el ejemplo es la siguiente (o pueden descargarla desde la página oficial):


Necesitamos eclipse, lo pueden descargar de la página oficial o del siguiente link:


También recuerden tener instalado el JDK 1.7, lo pueden descargar de la página oficial o del siguiente link en MEGA, les recomiendo que se descarguen el JDK 1.7 de 32 bits (si lo descargan de la página oficial):


Finalmente les dejo el proyecto que hice en el vídeo para el IDE NetBeans:


así como también el escenario que realicé en OpenViBE:


A continuación el vídeo donde explico cómo compilar e implementar la librería VRPN en Java con el IDE NetBeans: