Mostrando entradas con la etiqueta Microsoft Virtual Academy. Mostrar todas las entradas
Mostrando entradas con la etiqueta Microsoft Virtual Academy. Mostrar todas las entradas

viernes, 26 de mayo de 2017

Desarrollo en Windows Phone 8 - Microsoft Virtual Academy - MVA

A continuación se presentan los exámenes del curso "Desarrollo en Windows Phone 8", de la academia virtual de Microsoft. Espero que la información sea de ayuda en cualquier contexto profesional.

Indice









  

miércoles, 22 de febrero de 2017

Cómo encarar un proyecto tecnológico?



Prototipos
  • En algunas ingenierías o en arquitectura, se arman lo que se llaman prototipos del producto que se va a construir. Esto a veces es, o una versión de menor tamaño de lo que se va a crear o una versión simplificada para mostrar como va a funcionar el objeto completo.
  • En informática, nosotros también podemos construir prototipos de nuestro proyecto ya sea para mostrarle al cliente o para nosotros poder transformar en realidad nuestras ideas e ir refinando lo que queremos construir.
  • Esto puede ser tan sencillo como programar algunas pantallas simples que permitan la navegación entre ellas, mostrando cierta información que puede no ser la real y final para poder darnos una idea de que es lo necesitamos cambiar y/o mejorar.
Prototipos y el desarrollo evolutivo
  • El Modelo de prototipos, nos permite ejecutar un desarrollo evolutivo. Qué significa esto? Que nuestro sistema lo vamos a ir construyendo de a poco, agregando cosas sobre las que programamos previamente.
  • El prototipo siempre debe ser construido en poco tiempo, usando los programas adecuados y no se debe utilizar muchos recursos.
  • La idea del prototipo es centrarnos en los aspectos del sistema que serán visibles para nuestro cliente o usuario de manera que ellos nos puedan dar su opinión; gracias a ésta se refinan los requisitos del software que se desarrollará.
  • Luego, el prototipo se ajusta para satisfacer las necesidades del cliente o usuario. Esto permite que al mismo tiempo entendamos mejor lo que tenemos que hacer y el cliente vea resultados a corto plazo.
Estimaciones
  • Lo que vamos a tener que entender también para cualquier proyecto que encaremos, es lo referido a la estimación de esfuerzo y alcance del proyecto. Esfuerzo se entiende como cuantas horas tenemos que invertir en todos los aspectos del proyecto para terminarlo, y el alcance son todas las funcionalidades, diseños y trabajos que estarán incluidos en el proyecto. El alcance es simplemente lo que va a ser parte del proyecto.
  • Para poder definir el esfuerzo, obviamente primero deberemos tener claro nuestro alcance, porque sin saber lo que estará incluido en el proyecto no podremos saber cuantas horas deberemos dedicarle de trabajo.
Definiendo el alcance
  • En computación, lo que se llama Ingeniería de requerimientos tiene que ver con todas las tareas relacionadas con entender las necesidades o las condiciones a satisfacer para un sistema nuevo o modificado, tomando en cuenta los diversos requisitos de los clientes o usuarios.
  • El propósito de esto es que entendamos de la mejor manera posible lo que hay que hacer antes de la fase de diseño en el proyecto. Los buenos requisitos deben ser medibles, comprobables, sin ambigüedades o contradicciones, etc.
Ingeniería de requerimientos
  • Las actividades que vamos a realizar para obtener los requisitos son de cinco clases.
    • Obtener requisitos: a través de entrevistas o comunicación con clientes o futuros usuarios, para saber cuáles son sus expectativas.
    • Analizar requisitos: detectar y corregir los problemas o la falta en la comunicación, transformando los requisitos obtenidos de entrevistas, en condiciones apropiadas para ser diseñadas.
    • Documentar requisitos: igual que todas las etapas, los requisitos deben estar debidamente documentados. Esto nos sirve para saber exactamente que hacer, sin que haya malos entendidos
    • Verificar los requisitos: consiste en comprobar en la aplicación el correcto funcionamiento de lo que programamos basados en un requisito.
    • Validar los requisitos: comprobar que los requisitos implementados se corresponden con lo que inicialmente se pretendía.
  • La ingeniería de requisitos puede ser un proceso largo y complejo para el que se necesitaremos de habilidades psicológicas.
  • Los analistas pueden emplear varias técnicas para obtener los requisitos del cliente. Históricamente, se usaron técnicas tales como las entrevistas, o talleres con grupos para crear listas de requisitos. En la actualidad también se incluyen el desarrollo de prototipos, y casos de uso (que no veremos ahora).
  • Los requisitos formulados por los usuarios se toman como objetivos generales, a largo plazo, y se los debe analizar una y otra vez hasta determinar los objetivos críticos para el funcionamiento.
  • Finalmente, se van a establecer formas de medir el progreso en la construcción, para evaluar en cualquier momento qué tan avanzado se encuentra el proyecto.
Estimando mi esfuerzo
  • Lo primero que tienen que pensar es que independientemente de si ustedes son sus propios clientes o si es otro usuario, tienen que saber cuanto tiempo y esfuerzo le llevará hacer su proyecto. De otra manera, ustedes se frustrarán por no saber cuando finaliza el proyecto y su cliente, si lo tuviesen, se enojará porque probablemente el proyecto se extienda mas allá de sus expectativas.
  • Aunque la estimación es más un arte que una ciencia no es aconsejable empezar un proyecto sin ella. En la informática muchos proyectos fracasan por no llevar a cabo de manera correcta esta actividad. Para un proyecto de software es necesario conocer el esfuerzo y el costo que tiene implicado.
Importancia de la estimación y la gestión
  • Veamos algunos números que nos demuestran lo importante de una buena estimación y gestión de un proyecto:
    • El proyecto medio excede en un 90% lo presupuestado y un 120% su tiempo estimado.
    • El 52.7% de los proyectos costará al menos un 189% de lo estimado.
    • El tiempo de exceso medio es del 222% del estimado.
    • Sólo el 16.2% (9% en las grandes compañías) de los proyectos se completa en el plazo y presupuesto estimados.
    • El 75% de los sistemas grandes funciona mal o es dejado de lado.
    • El 15% del esfuerzo de desarrollo se desperdicia por cancelación de los proyectos.
    • El 50% de los proyectos grandes excede el presupuesto o el cronograma (en más del 50%).
    • Un proyecto medio excede en un 50% el plazo estimado.
    • Los pequeños proyectos (en su gran mayoría) exceden su presupuesto y se retrasan un 20%.
El método Delphi
  • Como podemos ver, es crucial entonces que hagamos un buen análisis de nuestro proyecto antes de empezar a programar.
  • En muchos lugares de trabajo, lo que van a encontrar que utilizan, aún sin conocerlo formalmente, es el método Delphi de estimación.
  • El mismo consiste en un grupo de personas que se reúnen, realizan un listado de tareas a realizar y luego asignan los tiempos necesarios de acuerdo a su experiencia. Luego se realiza un intercambio entre todos donde un responsable va consolidando las listas de tareas de todos, y también se expone el razonamiento detrás de las estimaciones de cada programador, buscando el consenso entre todos en base a la discusión. De esa reunión es que surge la estimación final de esfuerzo para desarrollar el sistema que previamente relevamos con los clientes o usuarios.
