Patricio Aros

xd

lunes, 14 de noviembre de 2011

Conexion BD - Bonus Point ClienteServidor

Autor: Patricio Aros Erices
Competencia: Aplica las ciencias de la ingeniería(Nivel 1)

  En el bonus point realizado donde se debía ingresar una persona en la base de datos, fue uno de los primeros acercamientos de lo que el principalmente cliente-servidor, aun asi en una parte específica de un bonus point se nos pedía hacer una comparacion de ruts dentro de una colección para que fuera ordenando automaticamente, esto se hizo ya que debíamos decirle de alguna manera al treeset como ordenar los rut segun se pidiera, en nuestro caso se hizo que solo se tomara el rut sin números y ver si es que este era mayor o menor a otro. Para realizar la operacion de ver si este era mayor o menor se debia separar del digito verificador los demas numeros ademas se debia sobreescribir el metodo llamado compareTo, por lo que mencioné antes que se le debe decir a la coleccion como ordenar los datos.
Para ejemplificarlo de alguna manera solo mostrare la parte de compareTo

@Override
    public int compareTo(Object objetoIn) {
        Persona otraPersona = (Persona) objetoIn;   // Transformo el objeto recivido, a un objeto del tipo persona.

       
        if (this.getRut().equalsIgnoreCase(otraPersona.getRut())) {
            return 0;
        }
        String[] rutDivIn = otraPersona.getRut().split("-");  

        String[] rutDivThis = this.getRut().split("-");  

        int rutSinGuionIn = Integer.parseInt(rutDivIn[0]); 
        int rutSinGuionThis = Integer.parseInt(rutDivThis[0]); 

        if (rutSinGuionThis > rutSinGuionIn) {
            return 1;
        }

        if (rutSinGuionThis < rutSinGuionIn) {
            return -1;
        }
        return 1;
    }

Como se aprecia en el codigo, primero que nada se sobreescribe el metodo que vamos a utilizar, luego toma un objeto y este se transforma un objeto de tipo persona(persona es la clase que se esta usando para crear contructores tipo  Persona, valga la redundancia), luego se va haciendo la operacion de ir separando el rut del numero verificador y simplemente ver si es mayor o menor retornar 1 o -1 segun corresponda para cada caso.

Reflexion
Aunque no se note mucho el uso de la matematica en sí cabe destacar que esta presente en la mayoria de trabajos y/o programas que realizamos, esto para obtener mejores resultados y para poder tener un software mas optimo, si bien fue solo comparación lo que se mostro en esta actividad, hay que mencionar que no es facil modificar un metodo ya existente para que funciona de manera distinta

Proyecto Robotica - PitFinder

Autor: Patricio Aros Erices
Competencia: Gestión en tecnologias de la información(Nivel 1)

Sinceramente uno de los proyecto que desde mi punto de vista fue de gran utilidad y podria llegar a serlo en la vida real, ya que no se ve tan dificil de sacar de la maqueta para convertirlo en un proyecto, e incluso es posible que ya se encuentre, no obstante, el aprendizaje dejado y la cantidad de sentencias nuevas creadas, creo que subio un poco el nivel de conocimientos que poseiamos.
Prototipo de lo que realizaría el robot
Este proyecto, era a simple vista fácil, pero no lo fue, dentro del codigo implementado en este programa, se tubo que crear arreglos, guardar datos en un archivo y mostrar este mismo archivo por pantalla de ladrillo. El objetivo principal del robot era que tenia que registrar las distintas distancias de los acantilados, la maqueta no poseia los bordes asi que es aqui donde hacemos llamar acantilado dentro de el contexto.Al momento de llegar al acantilado el robot debia detenerse, guardar la altura en un arreglo girar de manera aleatoria y dirigirse hacia otro lado, esto debia realizarlo un numero determinado de veces. A continuacion unas imagenes para demostrar de manera mas didactica lo escrito.





 A continuación un pequeño pseudocodigo de lo que debia hacer, sólo en algunas partes difiere del codigop debido que tubimos que reestructurarlos por sentencias nuevas y por lo que se pedia especificamente en la actividad

