Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Fireball-CH

#1
Hola, qué tal!

Estoy empezando a diseñar un sistema para la escuela, para que los alumnos podamos registrar nuestras materias desde un sitio web.
No tengo experiencia con el tráfico... En el sitio web se mostrarán las materias disponibles para elegir, pero quisiera que esa información se actualizara cada minuto (con ajax), por ejemplo. O que cada minuto muestre cuántos lugares disponibles hay en cada materia.

Mi pregunta es: ¿es correcto hacerlo de esa manera? Porque cada minuto me conectaría a la base de datos, pediría los espacios disponibles/ocupados y cerraría la conexión.
¿Habrá problema si son más de 1000 visitas diarias?
¿O qué necesito saber para calcular un buen tiempo para estar actualizando esa información?
¿De qué depende todo eso? ¿Del servidor web? ¿Qué características debería tener un servidor para un servicio así?

Espero me puedan orientar un poco, porque de servidores no sé y aún no he llevado esa materia. :-\
Saludos a todos!
#2
Hola, qué tal!

Resulta que cuando conecto mi laptop a una televisión por HDMI, en mi laptop se ve a color pero en la televisión se ve en blanco y negro. Antes conectaba a una televisión y se veía a color, después la conecté a otra televisión y empezó a verse en blanco y negro. Regresé a la televisión en donde se veía a color y resulta que también se ve en blanco y negro! :-\

Probé con otras dos computadoras en la misma televisión y con el mismo cable HDMI y se ve a color... el problema es mi laptop. ¿Qué podría estar pasando? Repito, antes se veía a color.

Mi laptop es una Dell Inspiron N5110 Core i7 con nVIDIA GeForce 525M, se ve en blanco y negro.
Probé con una Dell Inspiron N5110 Core i3 con ATI y se ve a color.
Probé con una Sony VAIO y se ve a color.

En una de las televisiones, cuando conecté la laptop Dell Inspiron N5110 Core i3 con ATI, mostró algo así: 1080 | HD
Y cuando conecté mi laptop mostró algo así: 1080 | 12 bit | HD
#3
Qué tal!

Ando en busca de un disco duro externo de 2TB que funcione con USB 2.0. Lo necesito para respaldar mucha información de unas cuantas computadoras (Windows XP, Windows 7, Linux).
Es una buena opción y así lo conectaría en la computadora donde necesitara mi información, o donde necesitara respaldar más.

