27 febrero 2007

ADO - Parte 1

El ADO es un término que ha cautivado a las multitudes. Unos bautizaron una línea de autobuses con ese nombre. Hasta el Tri cantaba sobre él (Estoy esperando mi camión en la terminal del ADO... más).

En mi caso, ADO se refiere a ActiveX Data Objects, una colección de objetos hechas por Microsoft para poder programar bases de datos en cualquiera de sus lenguajes visuales (en nuestro caso estaremos jugando con Visual Basic 6.0 y .net) como machitos, no usando el pobre Data Control que viene con el Visual Studio 6.0. Tengo tiempo usarlos en sistemas de VB 6.0 (así voy a abreviadr Visual Basic 6.0 porque creo que lo voy a escribir varias veces y la flojera de escribir lo mismo tantas veces me embarga) y funcionan muy bien (y conste que los usé en servidores de bases de datos remotos, a unos 200 km de distancia entre ellas y requería tiempos de respuesta rapidos). No voy a ahondar mucho en la historia, características especiales, ni otros detalles de ese tipo ya que hay mucha información en la red. Les recomiendo que vean esta página.

El ADO viene muy bien integrado al Visual Basic .NET, pero en la versión 6.0, la que voy a estar describiendo en estos días, hay que especificarle que lo necesitamos.

El ADO contienen 3 objetos que me interesan: el objeto Connection, el Recordset y el Command. El Connection es un objeto que te permite enlazarte a otra base de datos, el Command es el que te permite enviar instrucciones SQL a la base de datos (por medio de la conexión) y el Recordset contiene la tabla resultante de una consulta hecha. A lo mejor se entiende mejor esto con este dibujo.


Como puedes ver, el objeto Connection es como esa línea de teléfono por donde pasan la voz (comandos y datos). El Command son las instrucciones que da el jefe a su achichincle, cosas que tiene que hacer. Si el comando dada por el jefe especifica que necesita datos, el achichincle se los da (los datos) por teléfono (en nuestro caso regresan en un Recordset).

Pero dijo Jack el destripador, vámonos por partes. Para poder usar estos objetos en VB 6.0, tengo que incluirlo en mi proyecto. Para hacer esto, crea un nuevo proyecto (Aplicación EXE) y métete al menú Proyecto -> Referencias. Así:


Después de esto, aparece una ventana como esta:


Ahora agrega la referencia a Microsoft ActiveX Data Objects. Yo lo probé por primera vez con la versión 2.1, pero le he hallado unos detallitos. Mejor incluye la versión 2.5 en adelante, como lo hice en la sigueinte ventana:


¡Listo! Ese fue el primer paso. Esto hace que VB 6.0 integre los objetos ADO que vamos a estar usando (mencionados previamente).

Ahora vamos a algo que nos ahorrará un montón de código más adelante. Voy a declarar objetos ADO de manera global, lo que conocemos como variables globables. A diferencia de las variables declaradas adentro de las funciones (llamadas variables locales), el contenido de estas variables puede ser manipulado por cualquier procedimiento o función que tenga cualquiera de las formas.

Si declaro las variables al principio de una forma, antes de cualquier còdigo, el contenido de esa variable puede ser usada en cualquier función de la forma. Sin embargo, si quiero que la variable sea accesible desde cualquier forma (o sea, nuestro caso), no se puede declarar en una forma. Tenemos que crear un módulo. Los módulos agrupan código que puede ser usada en cualquier forma de un proyecto VB 6.0.

Para crear un módulo, puedes hacerlo de dos maneras: una es dándole click al menu Proyecto->Agregar módulo o bien darle click al triangulito a un lado del botón de Agregar formulario y del menú que aparece, elige la opción Módulo. La imagen que sigue muestra las dos maneras de hacerlo:


Una vez que hago esto, me aparece la ventana que me permite escribir código que puede ser usado por todas las funciones y procedimientos de todas las formas del proyecto. Para declarar variables, se hace muy parecido a declarar una variable "normal" (si tienes dudas, consulta esto), solamente que en lugar de escribir Dim, escribimos Global. Así se vería el módulo:


Hasta allí estamos preparados para la acción. Para concluir, voy a hacer un resumen de lo que he hecho para usar ADO en mis aplicaciones VB 6.0:

  • Incluyes la referencia a Microsoft ActiveX Data Objects en tu proyecto.
  • Creas un módulo para poner nuestras variables globales
  • Declaras las variables en el módulo
Estos dos últimos sirven sobre todo para ahorrar mucho código más adelante. ¿Y qué hace falta para que nuestra aplicación quede totalmente chuvidubis? Haría falta:
  • En la función Form_Load() de la primera forma que aparece al ejecutar tu aplicación (generalmente Form1 si no le cambiaste el nombre), hay que inicializar el objeto Connection para "apuntarlo" a la base de datos que quiero usar.
  • Allí mismo declaro mi objeto Command y le digo que use la Connection que acabo de crear.
  • Allí mismo puedo crear mi objeto Recordset. Lo ligo a los objetos creados anteriormente con anterioridad (o sea, el Command y el Connection).
  • Lo que sigue depende de mi programa, pero seguramente estaré usando el Command y Recordset para trabajar.
  • Al terminar, cierro mi Command y "desconecto" mi Connection.
  • Soy feliz :)

Seguimos en la próxima. ¡Se divierten!

23 febrero 2007

Poniéndonos máscaras