Y ahora?
  • Ya sabemos lo que el cliente quiere (aunque seamos nosotros), y también tenemos una idea de los tiempos necesarios para hacer nuestro sistema, y por ende, los costos.
  • La manera de continuar es construyendo paso a paso, un prototipo que podremos ir mostrando
  • De esta manera, podremos ir mostrando nuestro desarrollo, a la vez que medimos el avance mediante los indicadores que definimos cuando realizamos nuestro análisis de requerimientos del sistema.
  • La idea del prototipo es centrarnos en los aspectos del sistema que serán visibles para nuestro cliente o usuario de manera que ellos nos puedan dar su opinión; para ir refinando los requisitos del software que estamos desarrollando.
  • Y así continuaremos hasta tener nuestro sistema completo y funcionando de acuerdo a nuestro análisis inicial.
Finalmente, implementando
  • Implementación es una palabra con la que quizás muchos no están familiarizados. La realidad es que es algo bastante sencillo. Implementar nuestro proyecto significa instalarlo en la máquina o dispositivo donde lo vamos a usar, o en el servidor donde vamos a alojar nuestro sitio web, dependiendo del tipo de proyecto que hayan hecho.
  • En el caso que desarrollemos un sistema que corra en nuestra computadora o en un dispositivo móvil, solo deberemos instalar los ejecutables
  • En el caso de instalar un sitio web en un servidor, ahí se complica un poco mas la implementación.
Implementación web
  • Como mencionamos previamente, un servidor web no es solamente la máquina que corre todos mis procesos sino el programa en sí que brinda servicios a todos aquellos que quieren acceder a mi página. Este programa, en Windows, se llama Internet InformationServer, o IIS.
  • Cuando queremos publicar contenido al que se pueda acceder a través de Internet o de una conexión de intranet, podemos agregar un sitio web al IIS para que incluya el contenido.
  • En Windows 2008 server, o en las versiones Profesionales o Ultimatede Windows de escritorio, el IIS ya viene instalado. Y se crea una configuración de sitio web predeterminada en el directorio \Inetpub\Wwwrootde nuestra máquina. Podemos utilizar este directorio predeterminado para publicar nuestro contenido web o crear un directorio en una ubicación del sistema de archivos que elijamos.
Creando un sitio en IIS

1.Abrimos el Administrador de IIS. Para hacer esto vayan al botón de inicio en la máquina donde instalarán el sistema y busquen directamente IIS o Internet InformationServer.
2.En el panel Conexiones, hagan clic con el botón secundario del mouse en el nodo Sitios del árbol y, a continuación, hagan clic en Agregar sitio web.
3.En el cuadro de diálogo Agregar sitio web, escribamos un nombre descriptivo para nuestro sitio web en el cuadro Nombre del sitio web.
4.Hagan clic en Seleccionar si desea seleccionar un grupo de aplicaciones diferente del que aparece en el cuadro Grupo de aplicaciones. En el cuadro de diálogo Seleccionar grupo de aplicaciones , seleccione un grupo de aplicaciones en la lista Grupo de aplicaciones y, a continuación, haga clic en Aceptar. (optativo)
5.En el cuadro Ruta de acceso física, escribamos la ruta de acceso física de la carpeta del sitio web o hagamos clic en el botón de exploración (...) para navegar por el sistema de archivos y buscar la carpeta.
6.Seleccionemos el protocolo para el sitio web en la lista Tipo.
7.El valor predeterminado en el cuadro Dirección IP es Todas las no asignadas. Dejémoslo así por ahora
8.Escriban un número de puerto en el cuadro de texto Puerto, por ejemplo, 80.
9.De forma opcional, escriba un nombre de encabezado del host para el sitio web en el cuadro Encabezado host. Por ejemplo: www.misitio.com.
10.Si no tienen que realizar ningún cambio en el sitio y quieren que el sitio web esté inmediatamente disponible, activen la casilla Iniciar sitio web inmediatamente.
11.Hagan clic en Aceptar.

Eso es todo?
  • Una vez que finalizamos con estos pasos, deberíamos tener nuestro sitio funcionando, y podemos corroborarlo accediendo a la dirección que definimos en el encabezado: www.misitio.com, siempre y cuando hayamos configurado nuestros servidores de nombre de dominio correctamente para que apunten a donde estamos almacenando nuestro sistema.
  • Y con esto, ya tenemos nuestro programa implementado y listo para usar!!!!
Repaso
  • En este capítulo vimos la importancia de:
    • hacer un buen análisis de requerimiento y que necesitamos entender
    • realizar una estimación de nuestro proyecto para entender el tiempo y costo asociado
    • desarrollar un prototipo que se ajuste a los requerimientos de información del cliente y a nuestra necesidad de entender lo que el cliente quiere
    • implementar nuestro desarrollo en el ambiente que corresponda a la tecnología utilizada
  • Para llevar su proyecto a buen puerto, deben prestar atención a todas estas buenas prácticas y sus sistemas podrán terminarlos de manera mucho mas sencilla y con mayor satisfacción para ustedes y sus usuarios.


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

lunes, 20 de febrero de 2017

Hacia donde van las aplicaciones



Computación ubicua
  • Ahora, que es lo que mas nos interesa hoy día en computación? Que nuestras aplicaciones sean utilizadas, accedidas.
  • Y como hacemos eso? Mediante lo que se denomina computación ubicua, que significa “en todos lados”
  • Piensen nuevamente en sus correos electrónicos. Si ustedes tienen una cuenta en outlook.com, van a querer acceder a los correos, contactos, calendarios y toda la información que tengan desde cualquier lado, porque hoy día la vida nos exige estar conectados.
  • Piensen en su teléfono celular, que tienen consigo a menos de un metro de distancia casi 20 horas al día. Seguramente su celular lo tienen sincronizado con sus casillas de mail, con los contactos de sus amigos y familiares, con el calendario donde se anotaron lo que van a hacer los próximos días, con sus redes sociales, etc.
  • Pero también pueden acceder a todos esos datos y herramientas desde su Tablet, desde su computadora, o desde prácticamente cualquier dispositivo conectado a internet y para el cual exista algún tipo de interfaz programada.
  • Cuando hablamos de computación ubicuanos referimos a la integración de lainformáticaen el entorno de la persona, de forma que los dispositivos con acceso a las aplicaciones y datos no se perciban como objetos diferenciados.La idea es integrar dispositivos alrededor del ser humano, en donde podemos interactuar de manera natural con los dispositivos y realizar cualquier tarea diaria de manera completamente trasparente para nosotros. Si estamos “usando” computación ubicua lo hacemos a través de diversos dispositivos (como ser nuestros teléfonos, tabletas, ropa inteligente, etc) y sistemas simultáneamente, y muchas veces lo haremos sin percibirlo. Lo único que necesitamos, es tener acceso a internet de alguna manera.
Ubicuidad -ejemplos
  • Algunas aplicaciones hoy día que nos permiten la ubicuidad son aquellas como el correo electrónico a través de distintos prestadores como Outlook.com, o SkyDrivepara compartir nuestros archivos y mantenerlos sincronizados en todos nuestros dispositivos, nuestro calendario, contactos, Office365 o infinidad de otras posibilidades. Simplemente teniendo aplicaciones instaladas o accesibles desde todos nuestros dispositivos tendremos accesible y sincronizada toda nuestra información.
  • La ubicuidad depende realmente de que nuestras aplicaciones se adapten a las necesidades del usuario, a las capacidades del dispositivo y a las condiciones del entorno. Si nosotros desarrollamos nuestras aplicaciones pensando en la movilidad de los usuarios, esto les permitirá utilizar diferentes dispositivos para acceder a la misma información. Nuestros usuarios, van a poder elegir la forma de interactuar con nuestras aplicaciones en función de sus necesidades y de las características del dispositivo utilizado.