Declaramos nuestras variables;
Sub ARCHIVO(){
Crea un archivo;
Guarda las cadenas en nuestro archivo;
para precipicios sea <= 4 {
precipicios++;
Transforma cantidad de precipicios a estring;
Transforma el arreglo[precipicos] a estring;
Junta los String creando una nueva cadena;
Guarda la nueva cadena;
}
Cierra el archivo;
}
Sub Guarda_Distancia(){
Guarda las alturas en un arreglo[a];
Muestra en pantalla la altura registrada;
Aumenta en 1 la variablea a para guardar en el siguiente arreglo;
}
Tarea Recorrido(){
Mientras (alturas sea<=4){
Avanzar;
Si (sensor de proximidad > 20){
Apagar motores;
Esperar 1 segundo;
Llamar sub GUarda_Distancia();
Retroceder durante 1,20 segundos;
Girar aleatoriamente;}
}
Apagar motores;
Llama sub Archivo();
Limpia la pantalla;
Abre nuestro archivo;
Revisa que todo este correcto;
Si (es correcto?)
Imprime en pantalla;
Espera 5 segundos;
Cierra el archivo;
}
Ejecutar programa(){
Llama las tarea(Recorrido);
Activa sensor de proximidad();
}

El codigo fuente es el siguiente:


Código Fuente:

//Declaramos las variables que ocuparemos.
int Distancia[4];
int a=0;
int i=0;
int j=0;
int num=0;
string linea="=>";
string nums;
byte puntero;
string cadena;
byte bytesEscritos;
mutex Mult;
string leer;
int bit=512;
string Dis="Distancia ";
sub Archivo()
{
    DeleteFile("Reportefinder.txt"); //Borra el archivo para actualizar los datos
    CreateFile("Reportefinder.txt", bit, puntero); //Creamos un archivo con un tamño de 512 bytes
    WriteLnString(puntero, "ReporteDistancia", bytesEscritos);// guardamos una cadena en nuestro archivo
    WriteLnString(puntero, "--------------------", bytesEscritos);
    for(j=0; j < ArrayLen(Distancia); j++)// for en el cual hace que se realize 4 veces
    {
     num++;// cuenta los precipicios
     nums= NumToStr(num);//Transorme la cantidad de precipios a String.
     cadena = NumToStr(Distancia[j]); //Transforma la altura obtenida en String
     cadena =  Dis + nums + linea + cadena; //Junta todas las cadenas
     WriteLnString(puntero, cadena, bytesEscritos);// Guardamos la cadena creada el archivo.
    }
 CloseFile(puntero);// Cerramos el archivo creado.
}
sub Guarda_Distancia()    //subrutina donde guardaremos la cada una de las alturas.
{
Distancia[a]=SensorUS(IN_3);  //Guardamos altura
NumOut(0,10*a,Distancia[a]);  //Imprimimos en pantalla
a++;  // aumentamos a para guardar la nueva altura en el siguiente arreglo
}
task Recorrido()  //Tarea recorrido
{
while (i<4)    //Mientraas i sea <a 4 realizar:
{
 OnFwd(OUT_AB,50); // Avanzar a potencia 50
 if (SensorUS(IN_2)>20)// si el sensor de proximidad  es mayor a
 {
  i++; // aumentar en uno i
  Acquire(Mult);
  Off(OUT_AB); //Apagar motores
  Wait(1000);  //Esperar 1 segundo
  Guarda_Distancia();// Llamar sub rutina
  OnRev(OUT_AB,40); // Retroceder
  Wait(1200);  // Durante 1,2 segundos
  OnFwd(OUT_B,20); //girar en una forma aleatoria
  OnRev(OUT_A,20);
  Wait(Random(280)+380);
  Release(Mult);
 }
}
int coordenada=50; //Cordenadas de la pantalla
bool fals = false; //Variable booleana
Off(OUT_AB);  //Apagar motores
Archivo();    //Llamar subrutina archivo
ClearScreen();//Limpiar pantalla
OpenFileRead("Reportefinder.txt", bit, puntero); //Abrir el archivo guardado y agregar datos
while (fals == false){ // Leer el archivo de texto hasta el final
if(ReadLnString(puntero,leer) != NO_ERR) fals = true;//si la linea leida es distinta a NO_ERR falsa es verdadero
TextOut(LCD_LINE8,coordenada,leer);  //Imprime en pantalla
coordenada= coordenada-10; //cambia las coordenadas de impresion.
Wait(500);}
Wait(5000);//Espera 5 segundos
CloseFile(puntero); //cierra el archivo
}
task main()//conmienza a funcionar nuestro programa.
{
Precedes(Recorrido);//Llama las tareas
SetSensorLowspeed(IN_2);//se activa el sensor e proximidad.
}