No voy a hablar de una fiesta de disfraces. Sé que las máscaras son usados en estas pachangonas para divertirse y en el Flash sucede lo mismo. Puedo usar máscaras para ocultar parte de mi animación. No todos los libros que hablan de Flash tratan el tema por creerlo anticuado o no muy usado, pero estoy seguro que después que leas esto, vas a encontrar que las máscaras son muy útiles (si no creen, pregúntenle a algún ladrón de bancos, jeje).

Haz de cuentas que una máscara es un pedazo de cartulina recortada con alguna figura y pegado sobre tu monitor. Este hace que veas solamente ciertas partes de lo que sucede en la pantalla. Flash lo hace más sencillo y rápido (sin tener que gastar en cinta y cartulina).

La manera básica y más simple de como crear una máscara lo puse en el siguiente video. En ella hago lo siguiente:
  1. Creo una nueva película con una capa llamada TV.
  2. Dibujo una televisión en esa capa e ilumino mi dibujo
  3. Creo dos capas arriba de la capa TV, una llamada Mask y la otra Broadcast. Mask va a ser la capa que va a contener la máscara y Broadcast será la capa que contendrá todos los objetos (en este caso texto) que deseamos mostrar en la pantalla de la tele. Hay que tener cuidado en el órden de las capas, si no, bailamos con Bertha las calmadas.
  4. Selecciono el área relleno de la tele (sin el contorno, o "stroke") y lo copio.
  5. Escondo todas las capas exceptuando a la Mask y pego en el mismo lugar la pantalla que recorté en el paso anterior. Terminando esto, lo relleno de color rosa. Realmente no importa el color; a Flash solo le importa la forma. Pero como el color favorita de mi hija de dos años es el rosa, por eso le puse ese color.
  6. Bloqueo la capa Mask y hago visibles las otras dos capas.
  7. En la capa TV, convierto todo lo que está allí (mi dibujito cucho de la tele) a un símbolo gráfico, bloqueo la capa TV y desbloqueo la Mask.
  8. En la capa Mask convierto la forma de la pantalla en otro símbolo gráfico.
  9. Ahora viene lo bueno. Con la capa Mask seleccionado, modifico sus propiedades y "relleno" la "bolita" (radio button) a un lado de Mask (o máscara si estás usando la versión en español) y dejo todos los otros valores tal y como estaban y presiono Aceptar. Fíjate como ha cambiado la apariencia de la capa Mask en la línea del tiempo.
  10. Luego selecciono la caba Broadcast y lo modifico sus propiedades y el único que cambio es el botón Masked (no confundir con la Mask) y le doy click a Aceptar. Fíjate como cambia la apariencia de la capa Broadcast en la línea de tiempo. Es importantísimo que la capa o capas que quieres que estén parcialmente escondidos deben ponerse en capas abajo de la máscara creada.
  11. Hasta ahorita no se ven los efectos de la máscara porque todavía no hay contenido en la capa Broadcast, pero eso lo vamos a cambiar en un ratito...
  12. Incremento el número de fotoramas (frames) para que se alcance a observar mejor la acción. Fíjate mis viejas mañas para poder ver más fotoramas de los que normalmente se ven.
  13. Luego pongo texto en la capa Broadcast, lo convierto a un símbolo gráfico y hago unaq interpolación de movimiento (Motion Tween) entre los fotoramas (frames) 1 y 100 de la capa Broadcast.
  14. Para terminar, debo bloquear tanto la capa Mask y la Broadcast. Flash solo muestra los efectos de una máscara cuando todas las capas afectadas están bloqueadas.
Si quieres el archivo TV.fla (el proyecto guardado después de hacer todo lo anterior), lo puedes bajar aquí.

El video (por si no lo puedes ver aquí abajo), lo puedes encontrar en YouTube aquí.

Todavía no termino con máscaras. Falta animar máscaras, aplicarlos a muchas capas y una que otra cosa más, pero por lo pronto, creo que se entiende la idea general. ¡Nos vemos!


22 febrero 2007

Repitiendo y repitiendo y repitiendo y repitiendo y repitiendo y repitiendo y repitiendo...

Una cosa que me aburre de sobremanera es hacer cosas repetitivas. Al principio no hay problema, pero conforme pasa el tiempo haciendo lo mismo una y otra y otra y otra y otra vez, me da flojera, me enfado, me empiezo a equivocar, me pongo de mal humor, rompo mi ropa y me pongo verde. Bueno, tal vez no es para tanto. De todos modos, si también te enfada hacer tareas repetitivas, te tengo una buena noticia: cualquier lenguaje de programación (bueno, casi cualquiera) cuenta con instrucciones que te permiten hacer cosas muchas veces.

Visual Basic 6 tiene varias instrucciones que controlan ciclos. Voy a escribir acerca de los 2 más comun es el tremendo FOR y el temido WHILE.

Pero, ¿cuál me conviene usar? Como diría Jarabe de Palo, depende (si no sabes porque menciono a Jarabe de Palo y depende, fíjate el porque de mis comentarios lelos aquí).

La instrucción FOR es muy útil para aquellas ocasiones en que sabes de antemano cuántas veces se va a repetir un conjunto de instrucciones. La sintáxis es esta:


Para que se entienda mejor, vámonos viendo un ejemplo. Un cálculo que se puede resolver usando ciclos es la potencia de un número (espero que sepas como calcularlo). Como es algo que se repite un número finito de veces, podemos usar un FOR sin broncas.

