viernes, 9 de diciembre de 2011

Sistema de Archivos EXT3

Autor: Rodrigo Bermedo
Competencia: Gestion del conocimiento
Palabras Claves: EXT3, Archivos, Sistema de archivos

Descripvion de la actividad

Esta actividad fue desarrollada para el cuerso de Mantencion y administracion de sistemas, la actividad consistia en buscar las caracteristicas principales de un sistema de archivos en este caso el sistema de archivos es EXT3.

¿que es un sistema de archivos?

En computación, un sistema de archivos es un método para el almacenamiento y organización de archivos de computadora y los datos que estos contienen, para hacer más fácil la tarea encontrarlos y accederlos. Los sistemas de archivos son usados en dispositivos de almacenamiento como discos duros y CD-ROM e involucran el mantenimiento de la localización física de los archivos. Más concretamente un sistema de archivos es un conjunto de datos abstractos que son implementados para el almacenamiento, la organización jerárquica, la manipulación, el acceso, el direccionamiento ya la recuperación de datos. Los sistemas de archivos tienen muchas similitudes con los sistemas de base de datos. 

En general, los sistemas operativos poseen su propio sistema de archivos, en ellos los sistemas de archivos pueden ser representados como texto (el Shell de Dos) o gráficamente (explorador de archivos de Windows) utilizando un gestor de archivos.

El software del sistema de archivos se encarga de organizar los archivos (que suelen estar segmentados físicamente en pequeños bloques de pocos bytes) y directorios, manteniendo un registro de qué bloques pertenecen a qué archivos, qué bloques no se han utilizado y las direcciones físicas de cada bloque.

Sistema de archivos EXT3

EXT3 es un sistema de archivos con registro por diario (journalist). Es el sistema de archivos más usado en distribuciones Linux, aunque ahora está siendo reemplazado por EXT4.
La principal diferencia con EXT2 es su registro por diario. Un sistema de archivos EXT3 puede ser montado y usado como un sistema de archivos EXT2. Otra diferencia importante es que EXT3 utiliza un árbol binario balanceado (árbol AVL) e incorpora un asignador de bloques de disco Orlov.

Caracteristicas de EXT3

Límites de tamaño

Ext3 tiene dos límites de tamaño distintos. Uno para archivos y otro para el tamaño del sistema de archivos entero. El límite del tamaño del sistema de archivos es 231-1 bloques



Niveles del journaling

Hay tres niveles posibles de journaling (registro por diario)

Diario (riesgo bajo)

Los metadatos y los ficheros de contenido son copiados al diario antes de ser llevados al sistema de archivos principal. Como el diario está en el disco continuamente puede mejorar el rendimiento en ciertas ocasiones. En otras ocasiones el rendimiento es peor porque los datos deben ser escritos dos veces, una al diario y otra a la parte principal del sistema de archivos.

Pedido (riesgo medio)

Solo los metadatos son registrados en el diario, los contenidos no, pero está asegurado que el contenido del archivo es escrito en el disco antes de que el metadato asociado se marque como transcrito en el diario. Es el sistema por defecto en la mayoría de las distribuciones de Linux. Si hay un bajón de tensión o kernel Panic cuando el fichero se está escribiendo o está empezando, el diario indicará que el nuevo archivo o el intento no ha sido pasado, por lo que será purgado por el proceso de limpiado

Reescritura (riesgo alto)

Solo los metadatos son registrados en el diario, el contenido de los archivos no. Los contenidos pueden estar escritos antes o después de que el diario se actualice. Como resultado, los archivos modificados correctamente antes de una ruptura pueden volverse corruptos. Por ejemplo, un archivo pendiente de ser marcado en el diario como mayor de lo que actualmente es, convirtiendo en basura al final de la comprobación. Las versiones antiguas de los archivos pueden aparecer inesperadamente después de una recuperación de diario. La carencia de sincronización entre los datos y el diario es rápidamente subsanada en muchos casos. JFS usa este nivel de journaling, pero se asegura de que cualquier basura es borrada al reiniciar