Como pensar la ubicuidad
  • Nosotros deberemos pensar en sistemas que mas allá de la base de datos y el modelo utilizado por detrás, plantearán diversas interfaces con potencialmente distintas tecnologías para adaptarse a las necesidades del usuario. Esto significa que, por ejemplo, si estamos haciendo una interfaz o aplicación para un teléfono celular, tenemos que considerar que potencialmente el mismo puede quedarse sin señal o conexión a internet y como incluirá eso en la actualización de los datos del usuario y en como manejaremos ese tipo de errores. Deberemos considerar comunicaciones sincrónicas y asincrónicas. Deberemos considerar sincronizaciones en tiempo real y fuera de él. No es lo mismo el manejo de las interfaces para una computadora de escritorio que para una ropa o accesorio inteligente o para un teléfono celular o Tablet.
  • Este tipo de problemas son los que presenta la computación en la actualidad y que se continuará desarrollando en los próximos años.
Aplicaciones conectadas 2.0
  • En el mundo actual y en el futuro inmediato, no todo es tan sencillo como hablar de que las aplicaciones son solamente conectadas o desconectadas. Empiezan a aparecer casos de aplicaciones que son una mezcla entre ambas cosas.
  • Mencionábamos anteriormente las aplicaciones ubicuas, que nos permiten tener acceso a las mismas y sus datos desde diversidad de dispositivos. Si analizamos un minuto alguna de las aplicaciones, veremos que las aplicaciones que muchas veces utilizamos diariamente, se empiezan a comportar distinto de acuerdo a si en un momento dado tienen acceso a internet o no.
  • Por ejemplo, si hablamos de aplicaciones conectadas, sabemos que si quisiéramos utilizar Bing Mapsdesde nuestro dispositivo celular, en el medio de la montaña, sin conexión a internet, estaríamos en problemas. Sin embargo, existen para nuestros dispositivos aplicaciones como los mapas HERE. Debemos descargar los mapas y muchas de las funcionalidades, no es necesario que estemos conectados a internet para utilizarlas, debido a que la información se almacena en nuestro propio dispositivo. Sin embargo, en el momento en que intentemos utilizar algunas de las funcionalidades como ser la realidad aumentada, que veremos en la próxima sección, la aplicación nos informará que requiere de conexión para utilizarse.
  • También, muchas aplicaciones tienen la capacidad de almacenar información que nosotros les proveamos y apenas cuenten con conectividad, se encargarán de sincronizarla con la aplicación central, pero igualmente dejándonos continuar con la utilización de la aplicación. Esto nuevamente nos presenta una infinidad de nuevos retos, donde deberemos pensar nuestra aplicación como una interacción de subsistemas que potencialmente no se comportarán todos de la misma manera y que deberemos resolver individualmente.
  • Nosotros al trabajar con aplicaciones web en este curso, nos estamos enfocando en aplicaciones conectadas, lo cual nos servirá como puntapié inicial para desarrollar todas esas sincronizaciones que las aplicaciones semi-conectadas utilizarán en el momento en que se encuentren online.
Realidad aumentada
  • La realidad aumentada es un término que se usa para definir una visión a través de un dispositivo tecnológico (por ejemplo tu teléfono móvil), directa o indirecta, de un entorno físico del mundo real, cuyos elementos se combinan con elementos virtuales para la creación de una realidad mixta en tiempo real.
  • Básicamente sería como si a través de la pantalla de tu teléfono y mediante la cámara del mismo estas observando tu calle o tu ciudad, y un programa agregase información a lo que estás viendo, es decir, añadir una parte virtual a lo real.
Áreas fértiles en realidad aumentada
  • Sector Educativo.Podríamos por ejemplo agregar información histórica o educativa sobre el mundo real que observa el usuario.
  • Marketing Móvil.Podríamos indicar ofertas, o negocios que participan de algún tipo de campaña, o simplemente indicarle al usuario donde se encuentran las cosas que necesita.
  • Guías turísticas.Existen aplicaciones que indican recorridos turísticos, con información útil para los usuarios
  • Espacios de cultura digital.Imagina agregar información para los usuarios en los museos, o muestras artísticas, con explicaciones y datos útiles.
  • Entretenimientos:infinidad de juegos en realidad aumentada se han desarrollado y se encuentran en desarrollo donde se mezclan objetos de la vida real con virtuales.
Ejemplos de realidad aumentada
El futuro
  • Todo lo que se refiera a hablar del futuro de la tecnología, realmente es un disparo en la oscuridad. Las tecnologías avanzan a una velocidad vertiginosa y poco se sabe de cuales serán las predominantes.
  • Todo lo que mencionamos sobre ubicuidad, aplicaciones conectadas y realidad aumentada es el presente y con probabilidad podemos decir que serán parte del futuro. Pero a medida que el hombre desarrolle nuevos dispositivos y encuentre nuevas formas de enriquecer nuestra vida diaria, nuevas tecnologías irán apareciendo. Desde el 2011 o 2012 todo lo que tiene que ver con ropa inteligente como ser relojes, zapatillas, etc, se ha ido desarrollando de manera vertiginosa para brindarnos una manera de vivir mas inteligente. Sin embargo, no es lo único que se ha desarrollado.
  • Cada vez encontramos mas electrodomésticos inteligentes que nos sugieren comidas, nos informan de falta de insumos, o mantienen un uso equilibrado de los recursos energéticos del hogar. Esto se debe a la mayor implementación de sensores en diversidad de dispositivos hogareños o en las construcciones en sí.
  • También se están desarrollando dispositivos para control de los gestos, así como también ropa inteligente que nos permita tener una realidad aumentada a través de anteojos, por ejemplo. Este tipo de tecnologías también permitirá el desarrollo de aplicaciones que mejoren aspectos de salud del ser humano, al poder medir en tiempo real diversidad de variables. Y al poseer mayor cantidad de datos, se trabajará con lo llamado “big-data analytics” (investigación en grandes volúmenes de datos) para poder extraer patrones de comportamiento y lograr mejoras para la humanidad.
Campos de desarrollo
  • Se continuarán desarrollando sistemas que colaboren en campos tan diversos como:
    • Agricultura (con robots que colaboran en varias tareas)
    • Genética
    • Biomedicina
    • Ingeniería de materiales
    • Electrónica
    • Inteligencia artificial
    • Reconocimiento de voz y sonidos
    • Criptografía
    • Realidad virtual y aumentada
    • Impresión 3D
    • Arquitectura
    • Desarrollos militares y de defensa
    • eurociencia
    • Robótica
    • Transporte
    • Etc.
  • La informática se encontrará presente en todas y cada una de las áreas, brindando información y colaborando en el desarrollo de la humanidad. Por ello la importancia de conocer las tecnologías actuales para ahondar en la investigación que nos llevará al futuro.

Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

Una web más inteligente