Este sería el código de un programa que calcule la potencia. Lo hice todo adentro del Form_Load para no meterme en rollos de dibujar ventanitas y el resto de esos rollos. Por lo tanto, haz una aplicación Visual Basic 6.0, dale un doble click al Form1 y en la ventana del código, escribe esto:


Creo que se entiende pero si te queda alguna duda, avísame y con todo gusto lo platicamos.

El siguiente ciclo que voy a describir es el WHILE. Este es un ciclo que repite instrucciones mientras se cumpla una condición. Su sintáxis es:


Y aquí hay un pequeño ejemplo. En esta función (si, ya sé que me gusta el Form_Load, pero es que creo que simplifica la explicación) se declara una variable de tipo entero (llamado Counter) y se le inicializa en 0 (Cero). El ciclo While se repite mientras el valor de Counter sea menor a 20 y cuando es igual, muestra el resultado en un MsgBox.


Existen otros ciclos, sin embargo creo que con estos tienes más que suficientes. ¡Seguimos en contacto!

20 febrero 2007

Videos de FreeHand

Si de pura casualidad leíste un mensaje que hice hace un par de semanas acerca de FreeHand (el que está aquí) y no pudiste descargar los videos, aquí te dejo las ligas de YouTube donde los puedes ver.

Actividad 1: http://www.youtube.com/watch?v=XJBYmLYnlX8 Actividad 2: http://www.youtube.com/watch?v=3daQxhVIiJU

Abajo pongo el video de la actividad 1. Ya te tocará bajar y ver el de la 4. ¡Hasta la próxima!


Nota sobre los videos de Fireworks

Como varios han tenido broncas para bajar los videos, decidí usar YouTube para que los puedan ver.

Sé que no pueden ver estos videos dentro de la escuela (muchas veces dejan bloqueada la página), pero lo pueden revisar desde cualquier otro lado (bueno, cualquier otro lado con una conexión a internet, obvio).

Los URLs son:
Video 1: http://www.youtube.com/watch?v=a6-ArD-lfAs
Video 2: http://www.youtube.com/watch?v=MhCqwWhR5xM
Video 3: http://www.youtube.com/watch?v=i3qqAYVd43E
Video 4: http://www.youtube.com/watch?v=c02sNnc4aak

Espero que con esto se entienda mejor. ¡Hasta la próxima!

17 febrero 2007

Los primeros pasos en Macromedia Fireworks

Este programa es muy sencillo de usar. Como es tan sencillo de usar, mejor decidí buscar algún tutorial sencillo que pudieran ver y hacer videos que vayan explicando cada parte. El manual lo puedes encontrar aquí.

El primer video cubre aspectos básicos: crear archivo, dibujar con herramientas de vectores y jugar un poco con bitmaps. El segundo hace uso de máscaras, el tercero trabaja con texto y el cuarto usa las funciones de optimizar.

Por allí en una (creo que es el tercero) aparece una ventana de otro programa (HyperCam) en ratitos. Esos fueron errores míos. Espero que esto no sea demasiado inconveniente.

¡Nos vemos!

13 febrero 2007

¡Arranca la OMI (Olimpiada Mexicana de Informática) 2007!

Para todos los que se inscribieron en la olimpiada, arrancan las actividades este 17/Febrero en el ITESO.

Van a comenzar con la premiación a los que concursaron en el de Multimedia y al finalizar comienza el exámen lógico.

Para mayores informes, visita la página de la OMIJAL.

¡Allá nos vemos!

12 febrero 2007

Condicionado mis broncas

La vida está llena de decisiones que hacer. ¿La quiero o no la quiero? ¿Me debo casar o no? ¿Le digo que si o no? ¿Está más guapo que mi novio anterior? ¿Existe vida inteligente en Marte? Las decisiones de la vida son agobiantes y precisamente por eso las computadoras pueden tomar algunas decisiones por nosotros.

En Visual Basic hay dos maneras de decidir. Una usando el comando IF y otra con el SELECT CASE.

Hice un pequeño programa para demostrarlo. El programa completo con todo y ejecutable lo puedes bajar aquí. Se trata de un pequeño programa que muestra una ventana con dos cajas de texto para que el usuario escriba dos números. De lado derecho hay 4 botones (Command1 al Command4) para indicar la operación que quieres hacer con ellos. Abajo de las cajas de texto está una etiqueta (Label3) grandotote que al principio no tiene nada, pero que al apretar los botones de operaciones ponen en la etiqueta grandote el signo de la operación seleccionada. Abajo de eso está el botón Calcular (Command5) que hace la operación deseada (la que está en el Label3). Para terminar, está el botón Salir que finaliza la ejecución del programa. Esta es la pantalla principal:


La etiqueta de la operación no aparece hasta que presiono un botón de operación. Así se ve cuando ya escribí numeritos y le pido una suma.


Cuando le picas al botón Calcular, aparece un MessageBox con el resultado. Se lo pueden imaginar, pero 'nomás por andar de farol, les pongo la imagen aquí:



No es un programa que haga mucho, sin embargo, ejemplifica el uso del SELECT CASE y el IF. Ahora veamos como funciona.

Esta es la pantalla principal en la vista diseño:


Algunos detallitos, pura cultura general y nada que ver con el IF o SELECT CASE. El Label3 es el área que no tiene puntitos abajo de las cajas de texto. Le cambié la propiedad Font para que fuera más grande y en negritas. También le cambié la propiedad Forecolor para que fuera rojo. Para que los botones Calcular y Salir (Command5 y Command6) tuvieran imágenes, alteré la propiedad Picture, que te permite elegir una imágen (yo usé uno en formato .ICO, formato de los íconos de Windows) y hay que cambiar la propiedad Style a la opción Graphical.