Y para finalizar lo con respecto al proyecto una pequeña muestra del video, que fue grabado mientras se ejecutaba este codigo y como trabajaba el robot sobre la maqueta.

Reflexion

Lo que desarrollo en mi esta actividad fue un tanto el hecho de poder integrar nuestros conocimientos en algo que hoy en dia mucha gente practica y es el montañismo, con un robot de este tipo se podria verificar zonas y acantilados para poder realizar una subida mas segura y por caminos mas confiables, ademas de partes donde el humano ya pierde o puede perder el sentido debido a la presion del aire, dejando claro que no es un proyecto sólo por trabajar sino uno que puede usarse para implementarlo en situaciones reales para problemas y/o motivos de investigacion.

Proyecto Numero 2 - Robot Destructor

Autor: Patricio Aros Erices
Competencia:Gestion en tecnologias de la información

Uno de los primeros proyectos que realizamos en nuestro ramo de robotica, el cúal nos introdujo un poco a lo que eran este tipo de trabajos que podrian ayudar en la sociedad y en distintas áreas. En este proyecto logramos tomar un vista un poco de lo que se podria hacer en la vida cotidiana, ya que el trabajo era programar a nuestro ladrillo para que destruyeras pilares, como? pues simple, se supone que nuestro robot poseia  5 explosivos los cuales debia usar para detonar 5 pilares y terminado esto  emitir un sonido para indicar que ha terminado.
Lo que hizimos primeramente en la actividad fue crear un pseudocodigo que nos guiase para programar luego mas rapido y de manera eficiente. A continuacion el que usamos:


{ Contador = 0
   Avanzar
   Hacer siempre
       {    
            Si el SensorTouch se activa
            ContadorChoques = ContadorChoques + 1
Detener Motor
Retroceder 0.5 segundos
Detonar explosivos (sonido)
Esperar 2 segundos
Girar a la derencha en un ángulo entre 90 y 720 grados
Avanzar
          }
   Si ContadorChoques = 5
          { Detenerse
             Tocar melodía
             Apagar Funciones }
      }

Aproposito como esta en la pestaña de conceptos importantes, el pseudocodigo es una manera de escribir el codigo pero, como si fuera el lenguaje que usamos habitualmente paso por paso y detalladamente, para luego intentar convertirlo en un codigo ejecutabla y ver si funciona de manera correcta. Con este pseudocodigo ya realizado logramos hacer un codigo funcional que este este que viene a continuación.

int Giro;

int contador = 0;

task main ()



{

 SetSensorTouch(IN_1); // Setear el sensor

 OnFwd(OUT_AC, 75); //Avanzar

 while (5)                        // Ciclo que se repite continuo





 { if (SENSOR_1==1) // se active el sensor

    { Giro=Random (2000) +  500; // Giros

      OnRev(OUT_AC, 50); //

      Wait(500);

      PlayTone(500, 1500); // Sonido al chocar

      Off(OUT_AC);

      Wait(2000);

      OnFwd(OUT_C, 75) ;  // Giro hacia la derecha

      OnRev(OUT_A, 75);

      Wait(Giro);

      OnFwd(OUT_AC, 75);



      contador++;



{ if (contador==5)

       {Off(OUT_AC);

        PlayTone(900,1000);

        Wait(1500);

        StopAllTasks();  }  }



}

}

      }