Comunicación asincrónica
  • Piensen un segundo en dos personas que están una al lado de la otra, hablando el mismo idioma, y respondiéndose a medida que la otra pregunta, en tiempo real. Por otro lado, imagínense hace cientos de años, a una persona enviando una carta a otra que vive a cientos o miles de kilómetros de distancia.
  • En el primero de los casos, como ambas personas están en simultáneo entablando conversación, se mantienen en un mismo tiempo embarcadas en la misma tarea de comunicación. Mientras que en el segundo de los casos, la primer persona escribe la carta, la envía, y continúa con su vida. La segunda persona, tiempo después, recibirá la correspondencia e interrumpirá sus tareas en algún momento para responder y continuar con la comunicación.
  • El segundo de los casos, es lo que se denomina comunicación asincrónica, en la cual las dos partes se comunican de manera diferida en el tiempo, es decir, cuando no están conectadas al mismo tiempo. Esto es lo que ocurre con el correo electrónico o con los foros, donde alguien deja una comunicación y luego algún otro usuario contesta al mensaje.
  • En la computación, la comunicación asincrónica o no bloqueante es una forma de procesamiento que permite seguir ejecutando programas antes de que la transmisión y recepción de las respuestas hayan terminado.
  • El envío de información entre dos subsistemas es mucho mas lento que el procesamiento de datos dentro de un mismo sistema. Por ello, si nosotros nos quedamos esperando a que una comunicación se finalice antes de continuar con el resto de nuestro programa, probablemente estemos dejando muchos recursos de la computadora sin uso. Por eso es que usamos la comunicación asincrónica, donde solo quedan bloqueados los procesos que requieren de que se complete la comunicación, mientras que el resto del procesamiento sigue su curso.
Mejorando interfaces asicrónicamente
  • Una de las cosas mas interesantes que podemos hacer cuando programamos de manera asincrónica, es ir partiendo nuestras interfaces en pequeñas partes que, gracias al tipo de programación que estamos aprendiendo, pueden ir actualizándose sin necesidad de recargar toda la página.
  • Por ejemplo, si ustedes entran en Outlook.coma chequear sus correos electrónicos, y seleccionan alguno de los correos de la columna izquierda, verán que no se recarga toda la página para mostrarles el contenido del mismo. Años atrás, cuando las tecnologías que usaremos no estaban desarrolladas, constantemente las interfaces se refrescaban completamente, haciendo que nosotros nos cansemos porque también la velocidad de conexión a internet era mas baja. Hoy día, no solo las velocidades son mas altas sino que también lo que se refresca (y por ende la información que se descarga) son solo partes parciales de la pantalla, haciendo nuestra experiencia mas amigable.
AJAX (o AJAJ)
  • En la actualidad, las aplicaciones Web pueden enviar datos a, y recuperar datos de, un servidor de forma asincrónica (en segundo plano) sin interferir con la visualización y el comportamiento de la página existente. Los datos pueden ser recuperados mediante un tipo de dato que se llama XMLHttpRequesty que iremos viendo. A pesar del nombre, no se requiere el uso de XML, que es un lenguaje utilizado principalmente para la transmisión de información, sino que JSONse utiliza a menudo en lugar (otro tipo de lenguaje para comunicación), y no siempre las comunicaciones son 100% asincrónicas.
  • Para realizar este tipo de comunicaciones en la web, que actualice partes de las interfaces se suele utilizar Ajax(o AJAJen el caso de utilizar JSON), que no es una sola tecnología, sino un grupo de tecnologías. HTML y CSS pueden usarse en combinación para armar las interfaces y darle diseño. El DOM(que es la información que corresponde a como está armada la interfaz HTML) se accede con JavaScript para modificarla dinámicamente, y permitir al usuario interactuar con la información presentada. JavaScript y el objeto XMLHttpRequestproporcionan un método para el intercambio de datos de forma asíncrona entre el navegador y el servidor para evitar cargas de una página completa.
El DOM
  • Fui muy rápido? El DOM es un convención estándar que me permite representar e interactuar con elementos del HTML, XML u otros lenguajes. El DOM me permite que si en un HTML tengo un título con el tagH1, podré eventualmente, accederlo mientras estoy ejecutando mi sistema, y modificarlo como necesite. De esa manera, cuando en mi interfaz recibo una interacción del usuario, mediante AJAX o AJAJ, envío información al servidor, y continúo mostrando mi interfaz inalterada. Cuando recibo la respuesta a mi comunicación, accedo al DOM y le pido que modifique la parte del HTML que necesito alterar. Por ejemplo, en el caso de nuestro correo, le pido al servidor que me envíe información correspondiente al mail que seleccioné en la columna de la izquierda y mi interfaz se mantiene inalterada hasta que me devuelven el contenido del correo y actualizo solamente la sección de la derecha donde se muestran los correos.
Ejemplo básico

<!DOCTYPE html>
<html><head>
<script>
functionshowHint(str)
varxmlhttp;
if(str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","gethint.asp?q="+str,true);
xmlhttp.send();
}
</script></head>
<body>
<h3>Comience a tipearun nombre</h3>
<formaction=""> Nombre: <input type="text" id="txt1" onkeyup="showHint(this.value)" /></form>
<p>Sugerencia: <spanid="txtHint"></span></p>
</body></html>
  • Cada vez que el usuario presiona una tecla, entonces, se llamará a la función de JavascriptshowHint, incluyendo el valor tipeado, para que la misma lo envíe a la página gethint.asp, de manera de obtener una sugerencia de nombre en caso de que lo tenga. Siempre que la longitud de la cadena que se encuentra en el campo de ingreso de texto txt1 sea mayor a 0, se enviará la información para su evaluación.
  • El contenido del archivo gethint.asp es el siguiente:
getHint.asp

<%response.expires=-1
dim
a(30)a(1)="Ana"
a(2)="Bernarda"
a(3)="Clara"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gabriela"
a(8)="Helena"
a(9)="Ingrid"
a(10)="Johana"
a(11)="Karen"
a(12)="Lisa"
a(13)="Nina"
a(14)="Oriana"
a(15)="Paula"
a(16)="Amanda"
a(17)="Raquel"
a(18)="Cinthia"
a(19)="Doris"
a(20)="Inti"
a(21)="Elisa"
a(22)="Dora"
a(23)="Solange"
a(24)="Yanina"
a(25)="Violeta"
a(26)="Sabrina"
a(27)="Elizabeth"
a(28)="Hilda"
a(29)="Marta"
a(30)="Eugenia"

'recibir el parámetro que me enviaron desde el HTMLq=ucase(request.querystring("q"))
'buscar las sugerencias siempre que la longitud de q>0

if len(q)>0 then 
hint=""
for i=1 to 30 
if q=ucase(mid(a(i),1,len(q))) then
if hint="" then
hint=a(i)
else
hint=hint & " , " & a(i)
end if
end if
next
end if
Retornar "sin sugerencia" si no se encuentran coincidencias'o retornar el valor encontrado
if hint="" then
response.write("sin sugerencias")
else
response.write(hint)
end if
%>

AJAX con archivo remoto
  • En el ejemplo anterior, simplemente hicimos un llamado asincrónico a un archivo ASP que nos devolvió un dato a mostrar. En vez de ello, podríamos requerirle a una aplicación remota un archivo en formato XML o JSON con una variedad de datos y luego interpretarlos y mostrarlos en nuestro programa. Eso es por ejemplo lo que hacen las aplicaciones de nuestras computadoras que nos muestran el clima. Se conectan a páginas como accuweather.comy nos traen archivos XML o JSON. Simplemente reemplazamos la función showHinten nuestro HTML original por otra que podamos llamar y que se ocupe de traer la información. Por ejemplo:

  • Esta función recibirá como parámetro la dirección de donde debe ir a buscar el archivo XML, y luego recorrerá el archivo XML y armará una tabla en nuestra interfaz gráfica con toda la información recuperada.