Ahora toca la programación de los controles. Lo más fácil es lo que hacen los botones de suma, resta, multiplicación y división (Command1, Command2, Command3 y Command4 respectivamente). Lo único que hacen es ponerle un valor a la propiedad Caption del Label3. Como esta propiedad es la "defáult" de un label, omití escribirlo (si, soy flojo y que, jeje). Solo voy a poner el código del Command1 por simple simplificación simple:


El Command6 (el botón Salir) no tiene chiste, así que ni lo escribo ni lo explico. Solo tiene la función End para finalizar la ejecución del programa.

La función que hace toda la talacha es el Command5. Este es el código. Abajo lo explico.


Como puedes observar, comienzo declarando las variables que voy a usar. En x y y voy a almacenar los números que escriban en las cajas de texto (recuerden que hay que convertir la cadena que están en Text1 y Text2 en números para poder hacer operaciones con ellas) y en z voy a almacenar el resultado de la operación. SePudo solo me va a decir si se pudo realizar la operación o no y Resultado es una cadena donde voy a poner el resultado, formateado como numerito para que se vea chuvidubis.

Inicializo a SePudo en False porque soy negativo, no te creas, es porque si fallan las verificaciones, ya sé que no se pudo (me evito escribirlo en todos los casos del IF). Creo que va a quedar más claro ahorita que llegue a las verificaciones.

Reviso que haya algo escrito en Text1. Si no tiene nada escrito (o sea que Text1=""), despliego un mensaje de error y pongo el cursor (la rayita vertical parpadeante) en Text1. Si tiene algo, hago la misma verificación hago con Text2. Después de verificar que hayan numeritos en las cajas de texto, reviso que haya presionado uno de los botones de operaciones. Como se vió antes, los botones de operaciones (del Command1 al Command4) escriben algo en Label3. Si no tiene nada, despliega un error y pone el cursor sobre el botón de la suma (Command1).

Si pasó todas las verificaciones, paso a trabajar. Asigno valores numéricos a x y y, establezco que SePudo en verdadero (si ya pasó casi todas las verificaciones, se supone que si se pudo realizar la operación) y luego, dependiendo de lo que tenga, realizo la operación indicada. Para esto uso el SELECT CASE según lo que contenga Label3. Como verás, a z le asigno el resultado de la operación. El único caso en que se verifica otra cosa, es en el caso de la división. Uso otro IF para asegurarme que no haya división entre 0 (cero), porque es un errorsote.

Con eso termino. En caso de tener dudas, ahi me avisan. ¡Hasta la próxima!

11 febrero 2007

Visual Basic 6.0 - Un repaso rapidín: tipos de datos y variables

En primer lugar, probablemente te estés preguntando para que $"!#¿ aprender a usar Visual Basic 6.0 si ya está en el mercado desde hace un buen el Visual Studio .net (hasta ahorita en la versión del Visual Studio 2005) que es más avanzado y toda la onda. Sin embargo, existen muchísimas computadoras que no tienen los recursos necesarios para que los programas hechos con el .NET funcionen adecuadamente (es decir, que hagan algo antes que el usuario se desespere y lo mande mucho a ...)

Voy a ser muy breve y, como diría el dermatólogo, vámonos directo al grano. Sé que hay muchos tipos de datos en Visual Basic 6.0, pero solamente voy a hablar de los más importantes. Tampoco me importa dar un largo sermón acerca de cuantos bytes ocupan u otros datos de cultura general. Así que, ahi vamos.

Los tipos de datos más usados en Visual Basic 6.0 son:
  • Integer - almacena cualquier valor entero desde -32,768 hasta 32,767 (Ejemplo: 1, 56, 69, 13455, etc.)
  • Double - número con o sin punto decimal (Ejemplo: 3.141592, 5.33, 1245.8, 150, 3, etc.)
  • String - una cadena de caracteres, o sea, un texto cualquiera (Ejemplo: "Tony", "hola", "10.3", etc.)
  • Boolean - almacena falso o verdadero, no hay de otra.
Los demás no me importan gran cosa, ya que no son tan usados como éstos. Si quieres la versión completa, te invito a que veas esto.

La siguiente pregunta sería, ¿y para qué *%$#¡! me sirve saber que hay tipos de datos. Para que sean útiles, necesito variables. Haz de cuenta que una variable es un bote que puede guardar solamente comida de un tipo (es típico que en nuestras occinas tengamos un bote para café, otra para el azúcar, etc.). Son muy útiles estos botes porque si no organizaríamos la comida así, sería un desmadre intentar seguir una receta para cocinar cualquier platillo (imagínate que en el bote del azúcar guardaron azúcar, café y sal gruesa). Lo mismo sucede en el mundo de la programación: un programa es como una receta de cocina y las variables son esos botes que contienen datos de determinado tipo (integer, double, etc.) que se van a usar en la receta (programa).

Hasta aquí, todo está chido pero, ¿cómo declaro una variable? La acción de declarar una variable en una función o procedimiento de un programa le dice al sistema operativo que le reserve un espacio de memoria para almacenar un dato de algún tipo, al que vamos a accesar usando determinado nombre. Haz de cuentas que el programa es una agencia de viajes que hace reservaciones en hoteles. La agencia (nuestro programa) le dice al hotel (sistema operativo) que reserve un cuarto (un espacio de memoria) de cierto tipo (suite, junior, etc.)(este sería el tipo de dato) para la persona Tony Valderrama (nombre de la variable). Cualquier asunto relacionado con el cuarto lo van a ver directamente con Tony Valderrama. ¿Se entiende? Espero no haberte hecho más bolas.

