Layered Architecture

31 05 2008

Layered Architecture o Arquitectura por capas es un estilo de programación en el que el objetivo primordial es la separación de la lógica, la presentación, los datos, la comunicación… etc. De esta forma se consigue que cada capa sea independiente de las demás: dentro de una capa, sólo sería necesario conocer la Interface que implementan las capas externas necesarias.

Gracias a esta forma de diseñar el software, se consigue una mejor distribución del programa, dando la posibilidad de dividir el trabajo más efectivamente, ya que cada grupo puede abstraerse completamente con sólo conocer las APIs (interfaces) de las capas externas necesarias.

Un ejemplo sencillo es el siguiente, pero pensando que las tres capas se encuentran en distintos ordenadores. (sacado de la Wikipedia):

Free Image Hosting at www.ImageShack.us

QuickPost

Es muy sencillo dividir nuestros programas ‘Terminal’ y ‘Tornos’ en capas, ya que estas son muy diferenciables, y sin darnos cuenta, definimos las interfaces necesarias para cada capa. Aún así, al reestructurar estos programas, surgió algún que otro conflicto: es importante saber que se debe respetar la jerarquía de las capas, es decir, no se debe acceder a una capa dos niveles de profundidad por debajo de la capa en la que estemos. Por ejemplo, la capa ‘visor’ no debe acceder a la capa ‘bd’. Esto es lo que se quiere evitar con este diseño: el caos de dependencias. El siguiente es un ejemplo más completo:

Free Image Hosting at www.ImageShack.us

QuickPost

Capas como ‘visor’ pueden dividirse en subcapas, al igual que todas las demás. En Java, las capas se traducen en Packages. Cuando importamos por ejemplo javax.comm.* estamos accediendo al subpaquete o subcapa comm dentro del paquete o capa javax.

La división del programa ‘Terminal’ por ejemplo, se traduce así (no se muestran las posibles subcapas):

Además, tal y como montamos nuestro sistema para la simulación, se trata de un sistema de ‘tres capas y dos niveles’ (presentación+lógica en mi portátil -terminal-, y lógica+datos en otro -servidor BD y GestiónTornos en el portátil de ordóñez)

Resumiendo, aquí tenéis links de interés que explican mejor el tema:

A Strategy for Layering Software Applications

Java 101: Layered Architecture

Programación por capas





¿Que son los triggers en mysql?

22 05 2008

Siendo un mínimo del proyecto que tenemos que tener en cuenta, he buscado algo de información para poder acoplarlo al proyecto. Deciros que nos va ser útil a la hora que se genere cualquier actualización en la base de datos, o a la hora de genera cualquier nueva entrada en la BD.

¿Que son los triggers en mysql?

Los triggers son objetos relacionados a tablas que son ejecutados o mostrados cuando sucede algún evento en contra de sus tablas asociadas. Estos eventos son aquellas sentencias (INSERT, DELETE, UPDATE) que modifican los datos dentro de la tabla a la que está asociado el trigger y pueden ser disparados antes (BEFORE) y/o después (AFTER) de que la fila es modificada.

Los triggers son muy parecidos a los procedimientos almacenados, de tal forma que si deseamos ejecutar múltiples acciones cuando un trigger es disparado, podemos encapsular estas acciones dentro de una construcción BEGIN, END. Los triggers tienen un par de palabras clave extra – OLD y NEW – las cuales se refieren respectivamente a los valores de las columnas antes y después de que la sentencia fue procesada. Las sentencias INSERT únicamente permiten NEW, las sentencias UPDATE permiten ambos, NEW y OLD, y las sentencias DELETE permiten sólo OLD. La razón para esto debe ser obvia.

CREATE TRIGGER nombre_disp momento_disp evento_disp
    ON nombre_tabla FOR EACH ROW sentencia_disp

Bueno esto sera la explicación teórica de trigger, ahora os voy a dejar un link con tres paginas donde se puede ver una explicacion mejor y con diferentes ejemplos.

información de triggers

Ejemplo triggers paso por paso

Mas sobre triggers

Bueno esto es todo por ahora, habrá que investigar mas cuando se pueda.

Agur.





Cambios que se tiene que hacer al Informe

21 05 2008
  • Cambio del Protocolo, añadir una imagen mas…
  • Cambios del Programa de Pic (Diversos cambios dados) y programa de JAVA tornos(se ha añadido un nuevo paquete y modificado otros)
  • Cambio de la Base de Datos, ahora el torno tiene también adress.

Ir poniendo los cambios que veías que hemos llevado acabo y tenemos que añadir en el informe.





Ejemplo: Test Leer Banda Magnética PIC16F873 en CCS

19 05 2008

Bueno, parece que al fin hemos conseguido hacer un programa que sea capaz de leer una tarjeta magnética y enviar su contenido al PC por línea de serie.

Se usa un lector de tarjetas magnéticas dorlet. Este lector envía los datos por la línea RDT conectada a PIN_C0, y un clock para la sincronización de la lectura de datos por la línea RCL conectada al PIN_B0.

La configuración es la misma que en el anterior Ejemplo: Test UART PIC16F873 en CCS.