Pero supe de la existencia de Transporter (http://www.filetransporter.com) (http://foro.elhacker.net/noticias/transporter_una_alternativa_fisica_al_todopoderoso_dropbox-t382372.0.html?utm_medium=facebook&utm_campaign=noticias+-+foro&utm_source=elhacker.net) y es como un servicio de Dropbox pero totalmente privado y ubicado en mi hogar. Y también puedo acceder a mi información desde cualquier parte del mundo. Pero para respaldar en mi hogar, tendría que ser vía WiFi.

Mi pregunta es: ¿conviene comprar un Transporter o un disco duro externo? Hago esta pregunta porque he pasado mucha información muy pesada de una computadora a otra vía WiFi (estando en red, conectándolas al mismo módem y poniéndolas en el mismo grupo de trabajo) y la verdad la velocidad es muy lenta. :-\ Y no sé si sea la misma velocidad con el Transporter...
#4
Hola, qué tal!

He querido implementar el uso del cifrado en Base64 en Java sin basarme en ningún código, y lo logré (http://foro.elhacker.net/java/pequena_demostracion_de_codificacion_en_base64-t371317.0.html).
Aunque sólo funciona con los caracteres estándares. Cuando ingreso acentos, por ejemplo, no funciona. :-\

Ante este problema busqué un poco. En una de mis revistas @RROBA encontré un ejemplo de ese cifrado pero en C#, y veo que sí funciona. Traté de analizarlo pero no lo comprendo al 100%. En la línea 48 veo que se utiliza el operador de bits << (sí es de bits, ¿cierto?), y quiero pensar que ahí está la clave para que funcione con los acentos. Yo no sé utilizar esos operadores.

Ese operador desplaza bits, ¿no? Mi duda es, ¿para qué se quiere desplazar bits (en ese código)? ¿Y cómo sé que tengo que desplazar y cuántos bits?

Ojalá me puedan ayudar.
Muchas gracias, saludos!

Código de la revista @RROBA:
Base64.cs
// Código fuente obtenido de la revisa @RROBA, número 85 Año VIII, página 16.
using System;

// Clase principal del programa
class Base64 {
 static int Main(String[] args) {
   string cbinario = "";
   string cCadena = "";
   int restocCadena = 0;

   if(args.Length != 1) {
     Console.WriteLine("Sintaxis: Base64 <texto>");
     return 0;
   }
   else {
     Console.WriteLine("Conversión a Base64");
     Console.WriteLine("===================");
     Console.WriteLine("Texto a convertir = {0}", args[0]);

     DectoBin oBin = new DectoBin();

     for(int i = 0; i < args[0].Length; i++) {
       char c = args[0][i];
       cbinario = "";
       cbinario += oBin.convertir((int)c);
       cCadena += cbinario.PadLeft(8, '0');
     }

     restocCadena = cCadena.Length % 6;
     int anadir = 0;

     for(int i = 0; (cCadena.Length + i) % 6 != 0; i++)
       anadir += 1;

     if(restocCadena != 0)
       cCadena = cCadena.PadRight(cCadena.Length + anadir, '0');

     string tabla64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
     string enBase64 = "";
     int posicion = 0;

     for(int i = 1; i <= cCadena.Length / 6; i++) {
       string String6 = cCadena.Substring((posicion), 6);
       posicion = posicion + 6;
       int nDecimal = 0;

       for(int j = 1; j <= 6; j++)
         nDecimal += String6[6 - j] == '1' ? (1 << (j - 1)) : 0;

       enBase64 += tabla64[nDecimal];
     }

     anadir = 0;

     for(int i = 0; (enBase64.Length + i) % 4 != 0; i++)
       anadir += 1;

     enBase64 = (enBase64.Length % 4 != 0) ? enBase64.PadRight(enBase64.Length + anadir, '=') : enBase64;

     Console.WriteLine(" ");
     Console.WriteLine("Cadena codificada --> {0}", enBase64);
     //Console.WriteLine(" ");
     //Console.WriteLine("Pulse una tecla para terminar.");
     //Console.ReadLine();
     return 0;
   }
 }
}

// Clase para convertir a binario.
// Adaptada para devolver el valor
// Posteada por RHC.
class DectoBin {
 public double convertir(int n) {
   double binario = 0;
   long potencia = 0;
   int num = n;

   do {
     potencia++;
     n = n / 2;
   } while(n != 0);

   int Res = 0;
   double pot = 0, base10 = 10;
   n = num;

   do {
     Res = n % 2;

     if(pot < potencia)
       binario += Res * Math.Pow(base10, pot);

     pot++;
     n = n / 2;
   } while(n != 0);

   return binario;
 }
}


Mi código en Java (que no funciona con acentos):
Base64.java
/**
*
* @author Mario A. Aguirre Romaní
*/
public class Base64 {
   /**
    * Codifica en Base64 una cadena pasada como parámetro.
    * @param cadena Cadena a convertir.
    * @return Cadena codificada.
    */
   public static String codificar(String cadena) {
       String regreso = ""; // Contenido (codificado) que será devuelto
       String binario = "";
       // La cadena es convertida a un arreglo de caracteres
       char arreglo[] = cadena.toCharArray();

       // Ciclo que recorre todos los caracteres
       for(int i = 0; i < arreglo.length; i++) {
           int codigo_ascii = ascii(arreglo[i]);
           /*
            * Se convierte a número binario el código ASCII del caracter
            * actual, y después es almacenado en la variable binario.
            */
           binario += Conversor.decimalAbinario(codigo_ascii);
       }

       /*
        * La longitud de la cadena binario es dividida entre 6, debido a que
        * se necesita tomar dígitos de 6 en 6, comenzando de izquierda a
        * derecha.
        */
       int division = binario.length() / 6;
       int diferencia;

       /*
        * Si el resultado de la división multiplicada por 6 es menor que
        * la longitud de la cadena binario, se rellena con ceros a la
        * derecha.
        */
       if(division * 6 < binario.length()) {
           /*
            * A la longitud de la cadena binario se le resta el resultado de
            * la división multiplicada por 6. De ésta manera se sabrá cuántos
            * ceros tendrán que ser agregados hasta alcanzar la longitud de
            * la cadena binario.
            */
           diferencia = binario.length() - division * 6;
           String ceros = "";

           for(int i = 1; i <= (6 - diferencia); i++)
               ceros += "0";

           binario += ceros; // Se agregan los ceros a la derecha
       }

       /*
        * Se crea un arreglo de cadenas en la que cada elemento tendrá los
        * 6 dígitos binarios (tomados de 6 en 6, comenzando de izquierda a
        * derecha). En otras palabras, la cadena binario es partida en grupos
        * de 6 dígitos, y cada grupo es almacenado en cada uno de los elementos
        * del arreglo de cadenas.
        */
       String binarios[] = new String[binario.length() / 6];
       // Variables que marcan el rango (desde dónde hasta dónde) de los 6 dígitos
       int inicio = 0, fin = 6;

       // Ciclo que recorre todos los elementos del arreglo de cadenas binarios
       for(int i = 0; i < binarios.length; i++) {
           // El rango o grupo de 6 dígitos es almacenado en el elemento
           binarios[i] = binario.substring(inicio, fin);
           inicio = fin; // El inicio ahora será el valor del final
           fin += 6; // El final aumentará 6 posiciones
       }

       // Ciclo que recorre todos los elementos del arreglo de cadenas binarios
       for(int i = 0; i < binarios.length; i++) {
           // Se convierte a número decimal el número binario del elemento actual
           int numero_decimal = Conversor.binarioAdecimal(binarios[i]);
           // Se obtiene el caracter de ese número
           char caracter = caracter(numero_decimal);
           regreso += caracter; // Se agrega el caracter a la variable regreso
       }

       /*
        * La regla dice que los caracteres de Base64 deben estar en grupos
        * de 4. Según http://telectronica.blogspot.es/1173731640/
        * La longitud de la cadena regreso es dividida entre 4, debido a que
        * se necesita tomar caracteres en un rango de 4 en 4, comenzando de
        * izquierda a derecha.
        */
       division = regreso.length() / 4;

       /*
        * Si el resultado de la división multiplicada por 4 es menor que
        * la longitud de la cadena regreso, se agregan al final de la
        * cadena signos igual (=).
        */
       if(division * 4 < regreso.length()) {
           /*
            * A la longitud de la cadena regreso se le resta el resultado de
            * la división multiplicada por 4. De ésta manera se sabrá cuántos
            * signos igual (=) tendrán que ser agregados hasta alcanzar la
            * longitud de la cadena regreso.
            */
           diferencia = regreso.length() - division * 4;
           String signos_igual = "";

           for(int i = 1; i <= (4 - diferencia); i++)
               signos_igual += "=";

           regreso += signos_igual; // Se agregan los signos a la derecha
       }

       return regreso; // Se regresa el resultado ya codificado
   }

   /**
    * Devuelve el código ASCII de un caracter estándar pasado como parámetro.
    * @param caracter Caracter estándar del cual se desea obtener su código ASCII.
    * @return El código ASCII del caracter estándar.
    */
   private static int ascii(char caracter) {
       int codigo_ascii = -1;

       // Los códigos ASCII van desde 0 hasta 127, según http://www.ascii.cl/es/
       for(int i = 0; i <= 127; i++) {
           if(caracter == (char)i) {
               codigo_ascii = i;
               break;
           }
       }

       return codigo_ascii;
   }

   /**
    * Devuelve el caracter que se encuentra en la posición que es pasada
    * como parámetro.
    * @param numero_decimal Posición de la cual se desea obtener su caracter.
    * @return El caracter que se encuentra en esa posición.
    */
   private static char caracter(int posicion) {
       String cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
       char caracter = '\0';

       // Ciclo que recorre todos los caracteres de la cadena
       for(int i = 0; i < cadena.length(); i++) {
           // Si el ciclo actual coincide con la posición pasa como parámetro...
           if(i == posicion) {
               // El caracter del ciclo actual es almacenado en la variable caracter
               caracter = cadena.charAt(i);
               break; // Termina el ciclo
           }
       }

       return caracter;
   }
}


Conversor.java
/**
*
* @author Mario A. Aguirre Romaní
*/
public class Conversor {
   /**
    * Convierte un número en sistema decimal a sistema binario.
    * @param numero_decimal Número en sistema decimal a convertir.
    * @return Número convertido a sistema binario.
    */
   public static String decimalAbinario(int numero_decimal) {
       String regreso = "";
       //int resultado = Integer.parseInt(numero_decimal);

       // Mientras el número decimal sea mayor que 1, seguirá dividiéndose
       while(numero_decimal > 1) {
           // Si el módulo es 0, el número es múltiplo de 2
           if((numero_decimal % 2) == 0) {
               numero_decimal = numero_decimal / 2;
               regreso += "0"; // Se agrega un 0 a la cadena
           }
           // Si el módulo no es 0, al número se le resta 1 y se divide entre 2
           else {
               numero_decimal = (numero_decimal - 1) / 2;
               regreso += "1"; // Se agrega un 1 a la cadena
           }
       }

       // Como al final quedó el número 1, se agrega un 1 a la cadena
       regreso += "1";

       /*
        * Si la cantidad de dígitos es menor que 8, se agregarán ceros al
        * final de la cadena hasta tener los 8 dígitos. Más adelante se
        * invertirá la cadena, así los ceros habrán sido agregados a la
        * izquierda y no a la derecha.
        */
       if(regreso.length() < 8) {
           String ceros = "";

           for(int i = 1; i <= (8 - regreso.length()); i++)
               ceros += "0";

           regreso += ceros;
       }

       return invertirCadena(regreso);
   }

   public static int binarioAdecimal(String numero_binario) {
       String invertida = invertirCadena(numero_binario);
       int suma = 0;
       int exponente = 0;

       // Un ciclo que recorre todos los dígitos del número binario
       for(int i = 0; i < invertida.length(); i++) {
           /*
            * El caracter de la posición i es convertido a cadena, luego a
            * entero y al último se almacena en la variable numero.
            */
           int numero = Integer.parseInt(String.valueOf(invertida.charAt(i)));
           /*
            * El número es multiplicado por 2, que está elevado a exponente,
            * y el resultado se le suma al contenido de la variable suma.
            */
           suma += numero * Math.pow(2, exponente);
           exponente++; // Se incrementa en 1 el exponente
       }

       return suma; // La suma es el número convertido a sistema decimal
   }

   /**
    * Invierte una cadena.
    * @param cadena Cadena a invertir.
    * @return Cadena invertida.
    */
   private static String invertirCadena(String cadena) {
       // Se crea un arreglo de caracteres de la misma longitud que la cadena
       char arreglo[] = new char[cadena.length()];
       int indice = 0;

       // Ciclo que recorre desde la última posición hasta la primera
       for(int i = cadena.length() - 1; i >= 0; i--) {
           arreglo[indice] = cadena.charAt(i);
           indice++; // Se incrementa en 1 el índice
       }

       // El arreglo de caracteres es convertido a cadena y después devuelto
       return String.valueOf(arreglo);
   }
}
#5
Hola, qué tal!

Quería compartir con uds. mi código fuente para cifrar texto (caracteres estándares) en Base64.
Para ver qué opinan! Hablando en cuestión de estética o profesionalismo, ¿está bien escrito el código fuente?

Aún me falta crear un método para hacer la decodificación.

El código fuente lo pueden descargar aquí: http://bit.ly/U7EiXN

[youtube=425,350]http://www.youtube.com/watch?v=gecMI04pgF0[/youtube]

URL del vídeo: http://bit.ly/RTdPho

Espero consejos y sugerencias, gracias. Saludos!

Main.java
// Necesarios para que el usuario pueda ingresar datos
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

/**
*
* @author Mario A. Aguirre Romaní
*/
public class Main {
    public static void main(String[] args) {
        if(args.length > 0) { // Si fue llamado con argumentos...
            System.out.println("Texto a cifrar: " + args[0]);
            System.out.println("Texto cifrado:");
            System.out.println(Base64.codificar(args[0]));
        }
        else { // Si no fue llamado con argumentos, se pide el texto...
            // Para los datos ingresados por el usuario
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

            try {
                System.out.print("Texto a cifrar: ");
                String entrada = in.readLine();
                System.out.println("Texto cifrado:");
                System.out.println(Base64.codificar(entrada));
            }
            catch(IOException e) {
                System.err.println(e.getMessage());
                System.err.print("\007");
                System.err.flush();
                System.exit(1);
            }
        }
    }
}


Conversor.java
/**
*
* @author Mario A. Aguirre Romaní
*/
public class Conversor {
    /**
     * Convierte un número en sistema decimal a sistema binario.
     * @param numero_decimal Número en sistema decimal a convertir.
     * @return Número convertido a sistema binario.
     */
    public static String decimalAbinario(int numero_decimal) {
        String regreso = "";
        //int resultado = Integer.parseInt(numero_decimal);

        // Mientras el número decimal sea mayor que 1, seguirá dividiéndose
        while(numero_decimal > 1) {
            // Si el módulo es 0, el número es múltiplo de 2
            if((numero_decimal % 2) == 0) {
                numero_decimal = numero_decimal / 2;
                regreso += "0"; // Se agrega un 0 a la cadena
            }
            // Si el módulo no es 0, al número se le resta 1 y se divide entre 2
            else {
                numero_decimal = (numero_decimal - 1) / 2;
                regreso += "1"; // Se agrega un 1 a la cadena
            }
        }

        // Como al final quedó el número 1, se agrega un 1 a la cadena
        regreso += "1";

        /*
         * Si la cantidad de dígitos es menor que 8, se agregarán ceros al
         * final de la cadena hasta tener los 8 dígitos. Más adelante se
         * invertirá la cadena, así los ceros habrán sido agregados a la
         * izquierda y no a la derecha.
         */
        if(regreso.length() < 8) {
            String ceros = "";

            for(int i = 1; i <= (8 - regreso.length()); i++)
                ceros += "0";

            regreso += ceros;
        }

        return invertirCadena(regreso);
    }

    public static int binarioAdecimal(String numero_binario) {
        String invertida = invertirCadena(numero_binario);
        int suma = 0;
        int exponente = 0;

        // Un ciclo que recorre todos los dígitos del número binario
        for(int i = 0; i < invertida.length(); i++) {
            /*
             * El caracter de la posición i es convertido a cadena, luego a
             * entero y al último se almacena en la variable numero.
             */
            int numero = Integer.parseInt(String.valueOf(invertida.charAt(i)));
            /*
             * El número es multiplicado por 2, que está elevado a exponente,
             * y el resultado se le suma al contenido de la variable suma.
             */
            suma += numero * Math.pow(2, exponente);
            exponente++; // Se incrementa en 1 el exponente
        }

        return suma; // La suma es el número convertido a sistema decimal
    }

    /**
     * Invierte una cadena.
     * @param cadena Cadena a invertir.
     * @return Cadena invertida.
     */
    private static String invertirCadena(String cadena) {
        // Se crea un arreglo de caracteres de la misma longitud que la cadena
        char arreglo[] = new char[cadena.length()];
        int indice = 0;

        // Ciclo que recorre desde la última posición hasta la primera
        for(int i = cadena.length() - 1; i >= 0; i--) {
            arreglo[indice] = cadena.charAt(i);
            indice++; // Se incrementa en 1 el índice
        }

        // El arreglo de caracteres es convertido a cadena y después devuelto
        return String.valueOf(arreglo);
    }
}


Base64.java
/**
*
* @author Mario A. Aguirre Romaní
*/
public class Base64 {
    /**
     * Codifica en Base64 una cadena pasada como parámetro.
     * @param cadena Cadena a convertir.
     * @return Cadena codificada.
     */
    public static String codificar(String cadena) {
        String regreso = ""; // Contenido (codificado) que será devuelto
        String binario = "";
        // La cadena es convertida a un arreglo de caracteres
        char arreglo[] = cadena.toCharArray();

        // Ciclo que recorre todos los caracteres
        for(int i = 0; i < arreglo.length; i++) {
            int codigo_ascii = ascii(arreglo[i]);
            /*
             * Se convierte a número binario el código ASCII del caracter
             * actual, y después es almacenado en la variable binario.
             */
            binario += Conversor.decimalAbinario(codigo_ascii);
        }

        /*
         * La longitud de la cadena binario es dividida entre 6, debido a que
         * se necesita tomar dígitos de 6 en 6, comenzando de izquierda a
         * derecha.
         */
        int division = binario.length() / 6;
        int diferencia;

        /*
         * Si el resultado de la división multiplicada por 6 es menor que
         * la longitud de la cadena binario, se rellena con ceros a la
         * derecha.
         */
        if(division * 6 < binario.length()) {
            /*
             * A la longitud de la cadena binario se le resta el resultado de
             * la división multiplicada por 6. De ésta manera se sabrá cuántos
             * ceros tendrán que ser agregados hasta alcanzar la longitud de
             * la cadena binario.
             */
            diferencia = binario.length() - division * 6;
            String ceros = "";

            for(int i = 1; i <= (6 - diferencia); i++)
                ceros += "0";

            binario += ceros; // Se agregan los ceros a la derecha
        }

        /*
         * Se crea un arreglo de cadenas en la que cada elemento tendrá los
         * 6 dígitos binarios (tomados de 6 en 6, comenzando de izquierda a
         * derecha). En otras palabras, la cadena binario es partida en grupos
         * de 6 dígitos, y cada grupo es almacenado en cada uno de los elementos
         * del arreglo de cadenas.
         */
        String binarios[] = new String[binario.length() / 6];
        // Variables que marcan el rango (desde dónde hasta dónde) de los 6 dígitos
        int inicio = 0, fin = 6;

        // Ciclo que recorre todos los elementos del arreglo de cadenas binarios
        for(int i = 0; i < binarios.length; i++) {
            // El rango o grupo de 6 dígitos es almacenado en el elemento
            binarios[i] = binario.substring(inicio, fin);
            inicio = fin; // El inicio ahora será el valor del final
            fin += 6; // El final aumentará 6 posiciones
        }

        // Ciclo que recorre todos los elementos del arreglo de cadenas binarios
        for(int i = 0; i < binarios.length; i++) {
            // Se convierte a número decimal el número binario del elemento actual
            int numero_decimal = Conversor.binarioAdecimal(binarios[i]);
            // Se obtiene el caracter de ese número
            char caracter = caracter(numero_decimal);
            regreso += caracter; // Se agrega el caracter a la variable regreso
        }

        /*
         * La regla dice que los caracteres de Base64 deben estar en grupos
         * de 4. Según http://telectronica.blogspot.es/1173731640/
         * La longitud de la cadena regreso es dividida entre 4, debido a que
         * se necesita tomar caracteres en un rango de 4 en 4, comenzando de
         * izquierda a derecha.
         */
        division = regreso.length() / 4;

        /*
         * Si el resultado de la división multiplicada por 4 es menor que
         * la longitud de la cadena regreso, se agregan al final de la
         * cadena signos igual (=).
         */
        if(division * 4 < regreso.length()) {
            /*
             * A la longitud de la cadena regreso se le resta el resultado de
             * la división multiplicada por 4. De ésta manera se sabrá cuántos
             * signos igual (=) tendrán que ser agregados hasta alcanzar la
             * longitud de la cadena regreso.
             */
            diferencia = regreso.length() - division * 4;
            String signos_igual = "";

            for(int i = 1; i <= (4 - diferencia); i++)
                signos_igual += "=";

            regreso += signos_igual; // Se agregan los signos a la derecha
        }

        return regreso; // Se regresa el resultado ya codificado
    }

    /**
     * Devuelve el código ASCII de un caracter estándar pasado como parámetro.
     * @param caracter Caracter estándar del cual se desea obtener su código ASCII.
     * @return El código ASCII del caracter estándar.
     */
    private static int ascii(char caracter) {
        int codigo_ascii = -1;

        // Los códigos ASCII van desde 0 hasta 127, según http://www.ascii.cl/es/
        for(int i = 0; i <= 127; i++) {
            if(caracter == (char)i) {
                codigo_ascii = i;
                break;
            }
        }

        return codigo_ascii;
    }

    /**
     * Devuelve el caracter que se encuentra en la posición que es pasada
     * como parámetro.
     * @param numero_decimal Posición de la cual se desea obtener su caracter.
     * @return El caracter que se encuentra en esa posición.
     */
    private static char caracter(int posicion) {
        String cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        char caracter = '\0';

        // Ciclo que recorre todos los caracteres de la cadena
        for(int i = 0; i < cadena.length(); i++) {
            // Si el ciclo actual coincide con la posición pasa como parámetro...
            if(i == posicion) {
                // El caracter del ciclo actual es almacenado en la variable caracter
                caracter = cadena.charAt(i);
                break; // Termina el ciclo
            }
        }

        return caracter;
    }
}
#6
Hola, qué tal!

Tengo la duda de cómo se crea una WebApp de red social. Investigué sobre la programación para iPhone y Android, y entendí bien el proceso para crear una aplicación que interactúe con el SO... pero por ejemplo, ¿cómo se hace una aplicación para Facebook? Ya que ésta interactúa con su sitio web.

Lo que en realidad quiero hacer es:
    1.- Crear un sitio web de red social con PHP y MySQL.
    2.- Crear una interfaz web para los dispositivos móviles (para cuando entren desde los navegadores de sus celulares).
    3.- Crear una aplicación de mi sitio web para iPhone y Android.

¿Pero cómo puedo crear la aplicación para mi sitio web?

Ojalá me hayan entendido jeje.. Espero que me puedan orientar un poco, gracias!
Saludos.

Como no supe bien dónde ubicar el tema, también lo publiqué en Dispositivos Móviles (PDA's, Smartphones).
http://foro.elhacker.net/dispositivos_moviles_pdas_smartphones/iquestcomo_se_crea_una_webapp_de_tipo_red_social_para_iphone_y_android-t362887.0.html
#7
Hola, qué tal!

Tengo la duda de cómo se crea una WebApp de red social. Investigué sobre la programación para iPhone y Android, y entendí bien el proceso para crear una aplicación que interactúe con el SO... pero por ejemplo, ¿cómo se hace una aplicación para Facebook? Ya que ésta interactúa con su sitio web.

Lo que en realidad quiero hacer es:
    1.- Crear un sitio web de red social con PHP y MySQL.
    2.- Crear una interfaz web para los dispositivos móviles (para cuando entren desde los navegadores de sus celulares).
    3.- Crear una aplicación de mi sitio web para iPhone y Android.

¿Pero cómo puedo crear la aplicación para mi sitio web?

Ojalá me hayan entendido jeje.. Espero que me puedan orientar un poco, gracias!
Saludos.
#8
Hola, quisiera saber cómo puedo localizar ciertas línea de texto. Es decir, en un archivo llamado conf.txt tengo lo siguiente:

MySQL Host : host
MySQL User : usuario
MySQL Password : clave

Mi pregunta es: ¿cómo puedo obtener el valor de MySQL Host (que es host), MySQL User (que es usuario) y MySQL Password (que es clave)?

Intenté con la función strstr, pero me regresa todo el contenido a partir de lo que busco.
#9
Qué tal.

Quisiera saber qué opinan de un sitio web que estoy haciendo que intenta simular una mini versión de Linux en consola.
Utiliza MySQL 4.0, variables de sesión y una cookie. También usa plantillas; hasta ahora llevo 2: consola.css y openSUSE.css.

Llevo 10 comandos: clear, logout, ls, mkdir, passwd, rm, rmdir, useradd, vi y wget.

Llevo como 4 días en esto, pero no le he metido mucho tiempo.

No se mucho de Linux ni de PHP! :laugh:

http://www.mediafire.com/?jzoitttfwyb  -  247.79 KB :P

Las instrucciones están en el archivo Readme.txt.

Puede que el código no esté muy bien comentado! Jaja..
Y que el sitio no esté bien organizado, pero es que fui agregando las cosas conforme
se me iban ocurriendo. No planeé antes.

Esta idea empezó porque quería hacer una mini versión de Linux online y sin saber (estaba desconcentradón :P) va tomando la función de una shell (como las que hay en internet: shells en PHP para manipular el sistema).

Bueno, por el momento es todo :D

¡Saludos!
#10
Hola, gente.

Leí que las clases en la versión 5 de PHP están mejoradas (o los objetos). Bueno, quise hacer una sección de Login usando clases pero tengo un problema... no se cómo regresar valores.

Mis archivos son:
  * index.html  -  Ahí está el formulario donde pide el nombre de usuario y la clave.
  * index.php  -   Esta página recibe los datos del formulario para comprobar si los
                         datos son correctos y redireccionar a la página para usuarios
                         registrados.
  * autoload.php  -  Tiene la función __autoload($clase) para incluir la clase necesaria.
  * Login.php  -   Esta página tiene la clase Login que se encarga de comprobar si existe el usuario, si existe regresa como valor el nombre de usuario de la base de datos, en caso contrario regresa la frase "Usuario inexistente".

Bien, el código de la página index.php es el siguiente:

<?php
require("../includes/database.php"); // Con esto no tengo problema
require("classes/autoload.php");

$username $_POST['username'];
$lowerUser strtolower($username);
$password $_POST['password'];
$login = new Login($lowerUser$password);

if(
$login != "Usuario inexistente") {
  
$_SESSION['logged'] = $login;
  echo 
"<p align=\"center\">Accesando...</p>\n";
  echo 
"<meta http-equiv=\"refresh\" content=\"2;URL=controlPanel.php\" />\n";
}
else
  echo 
"<p align=\"center\">El nombre de usuario y/o la contrase&ntilde;a no coincide.</p>\n<p align=\"center\"><a href=\"index.html\" target=\"_self\">Click aqu&iacute; para regresar.</a></p>\n";

mysql_close($connection);
?>



El de la clase Login.php:

<?php
class Login {

  function 
Login($usuario$clave) {
    
$usuarioExiste $this->comprobarUsuario($usuario$clave);
    if(
$usuarioExiste != "")
      return 
$usuarioExiste;
    else
      return 
"Usuario inexistente";
  }

  function 
comprobarUsuario($usuario$clave) {
    
$sql "SELECT Usuario,Clave FROM Registro WHERE UsuarioMin = '" $usuario "' AND Clave = '" $clave "'";
    
$result = @mysql_query($sql)
      or die(
"<p align=\"center\"><strong>Ocurri&oacute; un error con la consulta.</strong></p>\n");

    while(
$row mysql_fetch_array($result)) {
      
$rowUser $row['Usuario'];
      
$rowPassword $row['Clave'];
    }

    if(
$clave == $rowPassword)
      return 
$rowUser;
    else
      return 
"";
  }

}
?>



Bien, mi problema es de que cuando creo una instancia de la clase Login, no me regresa los valores como yo esperaba, siempre me regresa la frase "Object id #1". Me refiero a esta parte:

$login = new Login($lowerUser, $password);


Es decir, cuando llega a la parte de if($login != "Usuario inexistente") { (en index.php), la ejecuta porque no lleva la frase "Usuario inexistente"... lo que provoca que se inicie sesión escribiendo lo que sea en el formulario.

¿Qué puedo hacer?
#11
Hola, ¿cómo puedo hacer algo así: http://www.merida360.com/deportes/parkour/salto02.html ? :D
En el sitio (http://www.merida360.com/deportes/parkour/parkour01.html) dice que son imágenes interactivas, pero yo veo que es extensión .mov *-)
#12
Hola, qué tal.
He comprado DVDs Sony de 4.7 GB pero Nero 7 Ultra Edition me los detecta como 4.5 GB, ¿por qué? Los quiero para respaldar...

Ya había respaldado con Nero 7 Ultra Edition y con DVDs Samsung Pleomax de 4.7 GB y sí me los detectaba de 4.7 GB.

Los DVDs que utilizo (Sony y Samsung Pleomax) son -R.
#13
PHP / Dudas con las funciones de sesión
19 Diciembre 2007, 04:06 AM
Hola, qué tal.

He creado sitios donde se registran usuarios y al momento de ser registrados se crean sesiones para que puedan acceder a las zonas privadas.

Para crearlas lo hacía así:

    session_start();
    $_SESSION['username'] = $username;

    $username tiene el valor que puso el usuario en el formulario.

Y para destruírlas lo hacía así (logoff.php):

    session_start();
    unset($_SESSION['username']);
    session_destroy();

Hace poco vi unos ejemplos y creaban las sesiones así:

    session_register($username);
    session_start();

    Mostraban el valor así:
        <? echo $_SESSION[username]; ?>

    Eliminaban las sesiones así:
         session_unregister("username");

Entonces tengo duda, ¿cómo es lo correcto? (no me da errores de ninguna forma)
Utilizo la versión 5.0.0 de PHP.
#14
Multimedia / Camtasia Studio 5
17 Diciembre 2007, 20:19 PM
Hola.

He estado grabando con Camtasia Studio 5 pero tengo un problema, al momento de grabar el cursor se pone muy lento, ¿por qué? ¿cómo puedo hacerlo rápido o a la velocidad que es?

Saludos.
#15
Diseño Gráfico / ¿Cómo hacer un Video Player?
25 Noviembre 2007, 16:02 PM
Hola!
¿Cómo puedo hacer un Video Player en Flash Professional 8 para un sitio web?
Lo que quiero es que los usuarios puedan subir videos con extensión .avi, .wmv, .3gp, etc. y que mi Video Player los pueda reproducir.
Mi sitio web está hecho con PHP y MySQL.
Espero que puedan ayudarme. Gracias.
#16
Hola!

Bueno, quiero quemar un juego de PlayStation 2, es un DVD, ¿con cuál programa lo puedo hacer? ¿Qué programa utilizaría si fuera un CD?
Otra cosa, ¿en qué DVD lo quemo? es decir, ¿cuál es ese tipo de DVD?
Mi PlayStation 2 es original y no lee copias...

Espero que puedan ayudarme, saludos!
#17
Qué tal!

Bueno, quisiera saber cómo crear un messenger.
En Visual Basic creo que se usa algo de socket control (algo así), ¿no?
Bueno, de eso yo investigo.

Quisiera saber cómo funcionan los messengers, es decir, el sitio web donde se registran ya lo tengo... ¿cómo hago para que mi programa en Visual Basic compruebe los datos que introdujo el usuario con los de la base de datos?
(¿cómo logro conectar a la base de datos desde la computadora del usuario que descargó mi messenger?)
El sitio web está hecho con PHP y MySQL.

Okay, eso es todo. Espero que puedan ayudarme, saludos!
#18
Hola.

Bueno, me gustaría saber cómo obtener el ID de una dirección web de Youtube, es decir, el usuario escribe: "http://www.youtube.com/watch?v=IIe-P47dyAQ" en un campo de texto (<input type="text">)... cómo podría saber el ID (IIe-P47dyAQ)?

Y de nuevo, cómo podría saber el ID si el usuario escribe esto: "http://www.youtube.com/watch?v=j9WkaZibfFI&mode=related&search=" ?

Bueno, espero que puedan ayudarme. Gracias.
#19
PHP / ¿Cómo funciona keepvid.com?
8 Octubre 2007, 01:27 AM
Hola.
He estado tratando de hacer un sitio web que pueda descargar los videos de Youtube... hasta ahora, sólo he encontrado 1 ejemplo.
Se trata de que utiliza la función curl_init()... no pude probar porque tengo un error con esa función (no la soporta mi servidor), y no he encontrado un hosting gratuito con esa función habilitada. Pero bueno, ese ejemplo no me importa en este momento.

Me fijé en el sitio http://keepvid.com. Veo que cuando pongo el cursor sobre el link que dice ">> Download Link <<", veo que siempre es diferente la dirección web (no me refiero a que cambia por el ID del video).

Algún link empieza así:
http://ash-v141.ash.youtube.com/get_video?video_id=Id_del_video

Otro así:
http://chi-v250.chi.youtube.com/get_video?video_id=Id_del_video

Quisiera saber cómo es que keepvid sabe qué dirección web utilizar para cada video?
Espero que puedan ayudarme. Gracias.
#20
PHP / Descargas de archivos
11 Agosto 2007, 08:49 AM
Hola!

Tengo una duda...
Tengo 1 archivo llamado video.3gp, ¿cómo puedo hacer para que cuando el usuario haga click en el link Descargar se abra directamente la ventanita de descarga (donde escribe el nombre del archivo como lo va a guardar)?

Y cómo puedo hacer eso con imágenes?
Es decir, si pongo:
  <a href="imagen.gif" target="_self">Haz click aquí para descargar la imagen</a>
no se va a descargar la imagen, se va a abrir en el explorador... ¿cómo puedo hacer para que se abra la ventana de descarga y guarde la imagen?

Espero que me haya explicado.
#21
PHP / Cómo mostrar resultados en columnas
27 Julio 2007, 03:29 AM
Hola a todos!
Tengo una duda:
Tengo 4 usuarios registrados en una base de datos y quiero mostrar sus nombres en una tabla que tiene 1 fila y 4 columnas (1 nombre de usuario en cada columna), cómo puedo hacer eso?

Si yo hiciera esto:

<?php
$sql = "SELECT Usuario FROM Registro";
$result = @mysql_query($sql);
?>
<table width="85%" border="0">
<?php
while($row = mysql_fetch_array($result))
{
  $usuario = $row['Usuario'];
?>
  <tr>
    <td><?php echo $usuario; ?></td>
    <td><?php echo $usuario; ?></td>
    <td><?php echo $usuario; ?></td>
    <td><?php echo $usuario; ?></td>
  </tr>
<?php
}
?>
</table>

me mostraría el mismo nombre de usuario en las 4 columnas, verdad?

Bueno, espero que me haya explicado y puedan ayudarme. Gracias.
#22
PHP / Necesito ideas para hacer algo
28 Junio 2007, 06:49 AM
Qué tal!

Quiero hacer un sitio en el que usuarios podrán enviar reportes...
Habrá un administrador (en cargado de un departamento, de varios que hay) encargado de responder a los usuarios.

Bueno, el sitio ya lo acabé. Pero ahora quiero modificarlo. Quiero hacer lo siguiente:

  Cuando el administrador no responda después de 3 días, quiero que se le envíe un correo electrónico al mero jefe de los departamentos.

¿Cómo puedo hacer eso?

Espero que me haya explicado! :)
#23
PHP / MySQL: No puedo borrar usuarios
26 Junio 2007, 04:42 AM
Hola
Bueno, tengo un problema que practicamente me está matando jeje... no puedo borrar a los usuarios que creo en MySQL.

Los creo así:
  GRANT ALL PRIVILEGES ON nombreDB.* TO 'nombreUsuario'@'localhost' IDENTIFIED BY 'claveUsuario';

y he tratado de borrarlos así:
  REVOKE ALL ON *.* FROM nombreUsuario;

o así:
  REVOKE ALL ON *.* FROM 'nombreUsuario';

pero me aparece lo sig.:
  ERROR 1141: There is no such grant defined for user 'nombreUsuario' on host '%'

entonces intento borrarlos así:
  REVOKE ALL ON *.* FROM 'nombreUsuario'@'localhost';

o así:
  REVOKE ALL ON *.* FROM nombreUsuario@localhost;

y me aparece:
  Query OK, 0 rows affected (0.00 sec)

y el usuario sigue existiendo!

La base de datos que le asigno al usuario que creo sí existe.
Los intento borrar usando la cuenta root.

Cuando instalé MySQL hice lo siguiente:
C:\> mysqladmin -u root password miClave
mysql> DELETE FROM mysql.user WHERE user='';
mysql> FLUSH PRIVILEGES;

Bueno, espero que puedan ayudarme, gracias.
#24
PHP / Problema con session_destroy()
23 Junio 2007, 22:59 PM
Hola, tengo un problema con la función session_destroy().
Me aparece la siguiente alerta:

Warning: session_destroy(): Trying to destroy uninitialized session in C:\Archivos de programa\Apache Group\Apache2\htdocs\miSitio\logoff.php on line 3

mi archivo se llama logoff.php y contiene lo sig.:

<?php
unset($_SESSION['user']);
session_destroy();
header("Location: index.html");
?>

¿Qué está mal? Lo único que encontré fue poner una arroba (@) en session_destroy(); para que no aparezca esa alerta.
#25
PHP / Mostrar texto de una base de datos
11 Mayo 2007, 06:55 AM
Qué tal!

Tengo una duda, ¿cómo puedo mostrar texto introducido por el usuario respetando su ENTERs y sin usar la etiqueta <textarea>?

Porque no me funciona, cuando recupero los datos y no lo pongo en <textarea>, todo aparece en una sola línea.
#26
PHP / Cómo obtener ID en PHP
1 Mayo 2007, 22:21 PM
Hola a todos!

He visto en hi5 y en IMVU que cuando quieren ver el perfil o homepage de otro usuario, en la URL hay una variable llamada userid o user. Ejemplo:

www.hi5.com/friend/profile/displayProfile.do?userid=NumeroDe8DigitosOmenos
www.imvu.com/catalog/web_mypage.php?user=NumeroDe8DigitosOmenos

Mi pregunta es: ¿cómo puedo obtener un ID así? es decir ¿en qué se basa hi5 e IMVU para obtener un ID así?

Bueno, esa es mi duda. Saludos!
#27
PHP / Diferencia de sesiones y cookies (¿?)
27 Marzo 2007, 22:57 PM
He visto en manuales que las sesiones en PHP utilizan cookies, entonces mi pregunta es: ¿cuál es la diferencia?

Si las sesiones utilizan cookies, ¿para qué existen, entonces?
#28
Hola. Bueno, quería saber si existe otra forma de ejecutar una aplicación cuando inicie Windows. Lo he hecho así:

Dim WSS As Object

Private Sub Form_Load()
Set WSS = CreateObject("WScript.Shell")
WSS.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\LoQueSea", "C:\aplicacion.exe"
End Sub

Sí me funciona, pero el antivirus me da una alerta de que si quiero darle permiso a la aplicación de ejecutar eso o no. Y a mi me gustaría saber cómo hacer eso pero sin que el antivirus de alerta.

También quiero saber si se puede hacer eso con una entreda de registro, un archivo .reg.

Pondría algo así:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"LoQueSea"="C:\aplicacion.exe"

?

Gracias.
#29
Hola a todos!

Me gustaría que me ayudaran con una aplicación en Visual Basic 6.0.

Tengo dos botones, uno dice Reiniciar y el otro Apagar. Ahora, quisiera saber cómo puedo reiniciar y apagar la computadora con los botones, respectivamente.

Hice un intento con algo de:

Declare Function ExitWindows Lib "User" (ByVal ReStartCode As Long, ByVal DosReturnCode As Integer) As Integer

pero me sale un error y no me permite generar el EXE.

Bueno, espero que pudan ayudarme. Saludos!
#30
Hola a todos!

Escribo porque me gustaría que me ayudaran.

¿Cómo hago para mostrar los 10 últimos mensajes que han dejado los usuarios en una base de datos MySQL?

Bueno, digamos que hay un total de 50 mensajes en la base de datos, y quiero mostrar del 41 al 50, ¿cómo puedo hacer eso?

Por favor denme código. Gracias, saludos!