domingo, diciembre 25, 2011

XML correctamente estructurado - CBDS

Lección anterior: Haciendo consultas a bases de datos relacionales.

A partir de este vídeo las cosas se van poniendo interesantes. Ya empiezan los ejercicios. Esta vez solo tenemos una preguntas para evaluar la compresión, pero con los próximos vídeos vendrán unos muy buenos.

Recomiendo encarecidamente que  analicen el documento XML con que la profesora trabaja. Yo no acabé de asentar toda la información hasta que no lo vi. Al final donde están los enlaces de descarga hay una versión traducida del mismo documento y también la versión original, pueden usar la que quieran.

Resumen de XML correctamente estructurado (traducido del PDF):

  • Estándar para la representación e intercambio de data.
  • Formato de documento similiar a HTML
    • Las etiquetas describen el contenido de los datos en vez de formatearlos
  • También es un modelo de formato de flujo de datos.

  • Elementos tipo etiquetas (nido)
  • Atributos
  • Texto

viernes, diciembre 23, 2011

Haciendo consultas a bases de datos relacionales - CBDS

Lección anterior: El modelo relacional

Continuamos con el modelo relacional, en está lección la profesora Jennifer Widon nos habla en general sobre las consultas en una base de datos relacional.

Resumen de "Consultas a una BD Relacional". (Traducido del PDF):

  1. Diseñar el esquema; se crea usando LMD o DDL en inglés.
  2. Carga inicial masiva de los datos.
  3. Repetidamente: ejecutar consultas y modificaciones.

   — Todos los estudiantes con GPA > 3.7 que aplican a la universidad de Stanford y al MIT solamente.
   — Todos los departamentos de ingeniería en California con más de 500 solicitantes
   — Universidades con los promedios más altos de estudiantes admitidos en los últimos 5 años.

  • Algunas consultas son más fáciles de plantear; algunas son un poco más difíciles.
  • Algunas consultas son fáciles de ejecutar para un SGBD; algunas más difíciles. 
  • Los dos puntos anteriores no están relacionados. Son independientes.
  • Los "lenguajes de consulta" también se usan para modificar los datos.
  •  Una consulta retorna una relación como resultado.

  • Álgebra Relacional (formal)
     $$ {\LARGE \pi}_{\scriptsize ID} \; {\LARGE \sigma}_{\scriptsize GPA} \, \wedge \, _{\textrm{Cname = 'Stanford'}} (\textrm{Estudiante} \, \infty \, \textrm{Aplica})$$
  • SQL (verdadero lenguaje / implementado)
  • SELECT Estudiante.ID
    FROM Estudiante, Aplica
    WHERE Estudiante.ID = Aplica.ID
    AND GPA > 3.7 AND Universidad='Stanford'
    

La consultas anteriores son equivalentes y pertenece a los IDs de los estudiantes con GPA > 3.7 que aplican a Stanford.

Descarga: Consultas a una base de datos relacional. Subtítulos.


jueves, diciembre 22, 2011

El modelo relacional - CBDS

Lección anterior:  Introducción.

Empezamos con el primer tema del curso: el modelo relacional.

Síntesis del modelo relacional (traducido del PDF):
  • Usado por los principales sistemas comerciales de bases de datos.
  • Muy simple.
  • Lenguajes de consulta de alto nivel: simples, pero expresivos.
  • Implementaciones eficientes.
 Esquema = descripción de las estructuras de las relaciones en una base de datos.
Instancia = contenido de la base de datos en un instante determinado del tiempo.



Base de Datos (BD) = conjunto de relaciones (o tablas).
Cada relación tiene un conjunto  de atributos (o columnas).
Cada tupla (o fila) tiene un valor para cada atributo.
Cada atributo tiene un tipo (o dominio).

NULL (nulo) valor especial para "desconocido" o "indefinido".
Key atributo cuyo valor es único en cada tupla, también puede ser un conjunto de atributos los cuales combinados son únicos.


Create Table Student(ID, name, GPA, photo)
Create Table College(name string, state char(s), enrollment integer) 

Descarga: Modelo Relacional. Subtítulos.


miércoles, diciembre 21, 2011

Introducción - Curso de Base de Datos Stanford (CBDS)

Nota: Los títulos de los post siguentes tendrán la siguiente nomenclatura: [Nombre del tema] - CBDS.

Arrancamos hoy con el curso de Base de Datos de Stanford. En esta introducción la profesora Jennifer Widom estará hablando de las ventajas que los Sistemas Gestores de Bases de Datos (SGBD) ofrecen a las aplicaciones y al almacenamiento de datos en sí, de los conceptos claves cuanto se habla de BDs y los diferentes roles que puede ocupar una persona involucrada con una BD.

En esta ocasión como es una introducción no habrán ejercicios, ni preguntas, solamente el vídeo.

Como ya saben los vídeos estarán en la misma página del curso (recuerden que tienen que estar registrados). Es extremadamente sencillo descargarlos por lo que no considero necesario alojarlos en otro servidor.

Descarga: Introducción. Subtítulo.

Supongo que ya saben colocar los subtítulos, pero si no, les explico: para que la mayoría de programas los muestre basta con poner los archivos de vídeo y subtítulo en la misma carpeta y con el mismo nombre, variando solo en la extensión: .srt (para los subtítulos) y .mp4 (para el vídeo). Abrir el vídeo y ya.




sábado, diciembre 17, 2011

Inicio Curso de Base de Datos de la univerisidad Stanford traducido al Español