Ventajas de EXT3
 
Disponibilidad:
 
En el caso de que ocurra un apagado incorrecto de la maquina los sistemas de ficheros EXT2 no pueden ser montados nuevamente si antes no so son analizados por el programa “fsck”, el tiempo que tarda este programa en analizar el sistema de archivos está dado por el tamaño de este mismo.
En contraste el ext3 no requiere un chequeo del disco, incluso después de un apagado incorrecto del sistema. Esto es debido a que los datos son escritos al disco de tal manera que el sistema de ficheros siempre esta consistente. Sólo se realizará un "fsck" en el caso de fallos hardware raramente dados (por ejemplo fallos físicos del disco duro), y en el caso de que el sistema de ficheros esté configurado para que se chequee completamente de forma automática cada cierto periodo de tiempo o cada cierto número de montajes para prevenir posibles fallos.
Integridad después de una recuperación de diario. La carencia de sincronización entre los datos y el diario es rápidamente subsanada en muchos casos. JFS usa este nivel de journaling, pero se asegura de que cualquier basura es borrada al reiniciar.
 

EXT3 escribe tres tipos de bloques de datos en el registro:

1. Meta-información: Contiene el bloque de meta-información que está siendo actualizado por la transacción. Cada cambio en el sistema de ficheros, por pequeño que sea, es escrito en el registro. Sin embargo es relativamente barato ya que varias operaciones de E/S pueden ser agrupadas en conjuntos más grandes y pueden ser escritas directamente desde el sistema page-cache.

2. Bloques descriptores: Estos bloques describen a otros bloques del registro para que luego puedan ser copiados al sistema principal. Los cambios en estos bloques son siempre escritos antes que los de meta-información.

3. Bloques cabeceras: Describen la cabecera y cola del registro más un número de secuencia para garantizar el orden de escritura durante la recuperación del sistema de ficheros.

Velocidad

El sistema de archivos ext3, aparte de permitir escribir datos más de una vez, en la mayoría de los casos tiene un rendimiento superior al que proporciona ext2 porque los "journals" de ext3 optimizan el movimiento de los cabezales de los discos duros. Se pueden seleccionar tres modos de journaling para optimizar la velocidad, pero, como contrapartida, la integridad de los datos se verá afectada.

Los diferentes modos son:

Data = writeback: limita la garantía de integridad de los datos, permitiendo a los antiguos datos aparecer en ficheros después de una caída, para un posible pequeño incremento de la velocidad en algunas circunstancias. Este es el modo journaling por defecto en muchos otros sistemas de ficheros journaling, esencialmente proporciona las garantías más limitadas de integridad en los datos y simplemente evita el chequeo en el reinicio del sistema.
 
Data = ordered: (modo por defecto): garantiza que los datos son consistentes con el sistema de ficheros. Los ficheros escritos recientemente nunca aparecerán con contenidos basura después de una caída.

Data = journal: requiere un "journal" grande para una velocidad razonable en la mayoría de los casos y por lo tanto tarda más tiempo recuperar el sistema en el caso de un apagado incorrecto, pero es algunas veces es más rápido para algunas operaciones ya que funciona muy bien si se escriben muchos datos al mismo tiempo (por ejemplo en los spools de correo o servidores NFS sincronizados). No obstante, utilizar el modo "journal" para un uso normal resulta con frecuencia un poco más lento.

Aplicacion con Swing

Autor: Rodrigo Bermedo
Competencia: Trabajo en equipo
Palabras Claves: Programacion, JAVA, Swing

Descripcion de la actividad

Esta actividad grupal fue desarrollada para el curso de Programacion I, y en ella creamos una aplicacion JAVA  con interfaz grafica. este programa era bastante simple ya que en el fondo lo importante era que lograramos comprender la estructura basica que poseian las interfaces que se pueden desarrollar en JAVA.


Enunciado de la actividad

Desarrolle una aplicacion JAVA en la que el usuario ingrese un valor de 1 a 12 y el programa le regrese el nombre del mes al que corresponde el numero. Recuerde que para esta actividad debe ocupar una interfaz grafica.

