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ú

Mensajes - ~

#61
Este programa funciona bien para esa tarea hasta ahora. Toda la información está en los comentarios.

Simplemente usa una función más, que se limita a buscar el carácter '\r' o '\n' y lo modifica directamente en la cadena original, cambiándolo por un carácter nulo '\0'. Ni siquiera se necesita malloc para ese pequeño ajuste de cadena.


#include <stdio.h>   //printf, fopen, fgets, fclose
#include <stdlib.h>  //exit
#include <string.h>  //strlen



int openbin(void);
void striptrail(char *, size_t);


int main(void)
{
openbin();
return 0;
}



int openbin(void)
{
//Definimos el manejador de archivo y nuestro búfer de cadena:
///
  FILE *pfile;
  char namebin[50];


//Mostramos un mensaje pidiendo un nombre de archivo
//y leemos dicha entrada de usuario con fgets:
///
   printf("Nombre de archivo: ");
   fgets(namebin,sizeof(namebin), stdin);


//A continuación mostramos el tamaño de la cadena leída
//con fgets, y luego aplicamos la función para eliminar
//nuevas líneas/retornos de carro, para preparar la cadena
//y aprovechamos a mostrar la nueva longitud (si es que se
//ajustó):
///
   printf("Longitud de cadena sin procesar: %d\n",strlen(namebin));

//Le pasamos directamente el nombre del búfer de cadena, porque
//este es ya en sí un puntero directo al búfer de cadena:
///
   striptrail(namebin, sizeof(namebin));
   printf("Longitud de cadena procesada con 'striptrail': %d\n\n",strlen(namebin));



//Tratamos de abrir el archivo. Si no se puede abrir, mostramos
//un error; si se abrió mostramos mensaje de éxito. Después
//cerramos el manejador de archivo y salimos al sistema.
///
   if ((pfile = fopen(namebin, "rb"))== NULL)
   {
    printf("ERROR: No se pudo abrir el archivo.\n");
    exit(1);
   }
   printf("Archivo abierto exitosamente.\n");
   fclose(pfile);

return 0;
}






//Esta función simple está pensada para usarse con fgets.
//
//Lo que hace es tomar un puntero a una cadena, y el tamaño
//esperado de la cadena.
//
//Entonces busca un carácter de retorno de carro '\n' o nueva
//línea '\n', introducidos por fgets al presionar ENTER.
//
//NOTA: Si no se encuentra ninguno de esos caracteres, entonces
//      el último carácter, al final del búfer de cadena de texto,
//      se reemplaza incondicionalmente por un byte nulo '\0' para
//      terminar la cadena ASCIIZ, por seguridad.
//
//      Es por eso que esta función está diseñada para trabajar con
//      fgets u otro código que guarde '\r' o '\n' al final de la
//      cadena esperada.
//
///
void striptrail(char * tostrip, size_t sizze)
{
//Tratamos de aplicar optimización de uso de
//registros de CPU, para mayor velocidad para
//el contador del bucle:
///
   register size_t x=0;



//Recorremos toda la cadena:
///
   for(x=0;x<sizze;x++)
   {
    //Si el carácter que estamos leyendo actualmente es
    //regreso de carro o nueva línea, sabemos que tenemos
    //que cambiarlo por el byte nulo '\0' para indicar
    //el fin de la cadena. Nos detenemos tan pronto como
    //encontremos uno de esos caracteres, regresando de
    //la función de inmediato, para evitar seguir escaneando
    //la cadena si el objetivo ya está cumplido:
    ///
      if(tostrip[x]=='\r' || tostrip[x]=='\n' ||  tostrip[x]=='\0')
      {
       tostrip[x]='\0';
       return;
      }
   }



//Si x tiene el valor del tamaño esperado del búfer,
//reemplazamos el carácter en esa posición con un byte
//nulo para terminar la cadena. Esta línea se puede dejar
//o eliminar dependiendo de cómo funcione nuestro programa,
//y si estamos totalmente seguros de que no necesitamos
//esta "característica de seguridad" (pero vital en este programa):
///
  tostrip[x]='\0';
}


#62
Muchos programas (la mayoría) tienen un valor de 0 en el checksum de la cabecera PE. Solo a los drivers, DLLs y ejecutables de sistema se les requiere tener un checksum válido.

Por eso depender de este campo no es bueno para determinar un cambio en el ejecutable. Sería mejor calcular desde el principio un checksum global con MD5 o SHA-1 a todo el archivo .EXE, y guardarlo como clave en un lugar seguro, no en el .EXE, para volver a comparar cuando se necesite.
#63
No se me ocurre una forma predefinida de hacer eso porque ese es un campo simple que puede apuntar a cualquier parte dentro de la imágen del ejecutable.

La forma más fácil que se me ocurre es saber de antemano la dirección a la que debe apuntar ese campo, el checksum del programa en cuestión, su tamaño original y conocer las instrucciones que deberían estar en el punto de entrada al que apunta el AddressOfEntryPoint, además de algún tipo de mapa de secuencia de instrucciones que permita determinar si la estructura de una versión de un ejecutable está alterada.

El AddressOfEntryPoint no necesariamente tiene que apuntar al inicio de la sección de código sino que puede llevar a cualquier lugar dentro de esta, y es algo perfectamente normal y común.
#64
Y sobre el espacio total de almacenamiento, ¿cuánto sería aproximadamente lo ideal, y lo consumido por mes? ¿Es necesario obtener más espacio rutinariamente para las bases de datos y el contenido en general?
#65
Como sabemos un múltiplo es un número que es exactamente divisible entre el "mútliplo base", o en otras palabras, que al dividirlo da un residuo de 0. Con "exactamente divisible" lo que queremos decir es que la división da un resultado entero sin ningún decimal.