XML
  • Hemos estado mostrando como mediante AJAX (que significa AsynchronousJavascriptand XML) podemos actualizar partes de mi interfaz de usuario, sin necesidad de bloquear los otros procesos. Esto lo hicimos mediante XML, aunque mencionamos que también existe un lenguaje para la comunicación llamado JSON. Pero qué son estos dos lenguajes que mencionamos?
  • XML, al igual que HTML, es un lenguaje de marcas que define un conjunto de reglas para la codificación de documentos en un formato que es a la vez legible y legible por máquina. Los objetivos del diseño de XML hacen hincapié en la simplicidad, generalidad, y la facilidad de uso a través de Internet.
  • Un archivo XML posee un ecabezadode la siguiente forma
<?xmlversion="1.0" encoding="UTF-8"?>
  • Y luego, se compone de una estructura que permite anidaciones, donde siempre tenemos un tago marca de apertura y uno de cierre de la siguiente forma:
<persona>
<nombre>John</nombre>
<apellido>Doe</apellido>
<documento>23456789</documento>
<auto>
<marca>Ford</marca>
<modelo>Escort</modelo>
<fabricado>2006</fabricado>
</auto>
</persona>
  • XML es tan sencillo como lo que acabamos de ver, y en las comunicaciones entre subsistemas, se documenta cual será el formato del archivo, y en nuestra aplicación simplemente tendremos que contemplar que la información que intentemos leer sea la que el otro sistema nos esté proveyendo.
JSON
  • JSON por otro lado, que significa JavascriptObjectNotation, también es un estándar abierto que permite transmitir pares de datos que contienen el nombre del atributo y el valor que corresponde.
  • Para transmitir a través de un archivo .jsonlos datos correspondientes a una persona, escribiríamos algo del siguiente tipo:
{
"nombre": "John",
"apellido": "Doe",
"edad": 25,
"altura_cm": 167.64,
"direccion": {
"calle": "21 2nd Street",
"ciudad": "New York",
"estado": "NY",
"codigoPostal": "10021-3100"
},
"telefono": [
{ "tipo": "casa", "numero": "212 555-1234" },
{ "tipo": "fax", "numero": "646 555-4567" }
]
}
  • Y luego, para leer el dato, simplemente usaremos funciones provistas por librerías de Javascriptdel tipo:
varp = JSON.parse(contact);

AJAJ
  • El siguiente código de JavaScript es sólo un ejemplo de un cliente que utiliza XMLHttpRequestpara solicitar datos en formato JSON desde un servidor. (La programación del lado del servidor la omitimos, pero asumimos que debe ser configurado para solicitudes de servicio a la urlque contiene una cadena con formato JSON.)
varmy_JSON_object;
varhttp_request= new XMLHttpRequest();
http_request.open("GET", url, true);
http_request.onreadystatechange= function() {
vardone = 4, ok = 200;
if(http_request.readyState=== done && http_request.status=== ok) {
my_JSON_object= JSON.parse('''http_request.responseText''');
}
};
http_request.send(null);
  • El objeto XMLHTTPRequestes simplemente un tipo de datos que permite hacer pedidos a un servidor vía internet (y recibir las respuestas) de objetos de comunicación que pueden ser XML, JSON, HTML, archivos de texto u otras variedades.
Procesos batch
  • El procesamiento batches la ejecución de una serie de programas ("trabajos") en una computadora sin intervención manual.
  • Los trabajos se establecerán de tal modo que se pueden ejecutar hasta el final sin interacción humana. Todos los parámetros de entrada están predefinidos por los scripts o programas que desarrollamos, información que les enviamos al comienzo de ejecución, archivos o el propio lenguaje de control de trabajos.
  • De esa manera, podríamos tener un programa en el servidor calculando constantemente cual será el clima de la próxima semana, escuchando en un puerto del servidor por pedidos por parte de las computadoras de los usuarios que necesitan la información y enviándola mediante XML o JSON para que sea consumida correctamente. Estos procesos no se encuentran controlados directamente por ningún usuario mediante una interfaz de usuario, sino que una vez que se ponen en ejecución, simplemente harán su trabajo hasta que lo terminen o sean interrumpidos.
  • Existen distintas formas de realizar un proceso batch. Algunos consisten en simplemente generar un programa y luego decirle al sistema operativo que el mismo es una tarea que debe ejecutar cada cierto tiempo, o en determinados momentos.
  • Otra forma es hacerlo mediante nuestro programa, como parte del mismo, ejecutándose mientras nosotros continuamos con otras tareas. Para ello, los pasos en ASP.NET son como sigue:
    • Añadir un elemento a la HttpRuntime.Cachecon un vencimiento fijo, al comienzo de nuestro código.
    • Cuando expire la caché, hacer el trabajo, como WebRequesto lo que sea.
    • Volver a añadir el elemento a la caché con un vencimiento fijo.
Proceso batch-ejemplo


  • Este código corre cada 60 segundos, ejecutando nuestras tareas. Sin embargo quizás no sea la mejor de las opciones debido a la utilización poco óptima de los recursos, en particular de la memoria caché (una de las memorias de la computadora).
  • Existen diversas soluciones que exceden al alcance del presente curso, pero que recomendamos su investigación.
  • http://msdn.microsoft.com/en-us/magazine/cc163854.aspx

Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

sábado, 18 de febrero de 2017

Conectando los datos con la aplicación



Introducción
  • Vamos a ver como hacemos para guardar toda la información que consideramos importante para que sea persistente una vez que apaguemos nuestro sistema y podamos usarla cuando lo prendamos nuevamente.
  • Para ello, vamos a utilizar dos técnicas principales: ODBC y LINQ.
  • Ambas fueron desarrolladas por Microsoft, pero son muy distintas entre sí, siendo de naturaleza bastante distinta. ODBC es un estándar abierto y es la manera de base de conectarse a las bases de datos, mientras que LINQ es una herramienta de nueva generación que permite utilizar el servidor de base de datos de manera mas sencilla y con un lenguaje mas natural.
ODBC
  • La primera manera de conectarse a nuestro servidor de BD y manipular información que veremos se llama ODBC. El objetivo de ODBC es que podamos acceder a cualquier dato desde cualquier sistema, sin importar qué sistema de gestión de bases de datos almacene los datos(en nuestro caso, MS SQL Server Express).
  • El propósito de ODBC es traducir las consultas de la aplicación en comandos que el Gestor de BD entienda. Para que esto funcione tenemos que hacer que tanto la aplicación como el Gestor sean compatibles con ODBC. Esto significa que nuestro sistema tiene que tener instrucciones específicas ODBC y el Gestor debe ser capaz de responder a ellos.
  • Una de las maneras de hacer esto, es con un software manejador, o driver, en el cliente, que se ocupe de la comunicación con la base de datos. El driver interpreta las conexiones y llamadas SQL y las traduce.
  • El ODBC .NET Data Provideres un componente adicional al Kit de desarrollo de .NET (SDK). Nos permite el acceso a controladores ODBC nativos, y aunque se supone que al ser una tecnología estándar nos permite utilizar drivers para diversos tipos de base de datos, el sitio de descargas de Microsoft nos indica que sólo se ha probado con los controladores de Microsoft SQL ODBC, Microsoft Oracle ODBC y Microsoft Jet ODBC.
  • ODBC está compuesto por un driver y un administrador de controladores. El driver es específico para el producto de un proveedor de base de datos. Por ejemplo, Oracle proporciona un controlador (o driver) para trabajar con un sistema de Oracle. El administrador de controladores se utiliza para instalar los archivos necesarios y configurar fuentes de datos para ser utilizados en aplicaciones. En los sistemas basados en Windows, el Administrador de orígenes de datos ODBC se utiliza para crear y mantener conexiones ODBC.
