sábado

Informe de Regresión Lineal

Competencia: Comunicación Escrita (Nivel 1)
Palabras Clave: SQL, Regresión Lineal, Base de Datos, Texto, Gramática.

Descripción

      En introducción a los sistemas de base de datos se nos pidió realizar un informe en base a un video grabado en clases y el uso de Tracker, un software que genera coordenadas a partir de un video. Esta entrada no trata del desarrollo de la actividad en si, si no más bien el aspecto de la preparación del informe, el cual fue evaluado en aspectos de ortografía y gramática.


Modelo de Solución
  
    El informe se encuentra en el siguiente link, en la sección del modelo de solución.
    Para mi, el desarrollar un informe consta de varias partes, y el informe presentado no fue la excepción. Comencé desarrollado un boceto en función de la pauta propuesta por el profesor. Este boceto consta más que nada de ideas a desarrollar.
     Con el boceto construido doy pie al desarrollo de las ideas. En este aspecto trato de ser minucioso con la ortografía y generalmente me asisto de un corrector ortográfico presente en el equipo portátil que uso.
      La gramática de cada párrafo la evalúo mediante varias lecturas, buscando el sentido del párrafo y que sea congruente a la idea general y que aporte al desarrollo de las sub ideas. 
     Para finalizar hago una corrección de estructura visual, la cual es relacionada a márgenes, destacados, interlineados, etc.


Reflexión

    El desarrollo de un informe suele ser bien complejo puesto que se debe dar una estructura organizada a las ideas y desarrollo del mismo. Sin embargo, sigue siendo un aspecto fundamental, ya que es la cara visible del trabajo realizado sobre un tópico y el medio que posee el profesor para evaluar.
     A mi parecer el informe es un documento que prevalece en el tiempo para ser estudiado a futuro, por lo que considero que una buena construcción de éste es fundamental.  

   


2do Sprint

Competencia: Comunicación Oral (Nivel 1)
Palabras Clave: Proyecto, Sprint, Comunicación Oral, Base de Datos.

Descripción

    En la Asignatura de Taller de Integración I, se nos pidió la creación de un proyecto. Construirlo por etapas, las cuales se debían presentar a lo largo del semestre. De éstas etapas decidí presentar el segundo Sprint ya que abordaba principalmente un tema el cual es de mi agrado, las Bases de Datos.
     En estas presentaciones éramos evaluados por un profesor y retroalimentados una vez terminado de dar a conocer el avance.

Modelo de Solución

    A continuación las diapositivas presentes el día de la exposición. 
1
(Presentación breve de integrantes del Proyecto y de quienes exponían)

2
(Relato del concepto del Proyecto)

3
(Descripción de los contenidos a exponer)

4
(Descripción del avance propuesto vs avance logrado)

5
(Desarrollo y explicación de la Base de Datos)

6
(Propuesta de avance para la semana siguiente)

    Si bien la presentación es breve, yo debía profundizar bastante en el tema de la quinta diapositiva. La que muestra la base de datos. En esta diapositiva debía explicar a los asistentes y al profesor el cómo funcionaba y el porqué de cada entidad presente en el modelo. Además estar preparado para responder cada pregunta al respecto.



Reflexión


    Esta actividad es relativamente sencilla, ya que para mi caso no requería de una dedicación de estudio en el aspecto técnico de lo que iba a exponer, sin embargo, toda presentación requiere de elaborar todo lo que se quiere decir, y del cómo decirlo. Presentar una idea requiere de seguridad sobre lo que se está exponiendo.  Al igual que todos, siempre siento un poco de nervios antes de presentar, pero durante la actividad se debe olvidar ese nerviosismo y tratar de entregar todo. 
    La retroalimentación entregada por el profesor es un aspecto fundamental para corregir errores y potenciar virtudes.

Actividad 1 - Proyecto de Robótica

Competencia: Aprendizaje Autónomo (Nivel 1)
Palabras Clave: NXC, Lego, Mindstorm, Programación, Robots.