Después de este choro mareador, para declarar variables en Visual Basic 6.0, uso la siguiente sintáxis:

Dim nombre_de_la_variable As tipo_de_dato

Por ejemplo:

Dim x As Integer
Dim pi As Double
Dim Nombre As String
Dim oPcIoN As Boolean


¿Y cómo los uso? Ah, en mi programa puedo escribir cosas como:

x=56
pi=3.141523
Nombre="Tony Valderrama"
oPcIoN=False


Luego le seguimos con más. Próximo tema: condiciones (IF y SELECT). ¡Hasta la próxima!

Diseñando tablas chidas

Guardar datos tiene su chiste. Especialmente cuando usamos bases de datos relacionales (RDBMS). Voy a explicar un poco de este arte (porque de tu arte al mio...).

Los datos se almacenan en estructuras que llamamos tablas. El buen funcionamiento de un DBMS depende en gran medida en el diseño de las tablas. Para que funcionen bien, es necesario dividir mis datos en diferentes tablas y al proceso de hacer este relajo se le llama normalización.

Normalización es un conjunto de reglas que sirven para ayudar a los diseñadores a desarrollar un esquema que minimice los problemas de lógica. La normalización se adoptó porque el poner todos los datos en un solo lugar, como un archivo o una tabla de la base de datos, era ineficiente y conducía a errores de lógica cuando se trataba de manipular los datos. Por ejemplo, aquí está la base de datos de una tienda que almacena clientes:


Como ves, sería un desgarriate agregar un nuevo cliente a esta tabla porque debería añadirle un producto y un pedido. También sería un relajo hacer un reporte de los productos que vende.

La idea de la normalización es de hacer que las cosas sean fáciles de entender. Tendemos siempre a simplificar las cosas al máximo. Las reglas de la normalización nos sirven para simplificar tablas. En esta tabla, hay 3 diferentes grupos: clientes, productos y pedidos.

Siendo exactos, hay 5 niveles de normalización, pero la base de datos está normalizada con llegar al tercer nivel. La idea es dejar todo hasta la tercera forma normal (o 3NF como lo abreviaría uno que otro jalado).

Primera Forma Normal (1NF para los que les gustan las abreviaturas). La regla aquí es que las columnas repetidas se tienen que eliminar y poner en tablas separadas. En nuestro ejemplo, alteraríamos nuestra tabla Clientes.

Como puedes darte cuenta, esta tabla tiene varias columnas repetidas, las cuales se refieren a los productos. Según esta regla, se deben eliminar (újule: de pronto me sentí como El Padrino, jefe de la mafia) las columnas repetidas y ponerlas en su propia tabla. Debería quedar algo así:


Parece que todo va bien, pero todavía le falta. La bronca es que no hay manera de relacionar ambas tablas: necesitan algún campo común. Para lograr esto, debemos insertar un campo que sea la llave (o índice) para establecer una relación. Para esto, agrega un campo que sea llave primaria llamada ID_Producto en la tabla de Productos y agrega otro campo ID_Producto a la tabla Clientes para relacionarla con la tabla Productos.

Quedaría así:


Y así podemos decir que estas tablas están en la primera forma normal. Si te fijas, hemos establecido una relación uno a varios, es decir, el cliente tendrá muchos productos que pueda comprar, sin importar cuantos otros clientes quieran comprarlos también. Además no es necesario agregar un cliente para tener un nuevo producto.

Segunda Forma Normal (o 2NF). La onda aquí es que esta forma dice que todas las dependencias parciales, o sea todos los datos que no dependen de la clave de la tabla para su identificación, se deben eliminar y separar dentro de sus propias tablas. En nuestro ejemplo, la información de los pedidos está en cada uno de los registros de la tabla Clientes. Sería mucho más simple usar solo el número de pedido y poner el resto de la información en su propia tabla. Quedaría algo así:


Así está mejor la cosa. Ahora puedes agregar nuevas columnas a la tabla Clientes sin afectar las tablas Productos y Pedidos. Lo mismo aplica para las otras tablas. Viendo la tabla Clientes más a fondo, puedes ver que el campo no depende del cliente. Vamos a resolver esto en la 3NF.

Tercera Forma Normal (o 3NF). La regla de esta forma normal es que hay que eliminar y separar cualquier otro dato que no sea clave, o sea que todos los valores de las columnas deben identificarse únicamente por la clave. En nuestro ejemplo chipocles, vemos que existe un campo Nombre_Cia_Envios en la tabla Clientes que no se identifica únicamente por la clave. Vamos a separarlo y ponerlo en otra tabla. Quedaría más o menos así:


Y ya. Está en la 3NF y podemos ser felices. Si te fijas esta distribución te da más flexibilidad y te previene de tener errores de lógica al insertar o eliminar registros. Cada columna en las tablas está identificada solamente por su llave y no hay datos repetidos. Esto hace que sea fácil trabajar con la base de datos y expandirlo.

Freehand: un par de actividades

Hice un par de videos simples que muestran la manera de hacer cosas con el Freehand.