Hace al rededor de cuatro meses empezó un curso de Introducción a las Bases de Datos impartido por la universidad Stanford. Dos cuatrimestres atrás me fue mal en esa asignatura y en el próximo me toca enfrentarla otra vez, pero tratando temas más avanzados, así que decidí empezar el curso para reforzar todo lo que ya sabía y terminar de aprender lo que no, además, de paso podía tener un manifiesto por haber cumplido el curso que como es de Stanford algún valor debía tener. Pero con el afán de la misma universidad no fue fácil seguirlo y términé por abandonarlo. Ahora en vacaciones, aunque el curso ya terminó y no se puede conseguir el manifiesto, todavía el conocimiento sí y quiero compartirlo con ustedes.

El curso como han de saber es virtual por lo que consiste en una serie de vídeos (muy bien explicados por cierto), ejercicios teóricos, prácticos y exámenes que se corrigen al instante. También había un foro en que participaban los mismos estudiantes, como el curso ya terminó se supone que ya nadie está activo, aunque tal vez encuentres a alguien. Lo que podría ser un problema es que está en ingles, pero me he tomado la tarea de traducir los subtítulos de los vídeos y también de los ejercicios teóricos y prácticos para quiénes no sea muy amigo de ese idioma.

Durante estos días publicaré unas cuantas traducciones a los vídeos y ya veremos que me dicen ustedes a ver si continúo. Mínimo me comprometo a publicar los subtítulos pertenecientes a un vídeo por semana y continuaré así hasta que empiece la universidad otra vez, después es posible que sea un poco menos frecuente.

Los temas que se tratan en el curso son los siguientes:

miércoles, diciembre 07, 2011

Algoritmos más eficientes aplicando matemáticas

Continuando con mi visión de que las matemáticas son de mucha ayuda en la creación de software, en este post daré un ejemplo de cómo con una ecuación de segundo grado se puede construir una versión de un programa más eficiente que usando exclusivamente la lógica de programación.

Primero pido excusas a los puristas de las matemáticas ya que por ser tan amplias y tan exactas no domino la jerga a totalidad y probablemente diga una cosa cuando signifique otra, pero sé que me entenderán.

Supongamos que nos piden hacer un programa de esos que los profesores asignan en introducción a la programación para despertar la lógica. El programa debe pedir un número y calcular la sumatoria desde 0 hasta el número dado:
$$ \sum_{k=0}^n{k} $$
como si fuera el factorial, pero en vez de multiplicar, sumar. Por ejemplo, si el número introducido fue el 6

lunes, diciembre 05, 2011

Las matemáticas en la creación del software

No soy matemático. No odio las matemáticas ni tampoco me apasionan. No soy un genio con ellas, ni un desastre tampoco, de hecho algunas personas me consideran bueno (yo no les creo). Pero es obvio decir que la matemática ha influido en casi cualquier cosa con que tengamos contacto en un día normal. El desarrollo de software no es la excepción.

He oído de a muchos programadores decir que no es necesario ser bueno en matemáticas para ser un buen programador. Por otro lado he leído a otros decir que los grandes (por ejemplo Dennis Ritchie) estudiaron primero algo relacionado con las matemáticas antes de dedicarse a la informática o creación de software. Y no lo sé, tal vez sea cierto o no, quizá no hay una respuesta. Yo apenas estoy conociendo este mundo, por eso no soy nadie para emitir juicios, pero sí para dar mi opinión.

 ¿Qué son las computadoras? ¿Qué son los algoritmos que la hacen funcionar? Claro, pudiéramos dar una definición técnica de estos conceptos, pero al final todo se reduce a números, ceros y unos: binarios.

Los que se manejan en este mundo de la computación y el desarrollo de aplicaciones saben que mientras más se acerca un lenguaje a la máquina más poderoso es.

El poder del lenguaje $P$ es inversamente proporcional al nivel del lenguaje $M$:
$$P\; \alpha \frac{1}{M}$$
Y mientras más bajo es el nivel, más riguroso es. Se trabaja más directamente con la máquina por lo que tenemos más control de manipularla al antojo ¿y qué dijimos que son las máquinas en esencia? una programación de ceros y unos: números.

Pero esto no se queda ahí, porque en la práctica me parece que solo los microprocesadores se programan en binario lo que se aleja un poco de nuestra área. A la hora de hacer un proceso en código nos vemos en la necesidad de crear, inventar una fórmula que según una entrada de datos nos acondicione una salida (escribiré sobre esto en otro post para no hacer muy largo mi estreno:-) ) y eso no se consigue de otra forma que no sea con la lógica-matemática, añadiéndole su pizca de creatividad que nunca se queda.

Entrando más de lleno en el asunto, realmente nunca he tratado de ver detrás de un método de una librería. Me refiero a cómo está hecho, qué tan eficiente es, cuál es la lógica que han seguido para lograr el resultado. Pero me atrevo apostar por sentido común que muchos de ellos están basados directamente en las matemáticas. Nosotros no hacemos nada más que utilizarlos sin indagar en su contenido, igual como usamos la luz, la computadora, el vehículo, etc.

 El que domina la ciencia de la precisión viene siendo como un ingeniero civil frente a un maestro constructor; como un cirujano frente a un teórico de medicina. Porque el que conoce los orígenes, el fondo, el meollo, la esencia de las cosas es quien más puede experimentar e inventar cosas nuevas. Los demás nos limitados a esperar resultados.

A mi me asusta pensar que para ser bueno desarrollando software haya que serlo en matemáticas, porque no lo soy, no a un nivel que se me pueda llamar "bueno" y quiero convertirme en un gran desarrollador. Me parece que ese es un miedo que tendré que dominar si es posible.