martes, 1 de septiembre de 2015

Fijar el tamaño de un vector ó matriz dinámicamente por teclado en C++

Cuando necesitamos usar un arreglo de elementos, lo que normalmente se hace es declararlo, con un número fijo de elementos, por ejemplo:
int v];  

Con esto hemos declarado un vector de enteros con 3 elementos, y accedemos a los respectivos valores mediante: v[0], v[1] y v[2]

Pero el inconveniente surge cuando no sabemos de antenamo, el número de elementos, pueden darse 2 casos:

1. Si declaramos por ejemplo un arreglo de 3 elementos pero usamos sólo un número menor, por ejemplo 2. La mayoría trabaja así y puede ser válido cuando trabajamos con arreglos de pocos elementos, pero si nuestro arreglo tiene unos 1000 elementos, obviamente estamos desperdiciando memoria.
2. El otro caso, es cuando el arreglo es de 3 elementos y necesitamos usar 4, otro problema.

La solución a esto es declarar un arreglo o puntero y asignar dinámicamente la memoria para los elementos adecuados, pero como hacemos esto??

Primero hacemos referencia a la librería malloc.h con la línea:

#include <malloc.h> 

Y ahora si, fíjense en el siguiente código:


int elementos 5;int *NULL;
    
= (int *)malloc(sizeof(int)*elementos); 

Dinámicamente asignamos memoria para 5 enteros, el valor de la variable elementos puede ser leída de teclado.

Ahora si tenemos una matriz nuestro código sería algo como:
int **NULL;int filas 5;int columnas 2;int i;
    
= (int **)malloc(sizeof(int)*filas);
for(
i=0filasi++) m]=(int *)malloc(sizeof(int)*columnas); 



Ahora, que sucede si luego queremos cambiar las dimensiones del vector o la matriz, pero sin perder la informacion que ya tenemos ?

Simplemente tenemos que reasignar la memoria, usando la función realloc.

Esta funcion reasigna la memoria que tenemos, es decir cambia las dimensiones de nuestra variable, pero sin perder la información previa.

Para el caso de nuestro vector, supongamos que ahora queremos agregar 2 elementos más, es decir tenemos un total de 7 elementos, lo que haríamos es lo siguiente:
elementos 7;
    
= (int *)realloc(vsizeof(int)*elementos); 

Y para la matriz, digamos que queremos tener 100 filas y 50 columnas, lo que haremos es:

filas 100;columnas 50;= (int **)realloc(msizeof(int)*filas); 
for(
i=0filasi++) m]=(int *)reallocm], sizeof(int)*columnas); 

Con esto conseguimos manejar de forma optima la memoria y declaramos solo lo que vamos a usar.



Ahora, si tenemos por ejemplo una estructura como la siguiente:
struct Estructura{
   
string palabra;
   
int cant_docs;
}; 


Si no sabemos de antenamo cuantos elementos necesitamos, podemos vernos tentados a declarar un numero muy grande de elementos tal como:
struct Estructura indice[2000000]; 

Es decir estamos declarando de inicio 2 millones de elementos, es probable que ni siquiera llegemos a usarlos todos, con los problema de memoria que puede traer esto.

Podemos usar la librería estándar de plantillas de C++ (STL), en concreto la llamada <vector> la cual permite tener un vector de tamaño variable, fíjense en el siguiente código:

Código:
#include <vector>
#include <string>
#include <cstdlib>
#include <iostream>

using namespace std;

struct Estructura{
   string palabra;
   int cant_docs;
};

vector<Estructura>indice;

void Insert(const Estructura& e)
{
 indice.push_back(e);
}

void Delete(int i)
{
 if(i>=0)
  indice.erase(indice.begin()+i);
}

void Resize(int iMax)
{
 indice.resize(indice.size()+iMax);
}

void Show(int i)
{
 if(i>=0){
  cout << indice[ i ].palabra.c_str() << endl;
  cout << indice[ i ].cant_docs << endl;
 }
}

int main()
{
 Estructura e;

 e.palabra="palabra1";
 e.cant_docs=1;
 Insert(e);
 
 e.palabra="palabra2";
 e.cant_docs=2;
 Insert(e);
 
 cout << "\nSize: " << indice.size() << endl;
 cout << endl;
 for(int i=0; i< indice.size(); i++)
  Show(i);

 //Incrematamos el tamaño del vector
 Resize(10);
 cout << "\nSize: " << indice.size() << endl;
 
 system("pause");
 return 0;
}