Descripción

    Al retorno de vacaciones, continuamos con la programación en NXC. Esta vez la asignatura es Proyecto de Robótica y como primera actividad se nos pidió construir una aplicación para el robot NXT que repasara conceptos de la asignatura anterior y además implementar un contenido nuevo, la entrega de parámetros. Además para evaluar nuestro aprendizaje autónomo se nos pidió implementar al menos 2 instrucciones de una lista de 13. 
    La actividad consistía en desarrollar el código NXC para un robot se desplaza por una superficie blanca con puntos negros. La superficie es rectangular y posee paredes en sus bordes. Construya un robot que implemente las siguientes funcionalidades:
  1. Cada vez que el robot choca con una pared debe:
  1. retroceder un poco,
  2. girar 180° a la izquierda o derecha,
  3. disminur su potencia en 10,
  4. contar los choques con las paredes,
  5. y seguir su recorrido con la nueva potencia
  1. Al pasar por un punto negro debe:
  1. contarlo,
  2. girar en un ángulo aleatorio menor a 180° a la izquierda o derecha,
  3. aumentar su potencia en 10,
  4. y seguir su recorrido con la nueva potencia.
  1. El robot se desplaza por tiempo indefinido, deteniendo su recorrido ante una señal auditiva sobre 80 db.
  2. Al final del recorrido, informará en su visor el n° de choques y el n° de puntos negros detectados.
Los giros y cambios de potencia se implementarán con una subtarea exclusiva para ello, con la siguiente estructura:
sub GiroPotencia(int t, string direccion, string evento)
donde,
        t                tiempo de giro
        direccion        dirección de giro, “D” -> Derecha, “I” -> Izquierda
        evento        especifica si es “choque” o “círculo”
    La potencia utilizada por el robot en el avance, nunca debe sobrepasar 100 ni ser menos de 30.

   El listado de instrucciones está compuesto por:
OnFwdReg(),
OnRevReg()
Float(),
Coast()
GraphicOut(), LineOut(), PointOut(), RectOut(), CircleOut()
RotateMotor(), RotateMotorEx()
OnFwdSync(),
OnRevSync()




Modelo de Solución

    La solución propuesta por mi grupo consistió en:


Estrategia de Trabajo

    La Actividad #1 de Proyecto de Robótica se nos presenta como la combinación de todos los contenidos aprendidos durante el Primer semestre en Programación de Robots.
    Considerando Que De Partida Se nos Pide este nivel de complejidad y agregando un nuevo componente (el uso de parámetros), procedemos a separar nuestro código en subtareas y encargar a los miembros del grupo la tarea que mejor manejaban (según aprendieron el semestre anterior). Esto nos tomó muy poco tiempo puesto que reciclamos códigos anteriores, adaptandolo a la actividad actual.
    Ahora, si bien el Programa cumplía el objetivo, necesitaba aun cumplir con lo pedido:
Que Según el Evento que se produjera (Choque ó Punto) Este Generase un Identificador para que sea enviado al método:

sub GiroPotencia(int t, string direccion, string evento) “

el cual determinaba que tipo de movimiento debía hacer.
Implementar una subtarea de este tipo le dio la cuota de complejidad al trabajo, ya
que contar eventos y realizar giros no era algo nuevo para nosotros. Pero como bien hemos ido aprendiendo hay ciertas tareas que por repetitivas, conviene optimizarlas con el fin de evitar extensas lineas de código, procesos innecesarios, etc.
    Luego de Haber integrado Las Subtareas Principales del programa, nos quedaba ahora darle los pequeños detalles. Agregamos La restricción de que la potencia de avance debía estar siempre entre 30 y 100, agregamos las 2 instrucciones nuevas sobre las que teníamos que investigar y Acotamos que Todo este proceso se realizara hasta escuchar un ruido donde entonces se detendría y se mostrarían por pantalla los contadores de eventos que habíamos implementado.
     Nuestra Estrategia de Trabajo (usada ya durante todos estos meses), de comenzar de menos a mas, agregando a medida que se avanza las restricciones pedidas, Nos sirvió para no bloquearnos y no saber por donde comenzar con esta actividad que tenía muchas aristas y varios requisitos.
    Para finalizar, agregamos RecOut() a nuestro código, línea de código que permite dibujar un rectángulo en pantalla. 