Reflexion
La manera en que se realizó esta actividad me facilito y me enseño una manera mas de como poder usar los robots, aplicando de manera lógica las herramientas que poseiamos para realizar una mejor actividad, ya que como bien dije, esta fue uno de los tantos proyectos donde haciendo uso de software y hardware, logramos programar un esqueleto o Beta, de lo que podria ser un espectacular robot para destuir edificios antiguos con explosivos sin estar arriesgando vidas innecesariamente.

Introducion a T.I - Programas en SimuProc

Autor: Patricio Aros Erices
Competencia: Gestion en las tecnologias de la informacion(Nivel 1)

Al comienzo de la carrera se nos dijo que, lo que originalmente se programaba antiguamente era en un codigo muy cercano al maquina, en este caso, en el idioma que utilizamos fue llamado codigo de maquina , y segun tengo entendido hasta ahora es el codigo mas de bajo nivel del cual hemos hecho uso, en este simple programa se tomaban promedios de numeros y luego se mostraban en pantalla. Como mencioné parece ser un codigo un tanto fácil, pero el momento en que lo realizamos no teniamos tantos conocimientos y por lo que se nos hizo muy complejo y mas aun por el hecho de que solo teniamos la ayuda del mismo programa, y en internet no exitian turoriales ni ejemplos a seguir como otros programas.
En general como mencione el programa debia tomar numeros y luego poder sacar el promedio, luego como actividad secundaria, debiamos anotar los ciclos de procesamiento y lo que hacian, principalmente logre extraer esto.

 Primer ciclo
-Escribe en pantalla un mensaje
-leo en pc la próxima dirección a ejecutar: 000
-Envio al MAR la próxima dirección de mem a leer
-Llevo el MDR el contenido de dicha dirección DE MEMORIA
- Le entrego al IR el dato para qué lo decodifique e incremente el pc
Ciclo 2
- Escribe en pantalla un mensaje
-leo en pc la próxima dirección a ejecutar: 001
-Envio al MAR la próxima dirección de mem a leer
-Llevo el MDR el contenido de dicha dirección DE MEMORIA
- Le entrego al IR el dato para qué lo decodifique e incremente el pc
-cla vuelvo AX=0
Ciclo3
-leo en pc la próxima dirección a ejecutar: 002
-Envio al MAR la próxima dirección de mem a leer
-Llevo el MDR el contenido de dicha dirección DE MEMORIA
- Le entrego al IR el dato para qué lo decodifique e incremente el pc

CICLO 4
-llevo la pos de memoria 089  a MAR de donde lo que voy a suma a AX
-llevo al MDR el contenido de la dirección 089
-leo AX y MDR para ser llevados a la ALU y realizar la suma
-después de realizada la suma, almaceno el resultado en AX


 En programa o codigo mas bien era este, esta con comentarios para una mejor comprension del lector, espero que se haya logrado ese objetivo

#Autor: Patricio Aros Erices
mov cx,082  ;se copia en cx el valor almacenado en la posicion de memoria 082
#001
mov bx,015  ;se copia en bx el valor almacenado en la posicion de memoria 015
lda 048  ; carga en ax el el contenido de la memoria mas algo?
ldb 053  ;  carga en ax el continido de la memoria
add 053  ;se suma a ax el valor guardado en la posicion de memoria 015
sta 017  ;se guarda el valor de ax en la posicion de memoria 017
inc 015  ;se incrementa en 1 el valor almacenado
mov bx,015  ;se copia en bx el valor almacenado en la posicion de memoria
loop 001   ;se decrementa el valor de cx hasta que sea 0
div 048  ; se divide el valor de ax por el numero guardado
msg "el promedio entre los numeros es"
eap  ;se muestra en pantalla el valor de ax
hlt  ;finaliza

#048
110   ;cantidad de numeros a promediar:

;numeros que se promediaran
#053
1011101
10000
101
1100010
100111
101111
1