Ejemplos  de entrada y salida

Entrada                   Salida
 
11                            Noviembre
0                              Ese mes no existe
5                              Mayo
14                            Ese mes no existe 
10                           Octubre

Prototipo de interfaz 


1. JTextField que recive el numero ingresado por el usuario
2. JButton que captura el numero ingresado por el usuario y ejecuta el metodo  ActionPerformed
3. JTextField que le entrega la respuesta al usuario


 Codigo fuente

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

class Meses implements ActionListener {

    JLabel et1, et2;
    JTextField t1, t2;
    JButton boton;
    JFrame v;
    FlowLayout f = new FlowLayout();

    Meses() {
        v = new JFrame("meses del año");
        et1 = new JLabel("ingrese el numero del mes");
        et2 = new JLabel("nombre del mes");
        t1 = new JTextField(11);
        t2 = new JTextField(11);
        t2.setEditable(false);
        t2.setBackground(Color.white);
        boton = new JButton("presionar");
        boton.addActionListener(this);
        v.setSize(180, 180);
        v.setLayout(f);
        v.add(et1);
        v.add(t1);
        v.add(boton);
        v.add(et2);
        v.add(t2);
        v.setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        int a = Integer.parseInt(t1.getText());
        if (a > 0 && a <= 12) {
            if (a == 1) {
                t2.setText("enero");
            }
            if (a == 2) {
                t2.setText("febrero");
            }
            if (a == 3) {
                t2.setText("marzo");
            }
            if (a == 4) {
                t2.setText("abril");
            }
            if (a == 5) {
                t2.setText("mayo");
            }
            if (a == 6) {
                t2.setText("junio");
            }
            if (a == 7) {
                t2.setText("julio");
            }
            if (a == 8) {
                t2.setText("agosto");
            }
            if (a == 9) {
                t2.setText("septiembre");
            }
            if (a == 10) {
                t2.setText("octubre");
            }
            if (a == 11) {
                t2.setText("noviembre");
            }
            if (a == 12) {
                t2.setText("diciembre");
            }
        } else {
            t2.setText(" ese mes no existe");
        }
    }

    public static void main(String[] args) {
        Meses n = new Meses();
    }
}

Capturas de pantalla





Regresion Lineal

Autor: Rodrigo Bermedo
Competencia: Trabajo en equipo
Palabras Claves: Programacion, Regresion lineal, java, MySql

Descripcion de la actividad

Esta actividad fue parte de el curso de Desarrollo de aplicaciones cliente servidor, la activivdad consistia en crear 2 aplicaciones JAVA, que fueran capaces de pedirle al usuarion una cantidad de puntos X e Y y luego de realizar ciertas operaciones pudieran entregarle al usuario el valor de A, B, R2 y la ecuacion de la recta, la diferencias que debian exisitir entre las aplicaciones era que una debia realizar las operaciones por consola y la segunda debia implementar una interfaz grafica, aparte cada aplicacion debia generar una conexion con una base de datos previamente creada en la cual se guardarian los datos ingresados por el usuario, esta actividad debia realizarse en grupo de maximo 4 personas, las principales dificultades que presentaba este trabajo era lograr una buena coordinacion entre el grupo de trabajo tanto como para programar de una manera eficaz como tambien para crear el informe que se debia enviar al profesor.


Enunciado de la actividad