El programa, una vez leída la tarjeta, envía los bloques leídos sin darles formato de carácteres ASCII legibles, ya que los bloques se quedan almacenados de la siguiente forma: P D3 D2 D1 D0 0 0 0, donde P es paridad y DX es un bit de dato de la tarjeta. Para transformarlos en carácteres legibles habría que eliminar el bit de paridad y rotar 3 veces a la derecha el byte del bloque.

Dejo el código:

Leer el resto de esta entrada »





Ejemplo: Test UART PIC16F873 en CCS

14 05 2008

Voy a explicar un ejemplo de un programa para un sencillo test de la UART (RS232) del PIC 16f873, programado en CCS C. En este programa, se envía una frase al PC y después se pasa a hacer eco de lo enviado por el PC al PIC.

Bien, para hacer este programa se ha usado la última versión del compilador de CCS C llamado PCW. Gracias al Project Wizard, se ha configurado el proyecto para lo siguiente:

  • Cristal de 4Mhz, XT
  • Power Up Timer, PWRT (retrasa el inicio del programa desde que se enciende el PIC para que el clock se estabilice)
  • Reset when Brown Out Detected, BODEN en ic-prog o BROWNOUT en PCW (resetea el PIC si ve que la alimentación baja hasta casi 0V)
  • Se desactiva Low Voltage Programming, NOLVP (así se podrá usar RB3)
  • Se activa RS232, sin paridad, 9600 baudios y siendo Transmit C6 y Receive C7
  • Se desactiva WDT, para que el PIC no se reinicie constantemente
  • Se activa la interrupción de RS232 receive data available (importante, esta interrupción salta cuando un byte está disponible para ser leído. Si no borramos ese byte haciendo getc(), volverá a saltar la interrupción porque no se habrá vaciado el buffer y lógicamente seguirá habiendo data available)
  • Se configuran los I/O Pins adecuadamente
  • Se setea tris_b con set_tris_b, ya que aunque el C se hace automáticamente, el b necesita ser seteado.

Para grabarlo se ha usado ic-prog. Los fuses serán: PWRT (PUT en CCS) y BODEN (BROWNOUT en CCS), además de XT.

Descargar Source

Leer el resto de esta entrada »





Gestion de usuarios de mysql

12 05 2008

haber explico lo que he conseguido hasta ahora, que es saber como se crea un superusuario que tiene acceso a todo:

mysql> GRANT ALL PRIVILEGES ON *.* TO GOD IDENTIFIED BY ‘462493′ WITH GRANT OPTI
ON
-> ;
Query OK, 0 rows affected (0.38 sec)

Bien para hacer un usuario restringido, hay que decir que acciones quieres que pueda hacer (alter,update,create.. etc) y que tablas puede ver, eso se explica aqui abajo:

Para añadir más usuarios usaremos el comando GRANT:

GRANT priv_type [(column list)] [, priv_tipe[(column_lis)] …]
ON {table_name | * | *.* | db_name.*}
TO user_name [IDENTIFIED BY 'password']
[, user_name [IDENTIFIED BY 'password'] …]
[WITH GRANT OPTION]

Leer el resto de esta entrada »





Informe: Borrador 08-05-2008

10 05 2008




Lo que queda de el programa de los tornos

10 05 2008

Haber quedamos en que hariamos cada uno un paquete de los tornos y que liher haria la placa, así que ya puestos elijamos aqui los paquetes

Yo me pido Opaquete pregunta (soy ion)

Por cierto las funciones para pasar de String a byte etc son necesarias en los paquetes, esto lo cambiare Yo asi que no hurgueis, haced como si las tuvieseis





Configuración javax.comm en Eclipse

9 05 2008

Bueno, explicaré para que quede escrito cómo configurar la librería javax.comm para Eclipse.

1º-Descargar la última versión de JDK. Click en el link y descargamos JDK 6 Update 6

2º-Instalarlo

3º-Descomprimir javacomm20-win32.rar en cualquier sitio. Podemos descargar este archivo de aquí.

4º-Abrimos la carpeta descomprimida commapi. Movemos el archivo win32comm.dll a la carpeta C:\Archivos de programa\Java\jdk1.6.0_06\jre\bin y movemos comm.jar y javax.comm.properties a C:\Archivos de programa\Java\jdk1.6.0_06\jre\lib

5º-En Eclipse hay que decirle que use las librerías de JDK en vez de las que nos está usando ahora mismo (JRE). Vamos a Window->Preferences->Java->Installed JREs->Add… le damos a browse y seleccionamos Archivos de Programa/Java/jdk1.6.0_06, añadimos y seleccionamos la librería añadida. Click en Ok.

6º-Para los proyectos que usen javax.comm, hay que agregarles la librería. Así que click derecho en el proyecto en cuestión, properties, Java build path, libraries, Add external JARs… y seleccionamos C:\Archivos de programa\Java\jdk1.6.0_06\jre\lib\comm.jar

Listo!

Se puede descargar un TestRS232 programado en Java de aquí.





Ejemplos CCS C

9 05 2008

He encontrado un link en el que aparecen varios ejemplos de programación de PIC en CCS C.

Incluso hay un ejemplo de cómo usar la línea de serie con interrupciones.

Ejemplos CCS C