#015
1

Reflexion
Como se pudo admirar parecer ser un simple codigo, pero se trabaja con espacio de memoria en el mismo procesador, las cuales hay que especificar, ademas de que se esta trabajando con numeros en binario, más aun cabe dar cuenta de que el programa como menciona al principio solo saca promedios, lo que considere como problema y gestion de las tecnologias que aunque no se usan generalmente nunca esta mas de saber por razones de conocimiento y que probablemente nos ayuden desarrollando un poco la logica.

Ajuste de Curvas - Base de datos

Autor: Patricio Aros Erices
Competencia:Aplica las ciencias de la ingenieria(Nivel 1)

Tiempo atrás el humano, en su afán por comprender todo, descubrio la matemática la cual hoy en dia es indispensable en muchos ambitos, es así que a travéz de investigacion lograron de cierta manera predecir el futuro o algo muy similar.
En la presente actividad, se nos pidio hacer uso de matematicas, en un tipo experimento para poder predecir en que momento un objeto que se mueve a una velocidad mas o menos constante, en nuestro caso una pelota, esta fue grabada desde arriba para ir sacando las cordenadas en que se movia, para esto se hizo uso de un programa en Java llamado Tracker,con el cual, por el video obtivimos las coordenada x e y, luego otro programa en java, creado por uno de nuestros estudiantes de 2 año, de manera sencilla creamos la sentencia para agregar estos puntos a una tabla en determinada Base de Datos, ya con esto debiamos hacer las siguientes actividades, aqui estan con algunas capturas de pantalla que se tomaron al momento de hacer las consultas respectivas.


Variables Y:
 @promedioY

@desviacion Y:


@varianza Y:


@maximo Y:
 
Variables X:

@promedio X:


@desviacion X:



@varianza X:

 
@suma X:

 
1.1.- Determinar los coeficientes a y b mediante el método de los mínimos cuadrados

Primero obtenemos la pendiente

@pendiente:
 
Después obtenemos el intercepto

@intercepto
Después de haber obtenido la pendiente y el intercepto estamos en condiciones de obtener la regresión de mínimos cuadrados
 
.2.- Establecer tres rectas alternativas a la establecida mediante mínimos cuadrados a partir de inspección visual de la nube y la selección de dos puntos.


Recta 1
Nº punto
x
y
27
3.931
2.577
34
4.651
3.079



Creamos una tabla llamada recta1
 
Cargamos los puntos


 
Sacamos los promedios de x e y
 
Luego obtenemos la pendiente de la recta1
 
Ahora obtenemos el intercepto
 
Una vez obteido el intercepto y la pendiente procedemos a calcular la ecuación para la recta1

 Recta2
Nº punto
x
y
8
1.564
1.002
17
2.712
1.75
 






 
Creamos la tabla llamada recta2 
 
Insertamos los puntos en nuestra tabla 
 
Sacamos los promedio de x e y

 
Ahora obtendremos la pendiente de la recta 2
 
Ahora obtenemos en intercepto de la recta 2

 
Ahora teniendo la pendiente y el intercepto de la recta 2 calcularemos la ecuación
Recta3

Nº punto
x
y
30
4.314
2.83
55
5.458
3.703

Ahora creamos una tabla llamada recta 3
 
Sacamos el promedio para x e y


Ahora sacamos la pendiente


Ahora obtenemos el intercepto


Ahora calculamos la ecuación para la tercera recta


Reflexiones:
Si bien este fue un trabajo muy ajetreado para mi y nuestro grupo, hay que destacar la cantidad de cosas que aprendimos, ya que en su momento no teniamos el conocimiento de aplicar las matematicas en la Base de Datos y asi obtener consultas, con los datos ya obtenidos, y las consultas hechas nos dimos cuenta la gran cantidad de sentencias o mas bien, operaciones que logramos realizar con exito en nuestra base de datos, algo tan simple como esto puede ayudar bastante en empresas, no aplicando exactamente esto mismo, pero la idea en general si.