Desarrollar una aplicación basada en la arquitectura Cliente-Servidor de tres niveles (MVC: Modelo-Vista-Controlador). Debe presentar dos alternativas de solución al problema de ayudar a ajustar una curva, usando regresión lineal, para lo cual la aplicación de permitir al usuario ingresar los puntos (x, y) en una base de datos MySql.
Cada grupo debe establecer la problemática a modelar, el diseño que permita solucionar la problemática genérica y los dos software que lo solucionen, cada uno de forma independiente.
Uno de los software debe ser sobre consola y otro sobre Swing (ambos implementan transacciones).
Se recomienda utilizar JTable, AbstractTableModel y DefaultTableModel (tecnologías Java, las cuales le ayudaran a resolver cosas específicas con Swing.
El objetivo es que cada grupo pueda generar una solución de propósito general que permita apoyar, para el dominio especifico del problema seleccionado, ajustes de curvas, en este casi líneas rectas, que permitan su modelamiento.
Cada aplicaciones debe manejar los procesos de actualización de datos de ajustes, ingresar los puntos (x, y) y la aplicación de la curva ajustada a distintos casos de la problemática seleccionada.
De modo que el grupo pueda lograr los siguientes objetivos:
 -  Conocer y operar satisfactoriamente sobre la arquitectura cliente-servidor.
 - Resolver un problema, de aplicación de ciencias de la ingeniería, a partir de los  conocimientos puestos en relación en la asignatura.


Descripcion de la Problematica

Obtener la ecuación de la recta, el “a”, el “b” y el “r2” (coeficiente de correlación) a partir de los puntos ingresados “x” e “y” los cuales son años y cantidad de población en miles.
Esto nos permitirá ver el crecimiento de la población durante los años en forma lineal ascendente.
Además a partir de la ecuación se podrá obtener la predicción de población para un año futuro “x”


Ejemplo
Años    Poblacion
1991     200 
1992     300            
 
los datos de poblacion al ser ingresados al programas son multiplicados por 1000 es por ese motivo es que los datos de poblacion que se muestran en este ejemplo corresponden a 200.000 y 300.000 respectivamente.
 
Resultados:
 
La ecuación para los datos ingresados es:  y=100x+-198900
a = 100 b = -198900 r2 = 1


Diagramas de clases

diagrama aplicacion por consola



Diagrama de clases aplicacion con interfaz grafica

Diagrama de actividades

 

Implementacion de operaciones
Las operaciones utilizadas fueron las de regresión lineal para calcular a, b y r2:

Capturas de pantalla

programa por consola






programa con interfaz grafica





lunes, 14 de noviembre de 2011

Robot Patrulla

Autor: Rodrigo Bermedo
Competencia:Gestion de TI
Palabras Claves: NXT, NXC, Lego, Programacion



Descripcion de la Actividad

Actividad número 4, en la cual se nos otorgo la misión de programar un robot patrullero, el que debía ser capaz de recorrer una ruta ya establecida alrededor de una casa que está vigilando, ya que no se cuenta con un robot y una casa para realizar una prueba real, realizamos la simulación de esta con nuestro robot NXT en la pista de pruebas , donde obtuvimos excelentes resultados, los cuales daremos a conocer en este trabajo al igual que la forma en que desempañamos la actividad.
 Pseudocodigo


#define UMBRAL 40
#define SONIDO 80
#define DISTANCIA 10
Potencia=60;
Robos=0;
Alerta=0;
Alerta2;
Energia=500;
Energia_usada;
El  funcionamiento del robot  pasara por 3 estados(subrutinas):
MODO PATRULLA
 {Mientras  (Detecte el color negro)
  { avanzar ;
     Si (el sensor de luz detecta el color blanco)
       { Hacer un pequeño giro para volver a la ruta;}
    Si (el sensor de sonido registra un ruido)
      {Detenerse;
       Emitir una sirena;
       Sumar 1 a la cantidad de robos;
       Mostrar en pantalla los intentos de robo;
       Mostrar en pantalla el nivel de alerta después de cada   
       ruido detectado;
       Mostrar en pantalla la energía restante después de cada   
       ruido detectado;}
 }
}
MODO GUARDIAN
{ Si ( el nivel de alerta es mayor igual a 100)
    {hacer un pequeño giro;
      Avanzar;
      Mientras ( la energía sea mayor a 0)
      { girar a una velocidad media;
        Si (el sensor de sonido detecta un ruido)
             {Emitir sirena;
              Sumar 1 a la cantidad de robos;
              Mostrar en pantalla los intentos de robo;
              Mostrar en pantalla el nivel de alerta después de  
              cada ruido detectado (sumara un valor al azar  
              entre 20 y 50);
              Mostrar en pantalla la energía restante después de
              cada ruido detectado (decrecerá en un numero al
              azar entre 50 y 60;}
        }
      }
}
MODO ATAQUE
{Mientras  (la energía sea menor o igual a 0)
   {Apagar motores;
       Si (el sensor de ultrasonido es menor o igual a 10 cm)
         {Avanzar a velocidad máxima;
           Durante 1 segundo;
           Retroceder;
           Durante 1 segundo;
           Mostrar en pantalla los intentos de robo;
           Mostrar en pantalla el nivel de alerta después de
           cada ruido detectado;
           Mostrar en pantalla la energía restante después de
           cada ruido detectado;}
  }
}
COMIENZA EL FUNCIONAMIENTO DE NUESTRO ROBOT ()
{Activa sensor de luz;
 Activar sensor de sonido;
 Activar sensor de ultrasonido;
Hacer llamada a la subrutina MODO PATRULLA;
Hacer llamada a la subrutina MODO GUARDIAN;
Hacer llamada a la subrutina MODO ATAQUE;
}


Codigo Fuente

#define UMBRAL 40
#define SONIDO 80
#define DISTANCIA 10
int Potencia=60;
int Robos=0;
int Alerta=0;
int Alerta2;
int Energia=500;
int Energia_usada;

sub MODO_PATRULLA()
{
  while (Sensor(IN_4)<UMBRAL)
  {
   OnFwd(OUT_C,55);
   OnFwd(OUT_B,Potencia);
    if (Sensor(IN_4) > UMBRAL)
     {
      OnFwd(OUT_B, Potencia);
      OnRev(OUT_C,55);
      }

    if(Sensor(IN_2)> SONIDO)
      {
       Off(OUT_BC);
       PlayTone(865,500);
       Wait(400) ;
       PlayTone(100,500);
       Wait(400) ;
       PlayTone(865,500);
       Wait(400) ;
       PlayTone(100,500);
       Wait(400) ;
       PlayTone(100,500);
       Wait(400) ;
       OnFwd (OUT_BC,Potencia);


       Robos++;
       TextOut(0,65,"Intentos de robos:");
       NumOut(0,55,Robos);

       Alerta2=Random(31)+20;
       Alerta=Alerta+Alerta2;
       TextOut(0,45,"nivel de Alarma:");
       NumOut(0,35,Alerta);

       Energia_usada=Random(11)+50;
       Energia=Energia-Energia_usada;
       TextOut(0,25,"Energia restante:");
       NumOut(0,15,Energia);
       }
    }
 }
sub MODO_GUARDIAN()
{
  if(Alerta>=100)
   {
    OnFwd(OUT_B,Potencia);
    OnRev(OUT_C,Potencia);
    Wait(250);
    OnFwd(OUT_BC,Potencia);
    Wait(800);

    while(Energia>0)
    {
    OnFwd(OUT_B,50);
    OnRev(OUT_C,50);
    if(Sensor(IN_2)> SONIDO)
     {
      PlayTone(865,500);
      Wait(400) ;
      PlayTone(100,500);
      Wait(400) ;
      PlayTone(865,500);
      Wait(400) ;
      PlayTone(100,500);
      Wait(400) ;
      PlayTone(100,500);
      Wait(400) ;

      Robos++;
      TextOut(0,65,"Intentos de robo:");
      NumOut(0,55,Robos);

      Alerta2=Random(31)+20;
      Alerta=Alerta+Alerta2;
      TextOut(0,45,"Nivel de alarma:");
      NumOut(0,35,Alerta);

      Energia_usada=Random(11)+50;
      Energia=Energia-Energia_usada;
      TextOut(0,25,"Energia restante:");
      NumOut(0,15,Energia);
      }
     }
    }
 }
sub MODO_ATAQUE ()
{
  while (Energia <= 0)
   {
    Off (OUT_BC);
    if(SensorUS(IN_3)<= DISTANCIA)
     {
      OnFwd(OUT_BC,100);
      Wait(1000);
      OnRev(OUT_BC,100);
      Wait(1000);

      Robos++;
      TextOut(0,65,"Intentos de robos:");
      NumOut(0,55,Robos);

      Alerta2=Random(31)+20;
      Alerta=Alerta+Alerta2;
      TextOut(0,45,"Nivel de Alarma:");
      NumOut(0,35,Alerta);

      Energia_usada=Random(11)+50;
      Energia=Energia-Energia_usada;
      TextOut(0,25,"Energia restante:");
      NumOut(0,15,Energia);
      }
    }
 }

task main()
{
  SetSensorSound(IN_2);
  SetSensorLight(IN_4);
  SetSensorLowspeed(IN_3);
  MODO_PATRULLA();
  MODO_GUARDIAN() ;
  MODO_ATAQUE()  ;
}


Video de la Actividad 



Laboratorio de Programacion

Autor: Rodrigo Bermedo
Competencia: Aplica ciencias de la ingenieria
Palabras Claves: Java, NetBeans, programacion


Descrpcion de la Actividad

este laboratorio consistia simplemente en pedir al usuario que ingresara un numero cualquiera y que luego ingresar un digito que quisiera borrar del numero anteriormente ingresado. esta actividad si es manejada con String no presenta mucha dificultad debido a que la clase String posee muchos metodo para realizar diferentes funicones como calcular el largo de una cadena etc, pero esta actividad se realizaba solamente con variables de tipo INT lo que difucltaba un poco las cosas sobre todo en lo que se refiere a saber cuantos digitos posee el numero ingresado.
 
 
Entrada:

Tipo: Int.
Cantidad: 2
Restricciones: Entero Positivo, hasta máxima capacidad de Integer, En la segunda entrada un entero entre 0 y 9.


Salida:

Tipo: Int.
Cantidad: 1
Restricciones: Entero positivo, hasta máxima capacidad de Integer.


Generalización:

Declaración de variables int
Numero, numero2, numeroBorrar, largo, división, modulo, suma, suma2, exponente.
Como ejemplo
Numero = 1234
NumeroBorrar = 4
Numero2 = numero

Mientras (división sea mayor que 0)        /* este ciclo es para determinar el largo
{  división= numero/10                              * de la variable numero*/
  Numero = división
  Largo +1 }

Transcurrido este ciclo la variable largo tendría valor 4

Mientras (largo sea mayor que 0)                       /*en este ciclo se realiza el
 {  modulo = numero2%10                                    *proceso para identificar los
    numero2 = numero2/10                                    *números a borrar*/
       si(modulo es distinto a numeroBorrar)
             {
                 suma = modulo * 10^exponente
                 suma2 =suma2+suma
                 exponente  +1
             }
             Largo -1
}
Terminado este ciclo la variable suma2 tiene el valor del numero sin los dígitos borrados en este caso suma2 = 123
  
 
Codigo Fuente

import java.util.*;

public class BorrarNumero
{
    public static void main(String[] args)
    {
       int numero;
       int numeroBorrar;
       int largo=0;
       int division=1;
       int numero2;
       int modulo;
       int suma=0;
       int suma2=0;
       int exponente =0;
     
       Scanner leer = new Scanner(System.in);
       System.out.println("ingrese un numero");
       numero = leer.nextInt();
      
       System.out.println("ingrese el numero que desea borrar");
       numeroBorrar = leer.nextInt();
       numero2=numero;
      
       while(division>0)//ciclo que obtiene el largo del numero.
       {
           division=numero/10;
           numero=division;
           largo++;
       }//fin del while.
      
       while(largo>0)//ciclo que hace el proceso de sacar cada numero.
       {
           modulo=numero2%10;
           numero2 = numero2/10;
          
          
           if(modulo != numeroBorrar)
           {
               suma = (int) (modulo*(Math.pow(10, exponente)));
               suma2 =suma2+suma;
               exponente++;

           }//fin del if.
           largo--;
          
       }//fin del while.
      
       System.out.println("numero resultante: "+suma2);
   }//fin del main.
}//fin.


Capturas de pantalla