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!
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
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.
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...
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:
// 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;
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
Código:
/** * * @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
Código:
/** * * @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); } }
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.
// 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));
/** * * @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
Código:
/** * * @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 } }
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.
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.
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.
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 ) va tomando la función de una shell (como las que hay en internet: shells en PHP para manipular el sistema).
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:
Código:
<?php require("../includes/database.php"); // Con esto no tengo problema require("classes/autoload.php");
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ó un error con la consulta.</strong></p>\n");
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:
Código:
$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.