Por ejemplo 10 es múltiplo de 5 y de 2 porque

10/5==2,
10%5==0,
10/2==5,
10%2==0,
(int)(10/5)*5==10,
(int)(10/2)*2==10

___________

Como podemos ver también, si efectuamos una división inexacta (que produce decimales) con variables enteras, la parte decimal se pierde y solo queda la parte entera. Así que si dividimos dos números de variables enteras por ejemplo entre 2, y después los volvemos a multiplicar por dos, y el número es el mismo que antes de dividir, entonces también sabemos que el número en cuestión es un múltiplo del número por el que lo dividimos.
___________

Para determinar si el número es múltiplo de 2, de 5, etc., solo hay que dividir ese número entre 2, entre 5, etc., usando el operador de módulo %.

Este se aplica igual que el de división /, pero la diferencia es que % devuelve el residuo de la división.

Así que siempre que algo como numero % 2 o numero % 5 den como resultado 0 es porque el numero es un múltiplo de 2, 5, etc.

Esto es aplicable para C, C++, javascript, Java, ensamblador, y prácticamente todos los lenguajes mayores de programación.
#66
Aparentemente no hay problemas. Opcionalmente está esta página que es más limpia y con el script original, agregando "uniq" vía javascript. Debería funcionar, es de ver cómo funciona en varios navegadores tal vez:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Documento sin t&iacute;tulo</title>
</head>

<body>
 Primer javascript funcionando:
 <div class="js-kit-rating" id="s1"></div>

 Segundo javascript funcionando:
 <div class="js-kit-rating" id="s2"></div>

 <script language="javascript" type="text/javascript">
  var newdiv = document.getElementById('s1');
  newdiv.setAttribute('uniq',"primer_script");
  newdiv.setAttribute('class',"js-kit-rating");

  newdiv = document.getElementById('s2');
  newdiv.setAttribute('uniq',"segundo_script");
  newdiv.setAttribute('class',"js-kit-rating");
 </script>

 <script language="javascript" type="text/javascript" src="http://js-kit.com/ratings.js"></script>
</body>
</html>

#67
Entonces lo que habría que hacer es modificar un poco el script mismo. Aquí tengo un ejemplo de página web (el único cambio ahora es que el script está en nuestro servidor y se llama "ratings1.js").

Más abajo pongo el código de "ratings1.js". Lo que hice fue cambiar todas las instancias de "uniq" por "id" usando Wordpad que viene con Windows. Ambos archivos deberían estar en el mismo directorio (el HTML y el JS) para este ejemplo:

Descargar ejemplo2.zip

No pude ponerlo directamente en este foro como adjunto porque no encontré la opción de adjuntar.
#68
Windows / Re: Ayuda con ms-dos
15 Octubre 2010, 16:08 PM
También esto:

@set letra=%1
@echo La letra de la unidad es %letra%


El %1 es el primer parámetro de la líea de comandos.

Cuando se declara una variable, como "letra", se escribe normalmente, pero cuando se vuelve a usar se usa entre 2 signos de porcentaje, en este caso se escribe %letra% para usar el valor después de declarada.

Para correrlo sería algo como:

MiBat.bat C:
#69
Parece que se puede usar "id" en lugar de "uniq", aunque parece que puede borrarse por completo (por lo menos a mí me funcionó). Lo que sí parece importante es que el div contenga "class="js-kit-rating"" porque parece que el script busca todos los div con ese nombre de clase de stylesheet como un arreglo.

También hay que guardar el archivo como ANSI (manteniendo el meta en "utf-8") y reemplacé todos los caracteres "extraños" no ingleses por sus entidades HTML (en este caso, la í fue cambiada por &iacute;). Con esto la validación queda en 0 errores y 0 warnings.

Ahora solo hace falta ver si realmente funciona y se valida como se espera:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Documento sin t&iacute;tulo</title>
</head>

<body>
 Primer javascript funcionando:
 <div class="js-kit-rating" id="primer_script"></div>

 Segundo javascript funcionando:
 <div class="js-kit-rating" id="segundo_script"></div>

 <script language="javascript" type="text/javascript" src="http://js-kit.com/ratings.js"></script>
</body>
</html>

#70
Una Instalación de Reparación usualmente soluciona esto. Se necesita tener a la mano todos los discos con drivers, para más facilidad en el propio disco duro, pero es suficiente tener los CD's a la mano.

Soporte de Microsoft: Instalación de Reparación (leer cerca de la mitad de la página para información sobre Windows 7)

Google: "windows 7" "instalación de reparación"

Google: "windows 7" "repair install"

Estos dos tutoriales deberían seguirse uno después de otro para tratar de reparar Windows XP (SIEMPRE Y CUANDO NO TENGAMOS MÁS DE UN SISTEMA OPERATIVO INSTALADO EN EL BOOT, a menos que sepamos cómo reconfigurar esto después para un nuevo multiboot):

Repairing Windows XP in Eight Commands « Icrontic Tech

Repair XP


Esto no elimina documentos, ni preferencias, ni programas instalados ni cuentas de usuarios, ni formatea, ni ninguna otra cosa más que volver a copiar los archivos (EXEs, DLLs, etc.) del sistema base. Lo único que puede pasar es que todas las actualizaciones de Windows Update se reviertan hasta la versión del disco de instalación que estamos usando.

Aunque sería bueno hacer un respaldo de todo el disco para tener mayor seguridad de los datos.


También se puede tratar de guardar el archivo WPA.DBL para evitar tener que volver a activar Windows:

http://www.google.com/search?q=windows%20xp%20transfer%20wpa
http://netsecurity.about.com/od/windowsxp/qt/aaqtwinxp0829.htm
http://www.tomshardware.com/forum/50746-45-transfer-computer