El primero (haz click aquí para descargarlo a tu computadora) muestra como hacer lo siguiente:
  1. Abre un documento, llamado actividad01.fh11 (de mi memoria USB).
  2. Luego visualiza toda la página usando el menú View->Fit to page.
  3. Con la herramienta de la flecha negra (usada para manipular objetos) selecciona el texto. Fíjate en las propiedades del texto, una que contiene el tipo de letra y otra tiene el color de relleno.
  4. Luego selecciona la propiedad Text y cambia el tipo de letra (se puede ver que no me decidí por cual ponerle) y luego cambia el color, usando la propiedad Text Fill.
  5. Después de esto, al objeto verde le agrega un contorno usando el botón Add Stroke y cambia el grosor para que se note.
  6. Luego juega con los colores de relleno y de contorno del objeto verde, al objeto gris y a los objetos negros.
  7. Guarda el trabajo con el nombre actividad01-Terminado.fh11

El otro, que es la actividad 4 (abajo viene la referencia del libro de actividades), puedes descargarlo aquí. Este video abre un documento, llamado actividad04.fh11 y luego usa el panel Transform (también se podrían usar las herramientas de transformación) para jugar con la imagen de la hoja. Al final, guarda el trabajo con el nombre Actividad01-Terminado.fh11

Nota: estos ejercicios resuelven actividades que se encuentran en el libro morado (el que habla de Freehand y Flash) del grupo Educare. Se me hace un libro muy bueno.

¡Hasta la próxima!

Guardando datos con estilo

Mira a tu alrededor y verás que estás rodeado de información. Anuncios, los 7 del 7, televisa deportes, los protagonistas, hechos, tarjetitas Yugui-oh, libros (para aquellos que todavía les gusta leer), la revista eres, muy interesante, tú y tvnovelas, periódico El Mural e Informador, Dexter y su laboratorio, las chicas superpoderosas, etc. La lista sigue y sigue.

Para no ahogarnos en medio de tantos datos, tenemos la computadora que fue diseñado para este fin. Puedes hacer mucho con una computadora, si tienes el software "correcto. Para archivar toda esta bola de datos, necesitas un DBMS.

¿Y qué es un DBMS?

DBMS significa DataBase Management System, o como diríamos algunos, un sistema manejador de bases de datos. Este software se encarga de administrar registros guardados, encargándose de registrar y mantener información, debe manejar todos los accesos a la base de datos y proporcionar una interfase al usuario del sistema.

Para considerarse un DBMS, por lo menos debe ser capaz de:
  • Crear nuevos archivos
  • Insertar nuevos datos
  • Recuperar datos
  • Actualizar datos
  • Borrar datos
  • Borrar archivos

¿Por qué es bueno usar una DBMS?


Es bueno usar una DBMS para resolver las siguientes broncas:
  • Redundancia de información
  • Inconsistencia de datos
  • Duplicidad de esfuerzos
  • Demasiada papelería
  • Alta probabilidad de tomar decisiones incorrectas por falta de información actualizada
  • Problemas interdepartamentales por decisiones incorrectas y fuera de tiempo
O sea que tiene sus ventajas, como por ejemplo,
  • Son compactos
  • Tienen una alta velocidad de procesamiento
  • Realizan el trabajo pesado y tedioso
  • Es fácil estar actualizado
  • Proporcionan un control centralizado de los datos (o sea que en un solo lugar tengo todo). Esto me da muchas ventajas:
    • Se puede controlar la redundancia de datos
    • Se puede evitar la inconsistencia de los datos
    • Se puede compartir datos
    • Se pueden establecer estándares para el manejo de los datos
    • Se pueden aplicar restricciones de seguridad
    • Se puede mantener la integridad de los datos

Pero no todo es color de rosa. También, pese a lo fregones que sean, los DBMS tienen algunas desventajas:
  • Queda comprometida la seguridad e integridad de los datos
  • Requerimientos de hardware adicional
  • Los sistemas pueden llegar a ser muy complejos
  • La operación correcta del sistema es crucial (o sea, que de preferencia, consíguete una buena máquina y borra Windows, jeje)


¿Y quién usa una onda de estas?

Básicamente hay 3 tipos de usuarios en un DBMS. Estos son:
  • El programador. Es el tipo loco que solo ve su entorno en 0s y 1s. Al abrir los ojos ve algo así como la Matrix (si viste la película, me entenderás). Es el cuate experto en el uso de lenguajes de programación (como Visual Basic o C++) y los programas que hace usan la base de datos.
  • El usuario final. Es la persona que se sienta enfrente de una computadora, usando un sistema diseñado por un programador (el tipo descrito antes), o, si es muy chicho, usa un lenguaje de consulta del DBMS.
  • El administrador. Para que se sienta importante, también se le llama el DBA (DataBase Administrator). Este es el hombre de la talacha: es el rey, amo y señor del DBMS. Se encarga de las decisiones, como por ejemplo…
    • ¿Qué es lo que voy a dejar que guarden en mi base de datos?
    • ¿Cómo voy a almacenarlo (estructuras de almacenamiento)?
    • ¿Cómo quiero que los usuarios y/o el programador tengan acceso a los datos?
    • ¿Qué controles de seguridad debo poner? ¿Qué reglas aplico en el uso de la información para conservar su integridad?
    • ¿Cómo voy a proteger la información? ¿Cada cuando voy a hacer respaldos y de qué tipo?
    • ¿Qué cambios debo hacer a la base de datos para que sea cada vez más útil a los usuarios y programadores?

Backend y Frontend

¿Qué quieren decir estas palabrejas? Como todos los que trabajamos con compus, nos sentimos importantes si usamos palabritas en inglich. Por eso usamos palabras como backend y frontend para definir partes de un sistema que usa datos.