Una vez más usamos sólo la cantidad de memoria adecuada, lo que hace a nuestro programa mucho más eficiente.

También se puede utilizar las plantillas que ofrece C++, como son <stack> -> pilas, <queue> -> colas o <list> -> listas

Para esto necesitaremos un compilador que soporte la librería estándar de plantillas como el Dev-C++
 

lunes, 21 de julio de 2014

Renovar la direccion IP con un fichero batch (.bat)

1º) Abrir un Bloq de notas en la siguiente direccion:

Start > Run > notepad (Enter)
Inicio > Ejecutar > notepad (Enter)
Win + R > notepad (Enter)

2º) En el bloq de notas (Notepad) escribir lo siguiente:
echo off 
cls 
ipconfig /release 
ipconfig /renew 
ipconfig /registerdns 
exit

3º) Guardar el archivo como RenovarIP.bat o RenewIP.bat y en la extension del archivo seleccionar "todos los archivos" en vez de TXT para que el archivo se guarde con la extension .bat

Comandos SSH Shell frecuentes

A continuación facilito un listado de los comandos SSH que se usan con más frecuencia. Los comandos se encuentran organizados por tema e incluyen una descripción breve para comprender como usarlos.

Comandos de navegación



  • pwd muestra el path completo del directorio en el que se encuentra
  • cd cambia de directorio, por ejemplo cd directorio/subdirectorio
  • cd ~ lleva a su directorio home
  • cd - lleva al último directorio en el que estuvo
  • cd .. sube a un directorio superior

  • Listado de archivos



  • ls lista archivos y directorios de un directorio
  • ls -al lista archivos y directorios e información sobre los mismos
  • ls -aR lista archivos e información incluyendo todos los subdirectorios
  • ls -aR | more lista archivos e información incluyendo todos los subdirectorios por pantallas
  • ls -alR > resultado.txt lista archivos e información de subdirectorios y lo guarda en un archivo
  • cat resultado.txt mostraría en pantalla el contenido del archivo
  • ls *.html lista todos los archivos acabados en .html
  • ls -al directorio/subdirectorio/ lista archivos e información de ese subdirectorio


  • Crear, editar o eliminar archivos y directorios



  • pico /home/usuario/public_html/index.html edita el archivo index.html con el editor pico
  • touch /home/usuario/public_html/404.html crea el archivo vacio 404.html en ese directorio
  • rm archivo.txt elimina archivo.txt
  • rm -rf directorio/ ¡CUIDADO! elimina el directorio indicado, los subdirectorios y todos sus archivos
  • mkdir descargas Crea un directorio llamado descargas
  • rmdir descargas Elimina el directorio llamado descargas


  • Compresión y descompresión de archivos



  • zip archivo.zip /home/usuario/public_html/directorio Comprimir directorio
  • unzip archivo.zip Descomprimir archivo.zip
  • unzip -v archivo.zip Ver contenido de archivo.zip


  • Copiar archivos o directorios

    Copiar un archivo
    • cp -a archivo.zip archivocopia.zip
    Clonar un un directorio
    Supongamos que queremos duplicar el directorio /home/usuario/public_html/img y todo su contenido.
    • cd /home/usuario/public_html
    • cp -a img imgcopia
    Accedemos al directorio public_html y duplicamos el directorio img y todo su contenido manteniendo sus respectivos permisos en un nuevo directorio llamado imgcopia. Es importande destacar que la duplicación funcionará como esperamos si el directorio imgcopia no existe. Si estuviera creado con anterioridad, se crearía un directorio llamado img dentro del directorio imgcopia.
    Copiar todo el contenido de un directorio en otro directorio que ya existe
    • cp -a img/* imgcopia
    Partiendo del ejemplo anterior el comando copiará todo el contenido del directorio img en el directorio imgcopia. Si en el proceso de copia el directorio de origen contiene archivos que ya existen en el directorio de destino, se solicitará confirmación para sobreescribirlo. Para que el sistema no pregunte antes de sobreescribir un archivo existente añade la opción -f.
    • cp -af img/* imgcopia
    Cabe la posibilidad de que exista un alias para el comando cp para que por defecto se ejecute con la opción -i (preguntar antes de sobreescribir, alias cp='cp -i') y el comando -f no surta efecto. En ese caso puedes omitir temporalmente el alias añadiendo una contrabarra o backslash \ antes del comando.
    • \cp -af img/* imgcopia

    Otros comandos SSH

    • du -sh muestra es espacio total ocupado por el directorio en el que se encuentra
    • du -sh * muestra el espacio ocupado de cada archivo y directorio


  • lynx marca.com usar el navegador Lynx para acceder a www.marca.com
  • whoami muestra su nombre de usuario
  • viernes, 15 de febrero de 2013

    Responsive Web Design

    Hubo un tiempo en el que nuestros monitores de tubo de 14 pulgadas y nuestras todavía precarias tarjetas gráficas nos permitían disfrutar de resoluciones ahora discretas, como aquellos 800 x 600 px habituales que tardaron bastante tiempo en ser superados a medida que el hardware avanzaba y los usuarios tenían acceso a una tecnología mejor. Por aquel entonces, en plena ebullición de la red, con Flash asomando la cabeza, parecía óptimo diseñar webs teniendo en cuenta ese ancho máximo de 800 píxels, intentando que ningún usuario se encontrase con situaciones incómodas, como intentar acceder a contenidos que quedasen fuera del alcance de su pantalla o enfrentarse a sistemas de navegación prácticamente inservibles.

    Con la llegada de monitores planos y la mejora paulatina del hardware, nuevos estándares ganaron terreno y algunas compañías empezaron a arriesgarse, tomando como base unos 1024 px de ancho total que se convirtieron en el ‘nuevo límite’ del diseño web. Fruto de ello surgieron sistemas modulares basados en la reticulación de un área de 960 px, pensados para aprovechar al máximo el espacio disponible, al tiempo que fragmentábamos de forma eficiente un columnado flexible sobre el que ubicar cada elemento del diseño.
    Superada la primera década del siglo, nos encontramos en un momento en el que prácticamente cualquier usuario puede permitirse comprar un equipo de aceptable calidad a precios razonables, con pantallas que oscilan entre las 10 pulgadas de portátiles compactos y las 30 de monitores de gran calidad, con un rango de resoluciones excepcionalmente amplio. A ello, debemos añadir todo un nuevo océano de usuarios que aprenden a utilizar la red desde sus móviles mientras personas mayores sin contacto previo con la tecnología, encuentran el uso de un tablet sencillo y próximo y los niños disfrutan accediendo a contenidos desde cualquiera de las plataformas comentadas de forma indiscriminada.

    Así que es lógico preguntarse: ¿cuál es el nuevo estándar? ¿Qué resolución debemos tener en cuenta a la hora de plantear un nuevo diseño para un cliente? ¿Es posible seguir teniendo en cuenta aquellos 1024 px casi legendarios y asegurarnos de que los usuarios menos actualizados en términos de hardware/software puedan seguir accediendo a nuestros contenidos? Lo es, siempre que tengamos en cuenta que será un planteamiento poco usable en un teléfono móvil y visualmente algo anticuado para grandes monitores y altas resoluciones como las cercanas a los 3.000 px de ancho que determinados equipos pueden ofrecer a día de hoy.
    Así que la respuesta es que ya no existe un estándar acotado. Los formatos fijos y el diseño estático han pasado a mejor vida y la actualidad pasa por ofrecer una buena experiencia de uso, independientemente del dispositivo que utilicemos para acceder al contenido. En base a este punto de partida y al avance técnico en lo relativo a CSS y Html, Ethan Marcotte acuñó el término ‘Responsive Web Design’ para referirse a un diseño sensible al entorno en el que se muestra. El perfil profesional del propio Marcotte hizo que su discurso se basase en sistemas reticulares fluidos y otros recursos similares, pero la intención de este post no es profundizar en aspectos técnicos, sino explicar la idea esencial de esta necesaria realidad del diseño web actual.
    No hay forma más sencilla de explicar este concepto que probándolo de forma directa. Trata de acceder al delicioso site Food Sense. Expande la ventana de tu navegador tanto como te sea posible en tu monitor y después ve acortando el ancho de la misma paulatinamente. Comprobarás como el diseño se readapta en base a varios estados que coinciden con resoluciones concretas. En ocasiones, los cambios se limitan a reducciones en el cuerpo de letra o el ancho del columnado, mientras que en otras, la disposición de los elementos de navegación y otros módulos se reposicionan de forma calculada.
    Trata de hacer lo mismo usando tu tablet e intenta visualizar el site tanto en formato vertical como horizontal. La diferencia de resolución entre ambos anchos (1024 vs 768 px, p.e.) dará como resultado un diseño ligeramente distinto pero, y ahí radica lo importante, la experiencia seguirá siendo la apropiada y las diferencias en términos visuales, prácticamente inapreciables para usuarios poco preocupados por estos temas. Si accedes al site usando tu smartphone, verás que el contenido se reconstruye con un formato que permite que la información sea igualmente accesible pero adaptada, para una legibilidad adecuada a las escasas dimensiones de la pantalla.

    Hace dos años que Marcotte explicó de forma esclarecedora en su artículo original de A List Apart la problemática del “multi-plataformismo” derivado del acceso a la red mediante dispositivos tan diversos como los mencionados smartphones o tablets, o incluso videoconsolas, en ocasiones haciendo uso de navegadores muy diversos. Determinados clientes empezaron a solicitar versiones específicas para iPhone de sus respectivos sites, en ocasiones encontrando soluciones parciales como el destierro de dichas versiones a subdominios. Así que el diseño sensible o adaptable parece una solución adecuada que llega para quedarse, independientemente de los avances técnicos que mejoren su aplicación a futuros formatos.

    Consideraciones

    Lógicamente, desarrollar un site adaptado a las necesidades actuales requiere más tiempo que plantear uno limitado a una maqueta fija. Si bien existen recursos a nivel de desarrollo web que pueden acelerar mucho el proceso de implementación, las decisiones que se tomen en cuestión de diseño no son triviales y siguen estando en manos de personas, por lo que las variaciones que puedan existir en términos de proporciones o disposición de elementos deben ser consideradas y estudiadas de antemano.
    Esto puede generar una planificación más abultada de lo esperado para aquellos que estén acostumbrados al acelerado desarrollo web habitual, pero teniendo en cuenta las tendencias actuales en cuanto al acceso a internet a través de teléfonos y otros dispositivos portables, parece sabio invertir tiempo y dinero en un diseño que:
    1. Asegure el funcionamiento del site en cualquier situación.
    2. No implique el desarrollo paralelo de versiones adicionales que convivan entre sí.
    3. Dote a nuestra web de una vida útil considerablemente más larga.
    4. Mejore la percepción del usuario sobre nuestro trabajo.

    La posición del diseñador

    Como diseñador de formación, doy fe de que un profesional del diseño gráfico, especialmente si proviene de un ámbito más cercano a la gráfica impresa en toda su extensión, se sentirá especialmente incómodo al tener que plantear un esquema de este tipo. Ser conscientes de que es complicado controlar en cada momento la forma exacta en la que un usuario visualiza un determinado contenido incomoda sobremanera al diseñador (en este sentido, los desarrolladores tienen una visión mucho más práctica).
    A los omnipresentes problemas con las interpretaciones entre navegadores, se le suma ahora el hecho de pensar en un diseño totalmente flexible, por lo que el interés o el reto en cada proyecto recae en aspectos distintos. La importancia del elemento que se encuentra perfectamente alineado en unas coordenadas determinadas se transforma en un interés creciente por sistemas modulares avanzados, sin dejar de lado, claro está, todo su criterio tipográfico y compositivo. Los límites del papel nunca tuvieron sentido en el diseño web.

    Buenas prácticas

    A estas alturas, son muchos los ejemplos que podemos encontrar en la red y que demuestren las bondades de lo que formalmente podemos llamar Responsive Design. Bastarán algunas búsquedas en Google para encontrar acertadas recopilaciones de enlaces de interés en lo que se refiere al tema que nos ocupa. Sin embargo, nosotros también tenemos nuestros favoritos, que en esta ocasión limitaremos a tres para dejar que descubras por ti mismo muchos otros ejemplos, cada vez más presentes en la actualidad web:

    Edenspiekermann
    1. Edenspiekermann
    El último proyecto empresarial del respetado diseñador Erik Spiekermann, con presencia en Alemania y Holanda. Su propio website es un fantástico (y temprano) ejemplo de su buen hacer y de la aplicación del concepto de Responsive Design. Méritos técnicos y gráficos a parte, su web es totalmente fiel a su filosofía general e incluso la redacción de sus artículos y manifiestos denota carácter.

    Teehan/Lax
    2. Teehan/Lax
    Unos pioneros del Responsive Design y un equipo realmente respetado en los últimos años. Sus artículos dejan claro su enorme bagaje técnico y gráfico, pero además ofrecen muchos ejemplos sobre cómo poner dicho conocimiento al servicio de una estrategia sólida. Sus secciones Labs y Downloads son sumamente interesantes y demuestran su generosidad hacia la comunidad.

    Smartbox
    3. Sparkbox
    Una empresa que, precisamente, vende Responsive Design. Llaman SmartSites a este tipo de producto y toda su web es un manifiesto a favor del diseño adaptable. Como no podía ser de otra forma, su site es un gran ejemplo de lo que venden.

    Para aquellos interesados en el tema, especialmente desde un punto de vista técnico, tal vez sea inteligente recurrir al excelente libro escrito por el propio Marcotte y editado por A List Apart / A Book Apart como libro impreso o electrónico: Responsive Web Design, de Ethan Marcotte.

    miércoles, 19 de diciembre de 2012

    Cómo poner publicidad con Twitter Ads

    ¿Sabes cómo poner publicidad en Twitter? Twitter Ads, la plataforma publicitaria del pajarito azul no está al alcance de todos (como veremos posteriormente por su coste). Pero además tiene otro problema añadido: no todo el mundo es capaz de sintetizar en tan sólo 140 caracteres un mensaje que además de informar sea capaz de vender... ¿Sabes hacerlo?
    En el fondo la clave del éxito en Twitter Ads es saber conectar con tu público objetivo... Por ello en este post vamos a ver cómo hacer publicidad en Twitter.
    Decisiones a la hora de hacer Publicidad en Twitter.
    Ya hemos decidido lanzarnos a la piscina y queremos hacer publicidad en Twitter. Antes de meterte en Twitter Ads tienes que tomar tres decisiones básicas:
    ·         ¿Qué formato publicitario quieres? Lo veremos a continuación pero hoy por hoy existen tres formatos publicitarios en Twitter: Tweet promocionado, cuenta promocionada o tendencia promocionada.
    ·         ¿Cuánto tenías pensado gastarte? Como comentábamos al principio de este artículo hacer publicidad en Twitter no está al alcance de todos los bolsillos. Se requiere una inversión mínima de 5000€ anuales, suficiente para alejar Twitter Ads de muchas pequeñas empresas.
    ·         ¿Has pensado ya cuándo vas a lanzar la campaña? Es necesario cierta anticipación: como mínimo pasará una semana desde tu petición de contratación hasta que realmente puedas hacer publicidad en Twitter. Deberás contar con este intervalo de tiempo.

    Primer formato de Publicidad en Twitter: Los Tweets Promocionados.
    Los tweets promocionados (o promoted tweets) únicamente promocionan un tweet concreto. ¿Para cuándo usaremos este formato? Los tweets promocionados son muy útiles para difundir mensajes específicos o para promover una oferta concreta. Podrás segmentar el público objetivo al que vas a lanzar tu tweet promocionado para optimizar los resultados. Sólo pagarás cuando el usuario haga click o cuando interactúe con el mensaje (retweet etc.).
    Segundo formato Publicitario de Twitter: Las Cuentas Promocionadas:
    Twitter "sugerirá" las cuentas promocionadas en función de los intereses de los usuarios. Por ejemplo si Twitter detecta que te interesan las motos te propondrá cuentas de empresas de motos pero si, por el contrario, piensa que estas interesado en las redes sociales te propondrá empresas dedicadas al social media.

    Tercer formato de Twitter Ads:  Las tendencias promocionadas.
    Las tendencias promocionadas (o promoted trends) son ideales para crear temas de conversación masivos. ¿El objetivo de tu publicidad en Twitter es hacer branding? ¿O quieres promocionar un evento concreto? Para estos casos tu elección debería ser lanzar una tendencia promocionada.

    Optimiza tu mensaje en Twitter.
    Hacer publicidad en Twitter tiene su dificultad. A la limitación propia del canal (140 caracteres) tenemos que añadir que los usuarios estamos ya totalmente saturados de campañas publicitarias. Entonces... ¿Cómo tiene que ser nuestra publicidad en Twitter?
    El atractivo del mensaje es clave. En Twitter no estamos para ver a cuánto sale el kilogramo de tu producto. Tendrás que trabajártelo un poco más. En tan sólo 140 caracteres tienes que lograr captar nuestra atención... ¿Cómo puedes hacerlo? Jugando con las emociones: el suspense, el humor e incluso la lástima pueden serte de gran ayuda a la hora de hacer publicidad en Twitter.
    La originalidad es otro de los pilares básicos de la publicidad en Twitter: Estamos ya saturados de publicidad así que... ¿Qué es lo único que llama nuestra atención? Ni más ni menos que aquello que rompe todos los esquemas.
    También prima la sencillez: No crees anuncios en Twitter complicados o cargados de tecnicismos. Los usuarios de Twitter no son expertos de tu sector y si no entienden lo que les quieres decir jamás harán click en tu anuncio.
    Intenta transmitir sensación de urgencia para lograr el click. Si transmites que el número de unidades está próximo a agotarse o que una oferta concreta va a caducar conseguirás un mensaje más atractivo.
    Tu publicidad en Twitter tiene que aportar valor al usuario. En otras palabras, si quieres promocionar un gimnasio en Santander en Twitter deberías centrarte en el público al que le pueda interesar. ¿Mandarías tu anuncio a un tío de Cuenca? Si lo haces estarás tirando tu tiempo y tu dinero. Gracias a Twitter puedes segmentar tu público objetivo y mandar el mensaje sólo a jóvenes santanderinos.

    ¡Incluye una llamada a la acción! Los seres humanos somos muy influenciables y por triste que resulte leerlo muchas veces el que hagamos click dependerá únicamente de que nos lo pidas... Así que guarda siempre unos cuantos caracteres para meter una llamada a la acción.

    martes, 23 de octubre de 2012

    Principales novedades de Windows 8

    Esta versión está pensada para correr sobre procesadores X86 (Intel y AMD), ordenadores convencionales y tabletas más potentes -pero también por lo general más pesadas y con peor autonomía.
    Por defecto Windows 8 se presenta con la nueva interfaz gráfica anteriormente conocida como “Metro” -Microsoft abandonó el nombre por problemas de registro hace unos meses y ahora la denomina ModernUI-. Es compatible con las aplicaciones descargadas de Windows Marketplace y puede usarse constantemente en este nuevo entorno pero permite también escapar al escritorio tradicional y pueden instalarse programas de versiones anteriores de Windows.
    Las principales novedades son:
    1. Interfaz Metro Como se comenta más arriba, Windows 8 tiene dos formas de trabajar: Uno con el escritorio de siempre y otro con la interface Metro (ahora la denomina ModernUI por problemas de registro). Esta última está sobre todo orientada a la utilización con tablets y smartphones y nos permite trabajar a través de un entorno tactil
    2. Procesadores ARM De cara al mercado de tablets y smartphones Windows 8 tiene una versión de sistema operativo basada en procesadores basados en ARM que permiten un menor consumo. Aún así también habrá una versión basada en intel para tablets que permitirá ejecutar los mismos programas que en un ordenador usando, eso si, discos SSD para un menor consumo.
    3. Windows to Go
      Esta característica de Windows 8 nos permite llevar nuestro SO con sus aplicaciones en un USB y poder ejecutar desde este dispositivo en cualquier ordenador.
    4. USB 3.0
      Esta tecnología permite velocidades 10 veces más rápidas que USB 2.0. Aunque ya es soportado por otras versiones Windows 8 tiene soporte nativo para USB 3.0.
    5. Windows App Store
      Microsoft tiene una tienda de aplicaciones para la compra de app similar a Google App store.
    6. Explorador de Windows
      Windows 8 incorpora en la parte superior del explorador de archivos la interfaz Ribbon, esta barra nos permite acceder fácilmente a las principales opciones de gestión de archivos.
    7. Transferencia de archivos
      Nueva ventana en la que se ve de forma centralizada y con información detallada todas las tareas de copias de ficheros que está teniendo lugar. Existe la posibilidad de pausar esas tareas de copia.
    8. Reset and Refresh
      Son dos funciones que nos permiten recuperar el estado del equipo ante un fallo grave o malware.
      1. Reset formatea el equipo y reinstala el SO sin guardar las aplicaciones o datos.
      2. Refresh reinstala el SO , pero antes hace copia de las aplicaciones y los datos para recuperarlos al final.