Pseudocódigo
Mientras No Detecte Ruido Hacer:
{
    avanzar con “potencia” 
    SI Choque con pared:
    {
          contador de choques crece en 1.
          retrocede.
          Llama a GiroPotencia y le entrega sus parámetros Realiza un GiroPotencia
          la potencia se reduce en 10.
    }
    SI detecta un punto negro:
    {
           contador de puntos crece en 1.
           Llama a GiroPotencia y le entrega sus parámetros. Realiza un GiroPotencia.
           la potencia Crece en 10.
     }
    Muestra en Pantalla Los Contadores.
}


GiroPotencia
{
    SI recibe parámetros de Choque:

    {
        asigna una dirección Izquierda o Derecha
        asigna un Giro en 180o en esta dirección 
    }
    SI recibe parámetros de Punto Negro:
    {
         asigna una dirección Izquierda o Derecha 
         asigna un Giro Menor a 180o en esta dirección   

     }



Captura de pantalla 2011-12-17 a la(s) 15.22.17
Captura de pantalla 2011-12-17 a la(s) 15.22.50

Video



    Instrucciones de Aprendizaje Autónomo:
     
        OnRevReg() : La usamos para que el movimiento de reversa sea más regular, puesto que el tercer parámetro que se le entrega a la instrucción estuvo dado por OUT_REGMODE_SYNC, el cual sincroniza el movimiento de los motores.
        RotateMotor(): Aplicamos esta instrucción para realizar un giro de 180 grados sin la necesidad de estar "jugando" con la potencia vs tiempo como fue usada en trabajos anteriores.
        OnFwdReg(): Igual que OnRevReg(), pero en vez de ser usada para el retroceso, es usada para avanzar.
        RectOut(): Nos permitió dibujar un rectángulo en la pantalla del NTX.
        Float(): Es un alias para COAST, instrucción que detiene los motores y se detienen por inercia.


    Reflexión

        Para cumplir con el Aprendizaje Autónomo implementamos 5 instrucciones, si bien se nos pedía una cantidad menor, en nuestro afán de aprender más del lenguaje NXC, decidimos investigar una cantidad mayor. El resto de la actividad fue regular a lo que usualmente preparábamos para Programación de Robots, el trabajo en equipo y desarrollo y armado del robot.
          Estas actividades me resultan absolutamente motivadoras puesto que no son el típico desarrollo de un contenido en teoría, la implementación de la teoría en un concepto práctico como la robótica me generó una motivación mayor.


   

viernes

Informática y la Ética

Autor:Angel Aedo Busto
Competencia: Actuación Ética (Nivel 1)
Palabras Clave: Administrador de Sistemas, Ética, Informática,  Derechos de Autor, Licencia.

Descripción
  
     La actividad planteada consistía en dar respuesta a dos preguntas propuestas en un foro. Ambas preguntas eran orientadas a realizar un cuestionamiento en el marco de la ética en el área informática. Además, al estar propuestas como un foro, se debía comentar y argumentar preguntas y respuestas propuestas por el resto de usuarios. 
    La primera pregunta era:
Los administradores de sistemas por su rol y privilegios poseen prácticamente acceso a toda la información de una empresa. ¿ Cuáles son las responsabilidades éticas en la manejo de la información ?, ¿ Es posible poder determinar un marco ético informático ?.

    La segunda era:
Otras consideraciones éticas informáticas están en relación con el uso de del software y su propiedad intelectual. Existiendo alternativas de licenciamiento GNU/GLP, ¿ Es ético usar software con licenciamiento privativo sin pagar derechos de autor ?



Modelo de Solución

     Para construir mi respuesta investigué eventos y sucesos noticiosos referentes al tema, a modo de argumentar mi respuesta, si ésta era puesta en duda. Era evidente que resultaría imposible un total acuerdo entre todos los usuarios del grupo, es por esto que además de preparar mi respuesta en base a lo que consideraba acertado, además di lectura a cada respuesta de los usuarios del foro a modo de generar un debate sobre posturas.
    
    Mi respuesta fue: 
Es evidente que las responsabilidades que caen sobre el encargado de manejo de información es tremenda. El manejo de información se convierte en un tema complicado, pues mayoritariamente toda esa información es confidencial. Por ejemplo, el correcto funcionamiento de la milicia depende que su información sea confidencial, pues en esta información existen estrategias de ataque y defensa.
De este modo es fácilmente visible que un administrador de sistema posee bastante poder.
Eticamente, el manejo de la información, debe ser completa y absolutamente confidencial, esto ha de ser el pilar de un Administrador de Sistema. Sin embargo, esta característica primordial se ve en conflicto con la Moralidad del Administrador. ¿Como debiese actuar un Administrador de Sistema, si en la información que maneja evidenciara la existencia de información prohibida e ilegal?.
Es complicado dar respuesta a esta inquietud, pues él como administrador ha de cumplir su labor y compromiso con la institución a la cual pertenece, sin embargo ha de cumplir su rol de ciudadano y denunciar algún tipo de ilícito.

Determinar un marco ético informático, yo creo que es posible, basándose en un compromiso moral entorno a la sociedad. Esto quiere decir que un administrador de sistema debe estar comprometido con la confidencialidad de la información que maneja, pero jamás esta confidencialidad debe sobrepasar a lo que es el compromiso de denunciar lo incorrecto. Sin embargo, esto no debiera facultar al administrador para que tome un rol investigativo, sino mas bien apuntar a la eventualidad.
 
    Ésta respuesta no recibió debate alguno.
    Respecto a la segunda pregunta sobre software, mi respuesta fue la siguiente:
Existiendo alternativas de licenciamiento GNU/GLP, ¿ Es ético usar software con licenciamiento privativo sin pagar derechos de autor ?

Esta pregunta no debe ser respondida banalmente. Ha de conocerse que la ética es una valoración de la moralidad, por ende, pasa a ser la valoración de un concepto endógeno en un individuo.

Es por esto que me atrevo a responder que para mi, no tiene valor de cuestionamiento el usar un software con licencia, sin pagar por ella, aunque exista una alternativa que no requiera el pago por su uso. Esto no significa, que para el caso de un software que no sea evidente una alternativa de uso libre, no realice una evaluación del pagar o no por una licencia. Si este software, presenta un beneficio extra por la adquisición de la licencia, recién ahí estudio la posibilidad de pagar por su licencia.

Pero retomando la pregunta del enunciado, no considero que la existencia de una alternativa de uso libre, sea base para considerar ético o no, el uso de un software con licencia sin pagar por ella. Por lo que mi respuesta es:

No es cuestionable la ética desde ese punto. Se debe evaluar si es ético usar un software sin pagar sus derechos, independiente de las alternativas que existan. Si bien desde mi punto de vista no considero la ética para usar un software sin pagar por su licencia, pienso que a nivel empresarial o comercial de una institución resulta No ético que se haga uso de software sin pagar por él, ya que la institución podría estar generando beneficios monetarios con el software.
    
    Si bien no recibió una contrarespuesta, fui yo quien puso en jaque el cuestionamiento de alguno de los usuarios.
    Uno de ellos argumentó:
¿Es ético usar software con licenciamiento privativo sin pagar derechos de autor ?

En verdad no es nada de ético usar un software ajeno, ya que uno deviese pagar por su licencia.
Pero nadie respeta esto por las situacion económica que se presenta, pues para tener el sistema operativo mas utilizado como es windows, se deviese pagar una suma mayor a los 100.000 pesos lo que es una cantidad un poco elevada para una persona, sin agregar los programas que se tendran que adquirir por separado como por ejemplo microsoft office.
Pero tambien se tiene que tomar en cuenta que existen otros sist. operativos como son los linux que son gratuitos incluyendo los programas que se van a descargar.

    Mi aporte a su respuesta fue:

Estimado Usuario.
Unix no es código libre. Me parece que lo confundes con distribuciones GNU/Linux. De hecho Richard Stallman comenzó a trabajar en el proyecto GNU para lograr algo similar a UNIX, pero gratis. Si bien en el 2002 parte del código se liberó bajo una licencia BSD, sigue siendo en gran parte código Propietario.

Respecto a tu encuesta.

¿usas windows?No, pero usé por varios años.
¿con licencia original? En un comienzo si, pero cuando salió una versión nueva, usé sin comprar la licencia.
¿porque usas un windows pirata ? Usé windows pirata, porque como bien dices, no estaba dispuesto a pagar ese alto costo que representaba la licencia. Sin embargo, gracias a este acontecimiento sufrí de la mala experiencia que significa tener un software no original, lo que me llevó a usar un sistema operativo pagando su licencia.

   Otro de mis aportes  otro de los usuarios:

Otras consideraciones éticas informáticas están en relación con el uso de del software y su propiedad intelectual. Existiendo alternativas de licenciamiento GNU/GLP, ¿ Es ético usar software con licenciamiento privativo sin pagar derechos de autor ?

Desde que existe la Internet se tiene informacion en la red, esta siempre a sido publica , si bien hay contenidos privados estos son practicamente publicos por tanta masividad a la hora de obtener la informacion.
Cuando se hablan de programas con licencias pagadas o liberadas tenemos dos casos uno es aquellos programas que poseen multiples recursos para nuestra necesida que son pagados pero que previamente se activan con unos sencillos pasos, y las liberadas que a lo mejor no poseen tantos recursos que necesitamos pero si los suficientes para poder realizar nuestras actividades, ahora bien para mi el uso de licencias gratuitas pasa por una ideologia en la cual liberarse de todo pago y generar soluciones que sirvan a la gente y ami tambien, osea ocupar licencimiento GNU/GLP te permite desarrollarte en todas las facetas ayudarte a ti a mejor a lo mejor un programa que no tiene tantos recursos , pero que con un poco de mejora podria ser mucho mejor.

en cambio las de pago es un estricto control de tus actividades, si bien tienen multipicidad de recursos , a lo mejor muchos mas de lo que alguna vez necesitaras pero sabes que eso esta así , y lo mas importantes es que sabes que eso no se puede modificar que esta estructurado de una forma y que siempre sera así(hasta que saquen una nueva version), te ofrece todos los recursos que tu necesitas incluso mas pero esta estructurado.

Como dije anteriormente es una filosofia no es ocupar licencia GNU/GLP solamente porque esta de moda o porque a lo mejor llena tus expectativas a nivel macro , es saber interpretar que hay licencias pagadas y no que tu eliges eso , que es totalmente valido ocupar ambas sin pagar por el hecho de que se te da mucha informacion para poder ocuparlas sin pagar. Mi pensamiento siempre sera "Todo lo que hay en internet es Gratis", por algo esta hay y si tanto piensan que las licencias hay que pagarlas si o si , que las pague las universidades , porque hasta las universidades tienen licenciamiento fraudulento. la propiedad intelectual esta hecha para pagar por ella pero ante las opciones que nos da el mercado, abstienete, prefiere software con licencias GNU/GLP , pero si no puedes Unete al licenciamiento fraudulento, tanta gente en el mundo lo hace que una persona mas que lo haga no seria mucha perdida. Ademas con tantas utilidades que adquieren ellos .


   Respuesta mía:
Estimado Usuario.
Difiero un tanto con tu punto de vista, específicamente donde mencionas: "Todo lo que hay en internet es Gratis, por algo esta ahí".
Pienso a futuro crear algún tipo de aplicación y además lucrar de esto. Es indispensable que este producto reciba una distribución por internet. Me imagino que muchos más piensan como yo.
Es por esto que te planteo la siguiente pregunta.

¿Consideras que es correcto que el trabajo del programador no se vea retribuido por la existencia de personas que no desean pagar las licencias?.

Además en base a tu comentario que dice: "las universidades paguen las licencias". ¿Estas dispuesto a asumir este costo que indirectamente se traspasará a ti como usuario de la universidad?


   Si bien éstas no fueron las únicas respuestas dadas en el foro, consideré a éstas como relevantes.

Reflexión

     La actividad resulta compleja de llevar a cabo, pues todas las respuestas posibles serán en base a vivencias, costumbres o bien moralidad y no son prósperas en el tiempo. Es difícil dimensional marcos éticos para cualquier área ya que éstos pueden ser despreciables en un futuro. Si bien las respuestas eran variadas, siempre eran influenciadas en una experiencia en común dada por la cultura presente en todos nosotros al minuto de dar respuesta a las interrogantes. 
   Para mi resultó una experiencia enriquecedora, ya que me abre al mundo del debate y cuestionamiento del comportar ético en la informática. 

Regresión Lineal en Netbeans y SQL


Autor:Angel Aedo Busto
Competencia: Creatividad e Innovación (Nivel 1)
Palabras Clave: Regresión Lineal, Netbeans,  SQL, Progración, Recta.

Descripción 

    Desarrollar una aplicación basada en la arquitectura Cliente-Servidor de tres niveles (MVC: Modelo-Vista-Controlador), ésta 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 debe permitir al usuario ingresar los puntos (x,y) en una base de datos MySql.

     Uno de los software debe ser sobre consola y otro sobre Swing (ambos implementan transacciones).

    El objetivo es generar una solución de propósito general que permita apoyar, para el dominio específico del problema seleccionado, ajustes de curvas, en este caso lineas rectas, que permitan su modelamiento.

    Cada aplicación 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. 



Modelo de Solución

    Descripción de Regresión Lineal

    La regresión lineal es una herramienta de cálculo que permite calcular una recta a partir de una nube de puntos. Para esto son usados una considerable cantidad de par ordenados (x,y).
    La ecuación que permite la obtención de una recta está dada por:

Captura de pantalla 2011-12-10 a la(s) 3.01.39
    Donde “a” es parte de la ecuación de la recta y=ax+b. Por lo que la obtención de “b” está dado por:
Captura de pantalla 2011-12-10 a la(s) 3.05.20
    Una vez obtenida la ecuación de la recta, se puede validar su veracidad.
    Para esto se calcula la siguiente ecuación:
Captura de pantalla 2011-12-10 a la(s) 3.05.26

    Esta ecuación arroja un resultado entre 0 y 1, donde 1 es el valor máximo de veracidad, siendo de este modo el valor 0, lo más lejano a la validación de una recta.


Casos de Borde

    Matemáticamente, un punto de desborde está dado en la obtención de “a”. Pues al existir una división, el denominador jamás debe ser cero.

    Otro caso de desborde desde el punto de vista matemático, se da cuando todos los x, son iguales. Pues esto representa un recta con pendiente infinita. Esto quiere decir que la ecuación de la recta ya no está dada por y=ax+b, si no por x=(valor). 

    Estas 2 instancias matemáticas han de ser consideradas en la creación del trabajo, sin embargo, también han de ser consideradas los desbordes de las aplicaciones en si. Tal es el caso de ingreso de letras o caracteres ajenos a los dígitos, o bien fuera del formato establecido. A continuación se presentan ejemplos de entrada, proceso y salida, con descripción de solución planteada.

1. “0 , 1” ->[Proceso]->”Error”.
    Este caso, es el mencionado, en el apartado de errores matemáticos. Puesto que la ecuación de cálculo para “a” se encuentra una división. Es posible dar múltiples soluciones a este error, sin embargo la solución más práctica está dada en la base de datos. El lenguaje SQL cuando se encuentra con una división por cero, ésta retorna un valor Null. Quedando de este modo solucionado el problema de dividir por cero.

2. “1,1 <ENTER> 1,2 <ENTER> 1,3” ->[Proceso]->”Error”
    Para esta situación, el análisis matemático hace evidente que la ecuación de la recta no está dada en la forma y=ax+b, puesto que el x es constante. Esta ecuación será dada por X=1, para todo Y. Acá se presenta nuevamente una división por cero, tanto para la ecuación de obtención de “a” como para la obtención de R2. Nuevamente no es necesaria una solución por el programador de las aplicaciones, puesto que SQL se encarga de dar respuesta con un Null.

3. “1,8 <ENTER> 3,8 <ENTER> 7,8” ->[Proceso]->”Error”
    Al igual que el caso anterior tenemos una recta con una pendiente complicada, tal es el caso de pendiente cero. Es simplemente una recta paralela al eje x. Quedan Y=8, para todo X. Este tipo de caso presenta problemas en la obtención de R2, dado que convertirá al denominador de la ecuación en cero. No así en el caso de obtener “a” y “b”, pues si bien “a” es cero, “b” obtiene un valor que está dado en la igualdad de todos los puntos “y”, para este caso 8. Nuevamente el programador está a salvo pues SQL se encarga de asignar un NULL en el cálculo de R2.

4. “1,1 <ENTER> 1,1 <ENTER> 1,1” ->[Proceso]->”Error”
Este caso viene a ser la conjunción del 2 y del 3. Es evidente que matemáticamente se tendrán problemas para calcular “a”, porque se genera la división 0/0, luego como “b” se obtiene en función de “a”, también tendrá problemas desde el punto de vista matemático y finalmente R2, quedaría de la forma 0/(0*0). Para esto habiendo dado respuesta a los casos anteriores simplemente apoyándonos en la capacidad de SQL de retornar Null en las divisiones por cero, es notorio que se usará la misma metodología.

5. “2,4” ->[Proceso]-> “Ingresar más puntos”.
    Ahora este caso, si bien se mencionó anteriormente, Se debe ver desde el punto de vista de la programación. Al ser un solo punto, el promedio de ese punto será el mismo punto, por lo que en el cálculo de “a”, se generará una división por cero. SQL se encargará de retornar NULL, pero a nivel de programación para evitar este caso, simplemente se obiga el ingreso de más datos.

6. ...“2,a”... ->[Proceso]->”Dato no ingresado a la Base de Datos”
    Existe la posibilidad de realizar un ingreso erróneo, para esto simplemente las aplicaciones validan que el tipo de dato ingreso para cada par de coordenadas sea un dato número. De no ser numérico da el aviso de que el dato no fue ingresado, que en realidad está siendo validado antes de siquiera enviarlo.

7. ...“5,8” ->[Proceso]->”Desea Ingresar más Datos? (s/n)” “x” ->[Proceso]->”Desea Ingresar más Datos?(s/n)”
    Este caso es exclusivo del programa en consola. Con cada ingreso de datos, se le pregunta al usuario si desea ingresar más, para esto él puede dar por respuesta “s” o “n”. Si el usuario se equivoca, no se podría asumir ni “s” ni “n”, por lo que es prudente volver a preguntar hasta obtener una respuesta dentro de las 2 alternativas posibles.


Descripción de la Solución

    Para el diseño de la base de datos, se usarán solo dos tablas, una donde se almacenen los puntos y otra donde se almacenarán a, b y R2. La obtención de éstos valores será tarea de la Base de Datos y se realizará todo mediante vistas, ya que esta herramienta de SQL permite obtener valores sin necesidad de almacenarlos.


    El UML de la base de datos queda así:

Captura de pantalla 2011-12-10 a la(s) 3.05.49

Explicación:

    Está la tabla Parejas, que es donde son almacenados todos los pares de datos (x,y). Para la obtención de “a”, se crea una vista con el promedio de X y el promedio de Y, ésta vista es llamada por la vista “diferencia”, la cual resta cada valor de x con el promedio obtenido, lo mismo realiza para cada valor de y. Luego esta vista diferencia es llamada por Producto, la cual multiplica cada Diferencia de X con cada diferencia de Y. La vista Numerador se encarga de realizar la sumatoria de todos los valores de la vista Producto. Todo este camino genera el numerador de a en la siguiente ecuación:

Captura de pantalla 2011-12-10 a la(s) 3.06.00


    Para la construcción del denominador, realiza la sumatoria del atributo que corresponde a la Diferencia de X en la vista diferencia, al cuadrado. Luego vasta con realizar la vista que posea la división del numerador con denominador.

    Para obtener “b”, al estar en función de columnas ya creadas en las vistas, simplemente se llaman para ser operadas. Se necesita el Promedio de Y, obtenido en la Vista promedio, restar con el resultado entre la multiplicación de la columna a de la vista a, por la columna promedio de la vista promedio.

    Obtener R2, requiere de la creación de de 5 vistas más, las cuales siguen el mismo modo de operación que las vistas que generan a y b.

    De este modo, es posible realizar múltiples cálculos que no requieren almacenamiento de sus resultados, pues no son relevantes. Ya que al usuario final solo le interesa la obtención de la ecuación de la recta.



Desarrollo de la Solución en Java

    Al conocer que la aplicación solo requiere el ingreso de pares, su esquema de GUI es el siguiente:
Captura de pantalla 2011-12-10 a la(s) 3.06.08


    La aplicación GUI contará con 2 campos donde se pondrá cada valor X e Y respectivamente. El botón ingresar, al ser presionado sacará los datos de los campos, los validará como enteros y almacenará en un ArrayList. Este botón puede ser presionado tantos pares se deseen ingresar.

    El botón calcular permite llamar a las vistas que en la base de dato generan a,b y R2.



Interacción de Solución en Consola.

    Se pide el ingreso de X, luego de Y. Si uno de éstos no es un entero, retorna un error.


    Si el primer ingreso es correcto, ambos enteros, solicita inmediatamente el ingreso de un segundo par. De ahí en adelante preguntará posterior a cada par ingresado si desea ingresar más, de obtener una respuesta negativa, mostrará en consola el valor calculado de a, b y R2.




Diagrama de Actividad Solución Consola.

Captura de pantalla 2011-12-10 a la(s) 3.06.14

Captura de pantalla 2011-12-10 a la(s) 3.06.24

Captura de pantalla 2011-12-Fs10 a la(s) 3.06.40

Diagrama Actividad Solución GUI
Captura de pantalla 2011-12-10 a la(s) 3.06.47

Captura de pantalla 2011-12-10 a la(s) 3.06.52

Captura de pantalla 2011-12-10 a la(s) 3.06.58

Capturas Consola y GUI

Captura de pantalla 2011-12-10 a la(s) 3.07.21

Captura de pantalla 2011-12-10 a la(s) 3.07.31
Reflexión

    En la construcción de esta actividad para Cliente Servidor, tuve que abordar el problema bajo un marco de creatividad, puesto que el desarrollo de una interfaz gráfica requiere de analizar muchos factores, como es la ubicación de botones, tamaño de ventana, etc. 
    
    Además, cabe destacar los conocimientos adquiridos y aplicados para concretar la actividad.


Lo aprendido:


    Obtención de una Recta a partir de una nube de Puntos.
    Creación de una Aplicación por Consola que se conecta a una Base de Datos,
    Creación de una Aplicación con Interfaz gráfica que se conecta a una Base de Datos.
    Envío de Datos desde una Aplicación Java a una Base de Datos usando Lenguaje SQL formado en Java.


    Para dar solución al problema planteado nos vimos enfrentados a varias ideas, para cada idea modelamos una base de datos distinta, pero concordamos que no eran las más optimas. La implementación de Vistas por sobre creación de tablas permite a la base de datos no sobrecargar en peso por la acumulación de datos. Siendo las vistas simples operaciones por sobre datos ya existentes.


    En el aspecto de la implementación en Java, si bien el código que se debe aplicar no es sencillo, la principal dificultad radica en evaluar las posibilidades de desborde, que en gran medidas son los errores que puede cometer el usuario, siendo este tema el que se trató con mayor delicadeza en los programas.