El backend (etimología: back = atrás y end = fin, o sea el final de lo que tienes atrás). Hablando ya en serio, el backend es propiamente el DBMS, mientras que el frontend (me evito la explicación etimológica) es formada por las diferentes aplicaciones que corren sobre el DBMS. O sea que los frontend son las interfases por medio de los cuales los usuarios obtienen resultados del backend, que es el que almacena y recupera datos.

Modelos de base de datos

Hay muchas maneras de solucionar algo y esto sucede también con los DBMS. A diferentes personas se les han ocurrido diferentes maneras de hacer una DBMS. Entre estos, hay modelos orientado a objetos, jerárquicos, de redes, relacionales, distribuidos, basados en lógica (logic-based) y probablemente uno que otro mas.

Cada modelo es interesante ya que vemos una manera diferente de pensar, de resolver un problema. Pero para no darles mas problemas, no voy a hablar de cada uno de ellos. Solo explicaremos la DBMS relacional o RDBMS.

En una RDBMS, los datos son vistos por el usuario como tablas (relaciones) y los operadores de que dispone el usuario son operadores que generan nuevas tablas de las ya existentes.

Algunas de las ventajas de usar RDBMS son:
  • implementación sencilla
  • facilidad de usar llaves secundarias (clasificar información), de ligar muchas tablas
  • se puede crear una aplicación diferente sin cambiar base de datos.
Tambien tiene sus inconvenientes. Digamos que usa mucho espacio en disco (debido a información repetida) y si es mal operado puede generar inconsistencias.


Dentro de todo, los RDBMS son los DBMS mas usadas por los DBAs (con esta frase se apantallarían uno que otro que no lleve este curso) ya que son bastante eficientes. De este momento en adelante, siempre que haga referencia a un DBMS, me estoy refiriendo a uno de estos, a un RDBMS.

Hay muchos productos en el mercado de los DBMS. Hay productos excelentes (como el Oracle e Informix), muy buenos (como el MySQL), buenos (MS SQL Server), regulares, malos, pésimos y MS Access. Como podrás imaginar, entre mejor sea el DBMS, más costoso es su operación (costo tanto de hardware como software). En fin, de todo hay en la viña del Señor.

05 febrero 2007

Freehand: una introducción introductoria que introduce a su uso y manejo

El Freehand es una herramienta para crear imágenes con vectores hecha por Macromedia, compañía que fue comprada hace unos meses por Adobe, los creadores del Ilustrador que es otro programa de dibujo vectorial. O sea que quien sabe que futuro tendrá este programa, quien sabe que le depara el destino... Si quieres el chisme completo, fíjate en ésta página.

Lo que es muy interesante del Freehand es que está muy bien integrada al resto de herramientas desarrolladas por Macromedia, especialmente al Flash y al Dreamweaver. Esta es la razón principal, desde mi muy humilde punto de vista, por la que vale la pena usarlo. No es complicado, especialmente si has usado otras herramientas de este tipo (como el Ilustrador), así que ¡manos a la obra!

Vamos a empezar por echarle un vistazo al interfaz del programa. Nota: yo estoy usando la versión 11.0.2, la cual es la más reciente hasta este momento. No ha sufrido muchos cambios en mucho, pero mucho tiempo, así que ha de ser muy similar a versiones anteriores. Aquí abajo está la imágen con las partes principales debidamente señaladas como Dios manda.


Según yo, lo más importante en un programa de diseño son las herramientas que te permiten dibujar y manipular objetos, así que vamos a ver las herramientas que tiene Freehand para poder empezar a trabajar.

La barra de herramientas están agrupados en en ocho partes, todas ellas divididas por una rayitas chiroliras. Estas son (en órden de arriba a abajo): herramientas de selección, de creación de objetos, de modificación de objetos, de efectos, de interactividad, de vistas, de color de contorno y relleno y de Snap.

Al igual que otros programas de este tipo, algunas herramientas tienen un triangulito en la esquina inferior derecha. Esto quiere decir que si le dejas apretado el botón del mouse sobre esta herramienta, aparecen otras herramientas similares. Algo un poco diferente es que algunas herramientas tienen un angulito chuvidubis de 90° en la esquina superior derecha, lo cual indica que al darle doble click aparecen los parámetros que puedes cambiar.

Ahora sí, vamos a ver para que sirve cada una de las herramientas. Estas son las herramientas de selección:


Ahora los de creación de objetos:


De modificación:


Efectos:


Interactividad:


Vistas:


Las herramientas de contorno y relleno nos permiten establecer los colores que se van a usar al dibujar un objeto y las de Snap permiten que el cursor se ajuste a un punto (un pixel en la pantalla) o a los objetos. Esto sirve para facilitar el trabajo con muchos objetos.

Para terminar este vistazo rápido, no quiero dejar la oportunidad de hablar acerca del panel de objeto. Si no aparece, lo puedes ver dándole un click al menú Window y luego a la opción Object (bueno, este es el método para hacer aparecer cualquier panel estándar que no aparece cuando lo quieres ver).

Este panel muestras las propiedades que tiene el objeto, como es el contorno (stroke), el relleno (fill) y los efectos (effects). Tiene 3 botones en la parte superior (abajito viene en el dibujo) que permiten agregar estas ondas, otra que permite eliminar una propiedad y una quinta que permite quitar todo un grupo de propiedades, abajo muestra las propiedades y más abajito vienen los atributos. Esta es la ventana:


¡Listo! Por hoy ya estuvo. Luego seguimos adelante creando objetos. ¡Hasta la próxima!

Introducción al diseño

A todos, de una u otra manera, nos gusta el diseño. Tal vez no a todos les encante la idea de andar dibujando, pintando, pensando o creando diseños, sin embargo estamos influenciados por el diseño. De una u otra manera, nos encontramos inmersos en un mundo lleno de imágenes que nos generan cierto estado de ánimo, nos invitan a consumir, a vender, a ver cierta película, etc. Todos somos capaces de distinguir los diseños que nos agradan, nos llaman la atención y aquellos que creemos que son feos, tontos o una combinación de ambas.

Un buen diseño consiste en comunicar ideas y conceptos de una manera clara por medio de elementos gráficos. Fíjate en los anuncios que tienes a tu alrededor. ¿Distingues lo que quiere transmitir al público? ¿Puedes descubrir a qué público se dirige? Aquí voy a poner un par de ejemplos, a ver que te parecen.

A la izquierda está uno de Baygon. ¿Captas el mensaje? ¿A quién va dirigido? ¿Es claro? ¿Te son agradables los elementos gráficos?


Abajo puse otro anuncio, ahora de Volkswagen. ¿Qué quieren dar entender acerca de su carro Polo? ¿Es claro?

¿Y qué tal este (el que está abajo de estas líneas)? ¿Te parece claro? ¿A quién crees que va dirigido?


El último ejemplo. ¿Cuál es la primera impresión que te da al ver este anuncio? ¿Cómo están tratando de apelar al gusto de quienes observan esta imagen? ¿Te parece que llamativo?

Espero que con estos ejemplos quede mejor entendido de lo que se trata con el diseño trágico, perdón, diseño gráfico.

Ahora, hay algunos conceptos que nos básicos para el diseño. Voy a explicar brevemente del o que trata cada uno de ellos.

Equilibrio es una palabra que todos conocemos (si no sabes que significa, dale click aquí). Esto también se aplica en el diseño gráfico. Esto se refiere a que si partimos una imagen a la mitad, hay equilibrio en ambos lados. Este puede ser simétrico o asimétrico. Dicen que una imagen vale más que 1000 palabras, así que mejor pongo un par de ejemplos.

A la izquierda está una imágen que tiene equilibrio simétrico y abajo está una que es asimétrico. ¿Queda claro? Recuerda que puedes dejar un comentario en este blog y luego te contesto.

Otro elemento crucial para el diseño es el color. Lo más común es ver dos tipos de imágenes: blanco y negro o a color. No todo es tan fácil como parece. A la hora de crear imágenes, nos complicamos un poco más la existencia. Hablamos de monotono cuando solo usamos un color, duotono cuando usamos dos, RGB cuando usamos cierto porcentaje de rojo, verde y azul (Red, Green y Blue) para componer una imágen (esto es usado para todos las imágenes que se ven en el internet) y para los que crean diseños para ser impresos, usan el estándar CMYK donde dan porcentajes de los colores cyan, magenta, amarillo y negro (Cyan, Magenta, Yellow y blacK) porque es más nítido y es fundamental que sea muy exacto para una buena impresión.

Los colores transmiten muchas cosas. ¿Te has fijado que los policías visten de azul? Es que el color azul generalmente lo asociamos con seguridad y confianza (independientemente de como sean los policías, ya que muchos ni con el azul nos transmiten confianza, jeje). ¿Has visto que la mayor parte de los restaurantes están pintado por dentro de amarillos y naranjas? ¿O que los autos más deportivos generalmente son rojos o amarillos? ¿O qué los hostipatels, doctores y enfermeras visten de blanco? Todo tiene una razón de ser, no son elegidos simplemente al azar.

Otro concepto importante es el contraste, que se refiere a la diferencia notable entre colores (bueno, el término "original" se refiere no solo a los colores sino también a objetos o personas. La definición "oficial", normalazo de contraste lo puedes encontrar aquí). Jugando con los colores y los contrastes entre ellos (luces, sombras, etc.) se pueden resaltar elementos, darles profundidad, hacer que algunas cosas aparezcan menos importantes o medio escondidos, etc.

Finalmente, y ya para cerrar este mensaje, voy a mencionar un concepto que usan todos los diseñadores (yo ni soy dieseñador, pero no me puedo resistir ante la oportunidad de emplear una palabra dominguera): la composición. Este término se refiere a la manera en que están puestos todos los elementos de un diseño, o sea, dónde va la imagen del carro, donde se acomodan los policías, el logo de la Volkswagen, las letras, etc. No hay leyes en el diseño gráfico (he allí lo padre, que te deja libre para hacer las cosas como quieras), sin embargo algunos sugieren estos "tips" para que el mensaje sea más eficaz: conocer todo lo posible acerca de lo que se quiere transmitir, definir el público al que va dirigido y seleccionar los elementos a usar (cada una debe tener un por qué y un para qué, no solo ponerlos para ocupar espaco a lo puro tarugo).

En fin. Por hoy ahi le paro. Tengan en cuenta esto para sus trabajos en diseño, ya sea que usen algún programa que genere imágenes (Photoshop, ImageReady, Ilustrador, Foreworks, Freehand, etc.) o para diseñar páginas güev (Dreamweaver, etc.) o para hacer diseños con papel y lápiz o simplemente cuando ves publicidad gráfica en la calle. Dicen que de la vista nace el amor, así que más vale que se vea muy bien.

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...