Instalando ODBC
  • Para instalar ODBC lo primero que debemos hacer es descargarlo desde:
  • Y también es requerido el Microsoft Data Access Components desde: 
http://msdn2.microsoft.com/en-us/data/aa937695.aspx
  • Luego de instalar ambos componentes seguiremos los siguiente pasos:
1.Iniciemos Microsoft Visual Studio NET.
2.Creamos un proyecto nuevo de Visual C# Windows Application. Form1 se agrega al proyecto de manera predeterminada.
3.En el menú Proyecto, hagan clic en Agregar referencia.
4.En la solapa .NET, hagan clic Microsoft.Data.ODBC.dll. Después de que Microsoft.Data.ODBC.dllaparece en la lista de componentes seleccionados, hagan clic en Aceptar.
5.Cambien a la vista Código y agreguen el siguiente código inmediatamente después de las otras instrucciones using:

usingSystem.Data;
usingMicrosoft.Data.Odbc;

6.Agreguemos un control Buttona Form1 y etiquetemos este control SQL Server.
7.Ahora agregamos el siguiente código al botón SQL Server

{
OdbcConnectioncn;
OdbcCommandcmd;
stringMyString;
MyString="Select* fromCustomers";
cn= new OdbcConnection("Driver={SQL Server};Server=mySQLServer;UID=sa;
PWD=myPassword;Database=Northwind;");
cmd=new OdbcCommand(MyString,cn);
cn.Open();
MessageBox.Show("Connected");
cn.Close();
}

8.Modifiquemos las cadenas OdbcConnectionsegún corresponda para su entorno

Elementos de ODBC
  • Algunos de los elementos que vamos a poder usar cuando instalemos el controlador ODBC son:
    • OdbcConnection: Se usa para conectarnos a una fuente de datos ODBC. El nombre asignado a la fuente de datos ODBC, durante su configuración, se utiliza para acceder a ella.
    • OdbcCommand: Se usa para ejecutar un comando SQL en una conexión.
    • OdbcDataReader: nos permite recorrer los resultados de una consulta.
    • OdbcParameter: Se utiliza para enlazar un parámetro a un comando.
    • OdbcDataAdapter: Se utiliza para llenar un objeto DataSetdesde una fuente de datos ODBC.
    • OdbcCommandBuilder: Crea default Insert, Updatey Deletepara un adaptador de datos ODBC.
Ejemplo de ODBC
  • Ahora les vamos a mostrar otro ejemplo, creando un proyecto vacío en C#. El siguiente ejemplo usa algunos de los elementos que mencionamos. Utiliza una fuente de datos ODBC previamente establecida (llamada Test). El nombre de DSN (nombre de fuente de datos) se utiliza en la cadena de conexión, junto con la identificación de usuario y contraseña para acceder a la base de datos. Una sentencia SQL básica se utiliza para recuperar todas las filas de una tabla Clientes con los valores de las columnas que se muestran. Finalmente, se cierra la conexión y todos los demás elementos. El código C # siguiente:
usingSystem;
usingMicrosoft.Data.Odbc;
namespaceBuilderODBC{
classTestClass{
staticvoidMain(string[] args) {
stringconnectionString= "DSN=Test;UID=Chester;Pwd=Tester;";
stringsql= "SELECT CustomerID, ContactName, ContactTitleFROM Customers";
OdbcConnectionconn= new OdbcConnection(connectionString);
conn.Open();
OdbcCommandcomm= new OdbcCommand(sql, conn);
OdbcDataReaderdr= comm.ExecuteReader();
while(dr.Read()) {
Console.WriteLine(dr.GetValue(0).ToString());
Console.WriteLine(dr.GetValue(1).ToString());
Console.WriteLine(dr.GetValue(2).ToString());
}
conn.Close();
dr.Close();
comm.Dispose();
conn.Dispose();
} } }

LINQ
  • En 2008, Microsoft presentó dentro de Visual Studio LINQ, que extiende el lenguaje de programación añadiendo las expresiones de consulta, que son semejantes a las sentencias SQL, y se pueden utilizar para extraer de forma sencilla datos de arrays, clases enumerables, documentos XML, bases de datos relacionales, y fuentes de datos de terceros.
  • Todas las operaciones de consulta LINQ se componen de tres acciones distintas:
    • Obtener la fuente de datos.
    • Crear la consulta.
    • Ejecutar la consulta.
Ejemplo de LINQ
  • Podemos ver en este código un ejemplo de LINQ para consultar un arrayde datos, pero de igual manera se puede hacer esto directamente en un servidor de base de datos:
classIntroToLINQ
{
staticvoidMain()
{
// 1. Fuente de datos.
int[] numbers= new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2.Creacion de la consulta
// numQueryisanIEnumerable
varnumQuery=
fromnumin numbers
where(num% 2) == 0
selectnum;
// 3.Ejecutar la consulta
foreach(intnumin numQuery)
{
Console.Write("{0,1} ", num);
}
}
}

LINQ toSQL
  • Nosotros lo que queremos es usar como fuente de datos una base, y para ello debemos utilizar lo que se llama LINQ toSQL.
  • En LINQ toSQL, el modelo de datos de una base de datos relacional se asigna a un modelo de objetos expresado en el lenguaje de programación que estamos usando. Cuando la aplicación se ejecuta, LINQ toSQL traduce en SQL las consultas que escribimos en el modelo de objetos y los envía a la base de datos para su ejecución. Cuando la base de datos devuelve los resultados, LINQ toSQL los traduce de nuevo a los objetos que nuestro sistema puede trabajar en nuestro propio lenguaje de programación.
  • Con LINQ toSQL, primero entonces debemos crear un mapeo objeto-relacional (o sea, algo que le diga a nuestro sistema la relación que hay entre los elementos de mi sistema y los datos de la base), ya sea manualmente o utilizando el Diseñador relacional de objetos (O/R Designer). Escribimos las consultas en los objetos, y en tiempo de ejecución LINQ toSQL se encarga de la comunicación con la base de datos. En el ejemplo siguiente, los clientes representan una tabla específica en la base de datos, y el tipo del resultado de la consulta, IQueryable<T>, deriva de IEnumerable.
Northwnddb= new Northwnd(@"c:\northwnd.mdf");
// Queryforcustomersin London.
IQueryable custQuery=
fromcustin db.Customers
wherecust.City== "London"
selectcust;

Otros conceptos: stress
  • Las pruebas de estrés son una forma de prueba deliberadamente intensa utilizada para determinar la estabilidad de un sistema. Se trata de probar nuestra aplicación más allá de la capacidad normal, a menudo a un punto donde debería romperse, con el fin de observar los resultados. Las razones pueden incluir:
    • para determinar los puntos de ruptura o límites de uso seguro
    • si se están cumpliendo las especificaciones que nos pidió el cliente (ej: que soporte 10 millones de usuarios)
    • para determinar modos de fallo (¿cómo es exactamente cuando el sistema falla)
    • para poner a prueba el funcionamiento estable de una parte o del sistema fuera de uso estándar
Stress
  • Las pruebas de estrés, en general, deberían poner el hardware bajo niveles exagerados de estrés con el fin de garantizar la estabilidad cuando se utiliza en un entorno normal. Estos pueden incluir los extremos de carga de trabajo, uso de memoria, carga térmica (calor), la velocidad de reloj, o tensiones. La memoria y la CPU son dos componentes que son comúnmente probados de esta manera.
  • Las pruebas de estrés de software tiene como objetivo probar la estabilidad tratando de forzar un sistema al fracaso; tiene como objetivo medir y evaluar el máximo rendimiento posible en una tarea o función determinada.
  • En particular, los objetivos de este tipo de pruebas pueden consistir en garantizar que el software no se cuelga en condiciones de insuficiencia de recursos computacionales (como la memoria o espacio en disco ), alta concurrencia inusual, o ataques de denegación de servicio.
Otros conceptos: seguridad
  • Tenemos que entender que la seguridad informática es el área de la informática que se enfoca en la protección de la infraestructura computacional y todo lo relacionado con ella y, especialmente, la información contenida. Para esto existen estándares, métodos, reglas, herramientas y leyes para minimizar los posibles riesgos a la infraestructura o a la información. La seguridad en un ambiente de red es la habilidad de identificar y eliminar vulnerabilidades, o sea, los puntos a través de los cuales pueden entrar en nuestro sistema o nuestra infraestructura.
Causas de fallas de seguridad
  • Usuarios: En algunos casos sus acciones causan problemas de seguridad, si bien en la mayoría de los casos es porque tienen permisos sobredimensionados, no se les han restringido acciones innecesarias, etc.
  • Programas maliciosos: programas destinados a perjudicar o a hacer un uso ilícito de los recursos del sistema. Es instalado (por inatención o maldad) en nuestra computadora, abriendo una puerta a intrusos o bien modificando los datos. Estos programas pueden ser un virus informático, un gusano, un troyano, una bomba lógica, un programa espía o spyware, en general conocidos como malware.
  • Errores de programación: La mayoría de los errores de programación que se pueden considerar como una amenaza informática es por su condición de poder ser usados como exploitspor los crackers, aunque se dan casos donde el mal desarrollo es una amenaza.
  • Intrusos: persona que consigue acceder a los datos o programas a los cuales no están autorizados (crackers, defacers, hackers, script kiddieo script boy, viruxers, etc.).
  • Personal técnico interno: Los motivos que se encuentran entre los habituales son: disputas internas, problemas laborales, despidos, fines lucrativos, espionaje, etc.
Buenas prácticas de seguridad
  • En caso de querer tomar medidas, las mismas pueden tener distinta naturaleza:
    • Desarrollo de sistemas usando estándares de codificación para evitar errores
    • Manejar contraseñas difíciles de averiguar (mas de 8 caracteres, con letras, números y símbolos)
    • Manejar bien los permisos que les damos a los usuarios
    • Realizar copias de seguridad continuas de nuestros datos y programas
    • Mantener nuestros servidores con todas las actualizaciones de seguridad al día
    • Instalar antivirus
  • Si mantenemos estas buenas prácticas, nos aseguraremos de tener un sistema seguro y estable que funcione correctamente durante mucho tiempo.


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

viernes, 17 de febrero de 2017

La persistencia de datos



Introducción a la persistencia
  • Te preguntarás: Cuando apago la máquina donde corre mi programa, qué pasa con los datos? Como hago para seguir usando normalmente mi sistema una vez que prendo la computadora o el dispositivo? No quiero tener que volver a ingresar todos los datos nuevamente.
  • Esto se puede solucionar de muchas manera. En algunos programas sencillos, con pocos datos, los programadores guardan la información en archivos.
  • Y si es tan sencillo, por qué complicarnos la vida con otras soluciones? Porque nos traen algunos problemas:
    • Redundancia e inconsistencia de datos
    • Dificultad para acceder a los datos
    • Aislamiento de los datos
    • Múltiples usuarios
    • Problemas de confidencialidad
    • Problemas de integridad
Problemas con archivos
  • El primero de los problemas lo que significa es que al poder escribir cualquier cosa en un archivo, yo podría tener datos repetidos, dado que no hay un control real sobre lo que estoy escribiendo. Básicamente es como un cuaderno de hojas, yo puedo escribir lo que quiera. Y de igual manera podría estar escribiendo cosas que se contradicen entre si.
  • También tenemos el problema de que un archivo es simplemente una cadena muy larga de letras. Para buscar algo, tengo que recorrer todo el contenido hasta encontrarlo.
  • Por otro lado, al ser un archivo un espacio en memoria que se puede acceder de manera compartida, puede ocurrir que alguien quiera escribir en el archivo mientras otro está leyendo, o también el hecho de que no queremos que cualquiera acceda al mismo porque hay información confidencial, y cuidar esto con este tipo de datos es muy difícil.
  • Cuál es la solución? Los servidores de bases de datos
Qué es una base de datos?
  • Si vamos a lo formal, una base de datos es simplemente un conjunto de datos interrelacionados almacenados en un lugar. Con lo cual podría ser sencillamente una caja con papeles de datos que tengan alguna relación entre si, como por ejemplo las boletas de servicios de un hogar cualquiera.
  • Uno asocia el término base de datos a algo informático pero el mismo es mucho mas amplio y simplemente hace mención a una colección de datos almacenados. En nuestro caso específicamente, nos referiremos a un programa que brinda el servicio de guardar nuestra información de una manera que permita salvaguardar los problemas de eficiencia, seguridad y concurrencia(que varios accedan al mismo tiempo) en un formato particular
Datos persistentes
  • En nuestros programas, tendremos dos tipos de datos: los persistentes, que son aquellos que querremos seguir teniendo cuando prendamos nuevamente nuestro sistema, y los datos propios de la ejecución del programa, que desaparecerán de la memoria de la computadora apenas apaguemos nuestro sistema.
Arquitectura de la solución
  • De esa manera, separamos nuestra aplicación de lo que es el servidor de base de datos donde guardaremos la información, y por ello tendremos una estructura como la siguiente:


Arquitectura de la aplicación
  • Muchas aplicaciones hablarán con un programa llamado Sistema de Gestión de Bases de Datos que a la vez nos va a brindar acceso a los distintos datos que necesitemos para nuestro programa
  • Nosotros en particular, vamos a estar trabajando con bases de datos llamadas RELACIONALES. En este tipo de bases de datos, lo que se intenta modelar son precisamente las relaciones entre los mismos. Entonces, por ejemplo, una persona, es modelada como un conjunto de datos: número de documento, fecha de nacimiento, sexo, nombre, apellido y cualquier otro dato que yo crea que en su conjunto representan a una persona.
Estructura de relaciones
  • Cualquier elemento de nuestro sistema, será modelado como una relación de datos en lo que denominamos tablas de la base.
  • También podremos guardar en nuestra base relaciones entre los elementos de nuestro sistema. Por ejemplo, podremos tener una nueva tabla que me relacione una persona con uno o mas auto, en la relación TIENE (para describir que una persona puede tener ninguno, uno o mas autos).
  • Las tablas tendrán la siguiente forma
  • En la ilustración podemos ver como cada una de las columnas contendrá un tipo de dato (en el caso de las personas serán el número de Documento, la fecha, etc) y cada una de las filas representará la relación que conforma a cada una de las personas en mi modelo. En mi tabla, solo tendremos las relaciones que tengan sentido. Esto quiere decir, por ejemplo, que no puede haber dos personas con distinto nombre y apellido que tengan el mismo número de documento.
  • Para manejar este tipo de tablas, se pueden utilizar distintos tipos de programas. Nosotros en particular utilizaremos para nuestros proyecto el Microsoft SQL Express que se lo pueden descargar gratuitamente de internet.
SQL
  • Para poder realizar acciones en mi base de datos, tengo que conocer el lenguaje mediante el cual me comunico con el programa: el SQL.
  • El SQL es un lenguaje que nos permite hacer dos tipos de grupos de acciones: definición (crear una base, crear tablas, borrarlas, etc) y la manipulación, que nos permite insertar datos en las tablas, borrarlos, actualizarlos y listarlos.
  • Lo primero que tenemos que ver, una vez que creamos la base de datos, es como armamos las famosas tablas de las que vinimos hablando. Esto se hace mediante la sentencia CREATE
CREATE

CREATE TABLE <NOMBRE>
(
A1TIPO1[NULL | NOT NULL] [DEFAULT V1],
ANTIPON[NULL | NOT NULL] [DEFAULT Vn],
PRIMARY KEY (Ai,..,Aj),
FOREIGN KEY (Ai,..,Aj) REFERENCES <NOMBRE_FORANEA> (Ai,..,Aj)
)
Ejemplos de uso de CREATE son:
[ Cambia placa ]
CREATE TABLE PROVEEDOR
(
COD INT NOT NULL,
NOMBRE CHAR(50) NOT NULL,
TEL INT,
PRIMARY KEY (COD)
);
  • En estos ejemplos estoy creando primero una tabla de nombre PROVEEDOR, donde tendré tres tipos de datos. El primero será un número entero que no podrá tener datos vacíos con nombre COD. Luego tendremos una palabra, que no podrá estar vacía, de 50 caracteres máximo, de nombre NOMBRE. Y finalmente tendremos un números entero de nombre TEL, y definiré que la clave primaria será COD.
Claves
  • Que son las PRIMARY KEY y FOREIGN KEY que aparecen? La clave primaria es un subconjunto de los tipos de datos que tengo en la tabla que me identifican unívocamente a una fila de la tabla. Aun es complejo de entender? Básicamente piensen en como diferenciarían a dos PROVEEDORES con los datos que les dí. Si ya sabemos que solo con el número de código de proveedor podemos decir que dos proveedores son distintos, entonces nuestra clave primaria será ese dato. El nombre en general no nos sirve porque pueden existir dos proveedores con el mismo nombre.
  • En el caso de la clave foránea es un poco mas complejo y nos permite por ejemplo hacer algunos controles en nuestra base de datos. Si tengo la relación AUTO, y el mismo posee el número de documento de su dueño, al definirlo como clave foránea me obliga a que el número de documento que aparece en AUTO tenga que existir SI O SI en PERSONA. Es un control que nos brinda automáticamente el uso de la base de datos.
DROP
  • Luego, para borrar una tabla haremos sencillamente:
DROP TABLE <NOMBRE>
Ej: DROP TABLE PROVEEDOR

INSERT
  • Una vez que tenemos nuestras tablas, en este caso PROVEEDOR, queremos empezar a llenarla de datos, y para ello utilizaremos la instrucción INSERT:
INSERT INTO TABLE <NOMBRE> (A1,..,AK)
VALUES (V1,..,VK);

EJ: INSERT INTO ARTICULO (COD,NOMBRE,TEL)
VALUES (5, “JUAN PEREZ”,666)
  • Lo que estamos haciendo con esta instrucción es decirle a nuestra base de datos que inserte los datos 5, “JUAN PEREZ” y 666 en los campos COD, NOMBRE y TEL de la tabla ARTICULO en el orden indicado.
UPDATE
  • Luego, si queremos modificar los datos que ingresamos, utilizaremos la instrucción UPDATE:
UPDATE <NOMBRE>
SET (A1 = V1,...,AN = VN)
WHERE <CONDICIÓN> ;
EJ: UPDATE PROVEEDOR P
SET (P.TEL = 0000)
EJ: UPDATE PROVEEDOR P
SET (P.TEL = 0000)
WHERE P.COD = 5
  • El UPDATE nos permite filtrar cuales serán los proveedores que queremos modificar. En el primer ejemplo estamos modificando a todos los proveedores seteándolesel teléfono en 000, mientras que en el ejemplo solo lo modifica en aquel proveedor cuyo código es 5.
DELETE
  • Luego, si nos dimos cuenta que queremos borrar algún dato en particular, simplemente lo hacemos utilizando la instrucción DELETE
DELETE FROM <NOMBRE>
WHERE <CONDICIÓN> ;

EJ: DELETE FROM PROVEEDOR P
WHERE P.COD = 5;
  • Aquí en particular estaremos borrando el registro en la tabla cuyo código sea igual a 5. En caso que queramos borrar toda la información de una tabla simplemente ejecutamos la instrucción DELETE FROM PROVEEDOR, aunque no es recomendable hacer este tipo de acciones.
SELECT
  • Finalmente tenemos la instrucción para listar información, la cual nos servirá para poder recuperar todo lo que fuimos guardando.
SELECT A1,A2,..,AN
FROM T1,T2,..,TN
WHERE p
  • En el select tenemos primero el listado separado por comas de A1, A2, …, AN que se refiere a cuales datos queremos traer. Por ejemplo, quiero que solo me traiga los códigos de proveedor y nombre, de la tabla PROVEEDOR, por lo cual pondremos:
SELECT COD, NOMBRE
FROM PROVEEDOR
  • Nos traerá todos los proveedores que hayamos guardado, pero solo su código y nombre. Si en cambio queremos que nos traiga todos los datos de cada proveedor, reemplazaremos la lista de atributos por un asterisco (*).
  • Podremos agregar filtros al igual que hicimos en el UPDATE o en el DELETE agregando condiciones en el WHERE. Por ejemplo:
SELECT *
FROM PROVEEDOR
WHERE COD=5
  • Y para terminar, debemos pensar como hacemos para relacionar datos entre tablas.
  • Si asumimos que aparte de la tabla de proveedores, tenemos una tabla artículos de la siguiente forma:
[ Inicia placa ]
CREATE TABLE ARTICULO
(
COD INT NOT NULL,
NOMBRE CHAR(50) NOT NULL,
CANTIDAD INT NOT NULL,
COD_PROV INT NOT NULL,
PRIMARY KEY (COD),
FOREIGN KEY (COD_PROV) REFERENCES PROVEEDOR (COD)
);
  • Asumamos que tenemos los siguientes datos en cada una (artículo, proveedor):

Select de varias tablas
  • Cuando nosotros hacemos SELECT * FROM ARTICULO, PROVEEDOR lo que nos devuelve es una combinación de todos los datos con todos:

  • Pero en realidad a nosotros solo nos interesan las filas que tengan sentido, y para ello utilizaremos el WHERE para solo ver lo que nos interesa, quedando:
SELECT *FROM ARTICULO A, PROVEEDOR P
WHERE A.COD_PROV = P.COD


Repaso
  • Con las bases de datos, puedo guardar información y tenerla siempre disponible cada vez que reinicio mi sistema, pudiendo acceder a los datos de manera sencilla.
  • Algunas de las ventajas que tienen estos servidores son:
    • Nos dan herramientas que garantizan evitar datos duplicados
    • Si hay datos que están relacionados, al eliminar un dato elimina todos los datos relacionados dependientes.
    • Nos ayuda a hacer nuestro modelo de datos mas comprensible, accesible y estandarizado.
  • Para trabajar con estos servidores, hemos visto algunas tareas que vamos a usar siempre en nuestro proyectos:
    • Creación de tablas
    • Inserción y actualización de datos.
    • Métodos para hacer consultas sobre los datos

Espero haber ayudado en algo. Hasta la próxima oportunidad!











  
       
free counters

Páginas vistas en total según Google