6. Capitulo 4

Anuncio
4. TECNOLOGÍAS IMPLICADAS EN EL DISEÑO
El presente proyecto ha sido desarrollado en los lenguajes HTML, JavaScript y
SVG. Todo el código se escribió con el editor de JavaScript: “Antechinus JavaScript
Editor v7.0 Build 6” . Si bien el autor era conocedor en alguna medida del lenguaje
html, esto no fue así para los otros dos. Se tuvo que hacer un gran esfuerzo con algún
que otro manual en castellano y otros excelentes manuales que, como casi todo lo
bueno, estaban en inglés. Me gustaría destacar así la gran labor llevada a cabo, para que
de forma autodidacta y partiendo de cero, lograr el resultado obtenido. A continuación
describiremos brevemente cada una de las tecnologías empleadas.
4.1.
JavaScript
Muchos confunden el JavaScript con el Java pero ambos lenguajes son diferentes y
tienes sus características singulares.
COMO VENTAJAS PODEMOS DESTACAR:
•
No se necesitan conocimientos expertos de programación para poder programar
en JavaScript. (No sucede lo mismo con el SVG…)
•
Puede ser incorporado en cualquier página web, puede ser ejecutado sin la
necesidad de instalar otro programa para ser visualizado. No se necesita tener
instalado ningún Framework ni una máquina virtual como con Java.
•
Es un lenguaje interpretado, basado en prototipos, mientras que Java es un
lenguaje más orientado a objetos. No requiere de compilación. El código
JavaScript se ejecuta en el lado cliente, siendo los navegadores los encargados de
interpretar estos códigos, por lo que el servidor no es solicitado más de lo debido.
Autor: Jonathan Fco. Ginés Monteagudo
33
•
Es dinámico, responde a eventos en tiempo real. Eventos como presionar un
botón, pasar el puntero del mouse sobre una determinada zona, texto o el
simple hecho de cargar la página ... Con esto podemos hacer cálculos en base a
variables cuyo valor es determinado por el usuario.
9
•
Esto se ve claramente en los cálculos de los parámetros del amplificador
(K, Estabilidad,…), que son recalculados en tiempo real cada vez que
cambia cualquiera de sus parámetros [S]
Maneja objetos dentro de nuestra página Web y sobre ese objeto podemos
definir diferentes eventos.
Autor: Jonathan Fco. Ginés Monteagudo
34
COMO DESVENTAJAS PODEMOS DESTACAR:
•
Un problema es que el código es visible y puede ser leído por cualquiera.
•
Los scripts tienen capacidades limitadas, por razones de seguridad, por lo cual
no es posible hacer todo con JavaScript, sino que es necesario usarlo
conjuntamente con otros lenguajes evolucionados, posiblemente más seguros,
como Java. Dicha limitación es aún más evidente si queremos operar en el
hardware del ordenador, como, por ejemplo, la fijación automática de la
resolución vídeo o la impresión de un documento.
•
El código del script debe descargarse completamente antes de poderse
ejecutar. El tiempo en descargarse podría ser muy largo, dependiendo de si los
datos que utiliza son muchos. (Aunque esto no ocurre en el caso que nos ocupa, a
menos que implementásemos parámetros [S] tabulados. Ver Pág. 106)
Autor: Jonathan Fco. Ginés Monteagudo
35
ALGUNAS CARACTERÍSTICAS DEL LENGUAJE SON:
o Sintaxis similar a la usada en Java y C.
o Funciones propias del lenguaje y predefinidas por los usuarios
o Comentarios para una sola línea: // Comentarios
o Comentarios para varias líneas:
/*
Comentarios
*/
o Ciclos: for(i; i<10; i++){ … } /
o Arreglos: var miArreglo = new Array(“12”, “77”, “5”)
o Condiciones: if(i<10){ … }
o Variables: var = “Hola”, n=103
o Una misma variable puede ser definida o utilizada indistintamente como:
string, integer, float o bolean, simplemente utilizando “var”. Podemos usar
“+” para concatenar cadenas y variables.
9 Esto último es tan potente como peligroso, pues a veces lleva horas
encontrar el fallo o el error!! Principalmente porque no arroja
warnings de conversión, pues no obliga a hacer ”cast” como si exigen
otros lenguajes…
Autor: Jonathan Fco. Ginés Monteagudo
36
4.1.1.
Clases Creadas para la Programación
A continuación describimos cada una de las clases creadas para la
programación de la herramienta. Copiamos el código tal cual, pues los
comentarios son lo suficiente explicativos por si mismos.
CLASE Complex()
En este caso, mostramos solamente los procedimientos (o prototipos) de la
clase que fueron creados por necesidad desde cero por el presente autor.
function Complex(real, imaginary) {
this.x = real;
this.y = imaginary;
// The real part of the number
// The imaginary part of the number
}
//
Devuelve el módulo al cuadrado de un numero complejo. Se ha implementado porque // el cálculo
del módulo al cuadrado haciendo Complex.magnitude()*Complex.magnitude() // producía pérdida de
precisión,cosa lógica pues deshacemos el efecto del sqrt que es // el que introduce, por 2 veces, la
pérdida de precisión...
Complex.prototype.magnitude2 = function() {
return (this.x*this.x + this.y*this.y);
};
//
Devuelve el argumento del un numero complejo en Radianes. Definido como el
// angulo
formado con el origen. Se tiene en cuenta si pertenece al 2º o 3º cuadrantes // (parte real negativa)
en cuyo caso,atan no funciona bien, usandose atan2 en su lugar. // Comprobamos que podría usar
directamente atan2, que lo hace perfecto.
Complex.prototype.argument = function() {
if (this.x<0)
return Math.atan2 (this.y,this.x);
else return Math.atan (this.y/this.x);
};
// Devuelve el conjugado del un numero complejo. Definido como el complejo con ángulo
dado.
Complex.prototype.conjugate = function() {
return new Complex (this.x,-this.y);
};
// negativo del
// Devuelve la division de un numero complejo entre otro. Para ello multiplicamos por el // conjugado
del denominador arriba y abajo, pero haciendo uso de una funcion que fue
// creada por necesidad de
la presente, magnitude2(), que devuelve el módulo al
// cuadrado. Se podría estudiar la
implementacion en base a discriminar (con typeof,
// valueOf,etc) si that es un real e igualmente
hacer bien la division.
Complex.prototype.divide = function(that) {
temp = new Complex (1/that.magnitude2(),0);
return this.multiply(that.conjugate()).multiply(temp);
};
Autor: Jonathan Fco. Ginés Monteagudo
37
CLASE Complex1()
Recordemos que el porqué de esta clase, se comentó en el capitulo 2 (Pág. 23)
function Complex1(module, phase) {
this.m
this.p
this.x
this.y
=
=
=
=
module;
phase;
this.m*Math.cos(this.p);
this.m*Math.sin(this.p);
}
Complex1.prototype = new Complex(0,0);
// Multiply this complex number by another and return the product as a
// new Complex object.
Complex1.prototype.multiply = function(that) {
return new Complex1(this.m * that.m , this.p + that.p);
}
Autor: Jonathan Fco. Ginés Monteagudo
38
CLASE Circle ()
////////////////////////////////////////////////////////////////////////////////////////
//
Defino el objeto circulo, con sus tres propiedades en el plano complejo, radio,
//
módulo del
centro y fase del centro en radianes. Ademas existe la variable booleana // plane, que es True en caso
de pertenecer al plano Ro_g y False en caso de ser de Ro_l
function Circle(radius, magnitude, argument, plane){
this.r=radius;
this.m=magnitude;
this.a=argument;
this.p=plane;
}
Autor: Jonathan Fco. Ginés Monteagudo
39
CLASE StabilAmp ()
////////////////////////////////////////////////////////////////////////////////////////
//
Defino el objeto StabilAmp, propio de cada amplificador , que tendrá entre sus
// variables
miembro, los parámetros K, Delta, una cadena de texto indicando el tipo de estabilidad, condicional o
incondicional y el valor de la MSG.
-function StabilAmp(K, DELTA,STABILITY,MSG){
this.k=K;
this.delta=DELTA;
this.stability=STABILITY;
this.msg=MSG;
}
Autor: Jonathan Fco. Ginés Monteagudo
40
4.2.
SVG
Es importante reseñar, que para poder hacer uso de esta tecnología, es necesario
instalar el plugin correspondiente de Microsoft, para que el navegador pueda mostrar
los gráficos que esta herramienta dibuja sobre la carta. La compatibilidad es máxima
con Internet Explorer 7. No ocurre así para versiones posteriores u otros navegadores
como Firefox o GoogleChrome.
SVG es una tecnología para describir gráficos de dos dimensiones, en XML. Sus
siglas se traducen como Scalable Vector Graphics, algo así como Gráficos
Vectoriales Escalables. Es una gramática XML para el desarrollo de gráficos
vectoriales. Scalable significa que incrementa o disminuye uniformemente. Los
gráficos SVG pueden ser desplegados en forma independiente de la resolución de
pantalla, también pueden ser magnificados para la observación de detalles, lo
cual es muy interesante cuando se representan, como es el caso, puntos o medidas en
un plano o ábaco.
Los vectores gráficos contienen objetos geométricos, tales como, líneas y curvas,
estos dan gran flexibilidad, comparados con formatos como PNG o JPEG, donde la
información esta almacenada para cada píxel del gráfico. Es decir, a la hora de
generar la carta de Smith, no se ha importado o cargado ninguna “foto” de la
misma, si no que se han dibujado partiendo de sus ecuaciones para círculos de
r=cte y de x=cte, (resistencia y reactancia normalizadas), donde como sabemos:
ZL/Z0= r +j x
4.2.1.
VENTAJAS DE LA UTILIZACIÓN DE SVG:
SVG permite la utilización de tres tipos de objetos gráficos:
Autor: Jonathan Fco. Ginés Monteagudo
41
•
Objetos gráficos vectoriales (líneas, elipses, rectángulos, etc.). Estos pueden ser
agrupados, formateados, transformados y compuestos para su visualización.
•
Imágenes.
•
Texto.
SVG soporta características avanzadas como:
•
Transformaciones anidadas (matrices de transformación).
•
Clipping Paths, Alpha Masks, Filtros gráficos…
•
Interactividad y dinamismo, soportados tanto de forma declarativa como vía
scripting, pues existe la posibilidad de asignar eventos a los distintos elementos.
9
He aquí una de las ventajas que se han explotado en este proyecto, a la
hora por ejemplo de capturar los eventos que se producen en el principal
gráfico SVG (que no es otro que la Carta de Smith), eventos tales como
‘onmouseover’ u ‘onclick’.
Gracias a la estandarización de los elementos en SVG y su integración con XHTML,
podemos tener conviviendo scripts XHTML y SVG dentro del mismo documento. El
tipo MIME que utiliza SVG es "image/svg+xml" [RFC3023].
Autor: Jonathan Fco. Ginés Monteagudo
42
Otras ventajas de utilizar SVG son:
•
Renderizado con antialiasing.
•
Patrones de relleno y gradientes.
•
Filtros y efectos avanzados.
•
Clipping.
•
Animaciones. (SLIM)
•
No pierde calidad si se hace zoom o si se redimensiona.
•
Puede escalarse.
•
Ideal para ser impreso.
•
Pueden mostrarse de forma progresiva (igual que los GIF), no teniendo que
esperar a que todo el documento sea descargado.
•
Pueden distribuirse en formato comprimido GZIP para la reducción del tiempo de
descarga .SVGZ.
•
Pueden ser indexados y buscados debido a que su contenido es XML y es
textual.
•
Pueden ser transformados por hojas de estilos (XSL o CSS).
•
Integración con otras tecnologías XML del W3 y compatible con:
•
XML 1.0 y XML Namespaces
•
XLink y XML Base para la referencia a URIs
•
Xpointer
•
CSS
•
XSL
•
DOM nivel 1 y 2 incluyendo DOM-Style y DOM-Event
•
SMIL 1.0. Sólo algunas de sus funcionalidades
•
HTML 4 y XHTML 1.0
•
UNICODE
•
Accesibilidad a contenidos web (WAI)
Autor: Jonathan Fco. Ginés Monteagudo
43
4.3.
OMNIPRESENTE HTML
Resulta inevitable comentar algo acerca del poco código HTML que contiene la
herramienta… No vamos a adentrarnos en las características del lenguaje, como si
hemos hecho con Javascript, pero si vamos a enumerar los distintos tipos de
elementos que se han usado para la creación de la misma…
FRAMES / FRAMESETS O MARCOS
La ventana del navegador puede ser dividida en varios frames que contengan cada
uno de ellos un documento en el que mostrar contenidos diferentes. Al igual que con las
ventanas, cada uno de estos frames puede ser nombrado y referenciado, lo que nos
permite cargar documentos en un marco sin que esto afecte al resto.
Siendo fiel a este esquema es como se ha desarrollado la aplicación, asignando dentro
del fichero de cada marco, las funciones que controlan todo lo que ese marco alberga y
ocurre en él. En el código de CartaSmith.htm se puede ver como se anidan y definen
estos 5 marcos con el tag <frameset>. Aquí podemos ver los 5 marcos en rojo:
Autor: Jonathan Fco. Ginés Monteagudo
44
FORMULARIOS
Su nombre lo indica todo, y en este proyecto se usa principalmente en la recogida de
datos (módulos y fases de los parámetros S y demás variables del amplificador).
Su declaración queda recogida por las tags <form>.....</form> y dentro de ellas se
recogerán todos los parámetros.
Tenemos 3 principales formularios en el marco izquierdo, en donde anidamos distintos
selects o inputs con el objeto de poderlos referenciarlos desde distintos puntos del
código…
PARAMETERS Æ Para los parámetros S y demás variables de ruido…
FUNCTIONS Æ Para los 9 distintos tipos de circunferencias.
VALUES Æ Para introducir el valor de los db’s para el cálculo de las circunferencias.
Autor: Jonathan Fco. Ginés Monteagudo
45
SELECTS
Las tags <select>.....</select> encierran los valores que podremos elegir a partir de
una lista. Las diferentes opciones de la lista se indican mediante la tag <option> que
puede acompañarse del atributo selected para indicar cual es la opción que aparecerá
por defecto (en nuestro caso no la hemos especificado).
Se han usado selects en este proyecto para:
•
MODELOS DE TRANSISTOR y
FRECUENCIA DE OPERACIÓN
•
LOS 9 DISTINTOS TIPOS DE
CIRCULOS QUE LA
HERRAMIENTA CALCULA
Como ejemplo podemos ver el código correspondiente a este último:
<FORM name="functions">
<select name="Circles" size="9" id="Circles">
<option name="election" value="CEG">(CEG) Stability Gen.</option>
<option name="election" value="CEC">(CEC) Stability Load</option>
<option name="election" value="CGG">(Gg) Constant Gain Gen.</option>
<option name="election" value="CGL">(Gl) Constant Gain Load</option>
<option name="election" value="Ga"> (Ga) Available Power Gain</option>
<option name="election" value="Gp"> (Gp) Power Gain</option>
<option name="election" value="F"> (F) Constant Noise Factor</option>
<option name="election" value="DesIn"> Constant Desadap IN (VSWRi %)</option>
<option name="election" value="DesOut"> Constant Desadap OUT (VSWRo %)</option>
</select>
</FORM>
Autor: Jonathan Fco. Ginés Monteagudo
46
INPUTS
La tag <input> define la introducción de variables. Hemos usado sus siguientes
tipos:
•
Tipo ‘radio’ para selectores tipo punto o circulo, donde elegimos unidades
naturales o en decibelios (por defecto)
•
Tipo ‘text’ para casilleros donde introducir valores
numéricos
•
Tipo ‘button’ , objetos propios de Javascript que sirven para realizar la acción
que se les asigne (en este caso se asocian a las funciones correspondientes)
•
El último tipo usado es el llamado ‘checkbox’ donde el campo que se quiere
activar, se elige marcando de entre varias opciones una casilla cuadrada.
Autor: Jonathan Fco. Ginés Monteagudo
47
4.4.
COMUNICACIÓN SVG ÅÆ JAVASCRIPT
Uno de los aspectos más cruciales y dificultosos a la hora de implementar la
herramienta fue la comunicación entre el código JavaScript, presente en toda la
página web, y el marco central de la Carta de Smith desarrollada completamente en
SVG.
Mostrando directamente las líneas del código correspondiente, podemos observar
las acciones que implicaban la comunicación entre ambas tecnologías:
// Asocio mis llamadas a funciones del svg hechas desde el html (marco izq en este caso), a mis
funciones en el SVG. Comunicacion html -><- svg
top.drawChart=svgdrawChart;
top.drawCircle=ordersvgdrawCircle;
top.RemoveElement=svgRemoveElement;
top.CutPoints=svgcutPoints;
top.TransfCircle=svgtransfCircle;
Los nombres a la izquierda del igual se corresponden con los nombres de las
funciones llamadas desde el código JavaScript del marco izq.htm y los de la derecha
con sus correspondientes funciones en el fichero smithchart.svg… de forma similar,
la otra comunicación se corresponde con:
// Comunicacion SVG->HTML ///////////////////////
top.htmlround=round;
top.htmlupdateComplexValues=updateComplexValues;
top.htmlupdatePoints=updatePoints;
top.htmlCutPoints=CutPoints;
top.htmlTransfCircle=TransfCircle;
// Comunicacion SVG->HTML ///////////////////////
Es decir, tanto para hacer llamadas a funciones de SVG desde el código HTML,
como al revés, para hacer llamadas a funciones de HTML desde el código SVG,
estas funciones tenían que declararse como:
top.nombreFunción= nombreFunción asociada
Autor: Jonathan Fco. Ginés Monteagudo
48
Por otra parte, el papel de cada una de las funciones, queda explicada por sus propios
nombres.
Un ejemplo de comunicación, de los 5 expuestos más arriba, podría ser el de la
transformación de círculos entre planos. Lo describimos a continuación:
izq.htm
top.htmlTransfCircle=TransfCircle
smithchart.svg
top.TransfCircle=svgtransfCircle
Se hace Click en Trans. Circ.
top.TransfCircle(parám.1)
Function TransfCircle(parám.2)
{
.
.
}
Function svgtransfCircle(parám.1)
{
transfCircles=1
.
.
}
.
.
Function catchCircle(event)
{
if (transfCircles=1)
.
.
top.htmlTransfCircle(parám.2)
}
1º) Al pulsar el botón de Transf. Circ., se llama desde el marco izq.htm a la
función top.TransfCircle(…) del fichero smithchart.svg
2º) El smithchart.svg identifica la llamada con su top.TransfCircle y la
redirecciona a la función adecuada, svgtransfCircle()
Autor: Jonathan Fco. Ginés Monteagudo
49
3º) Una vez capturado el círculo, se pasan los datos de su centro y radio
(parám.2) a la función del html top.htmlTransfCircle()
4º) El izq.htm identifica la llamada con su top.htmlTransfCircle=TransfCircle
Y la redirecciona a la función adecuada TransfCircle ()
5º) TransfCircle () realiza los cálculos complejos necesarios y después llamará
(nuevamente aparece otra vez la comunicación) a la función svg encargada
de dibujar el circulo transformado.
Autor: Jonathan Fco. Ginés Monteagudo
50
Descargar