




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
En este documento se explica cómo crear una página web dinámica utilizando PHP y PostgreSQL. Se incluye código para la conexión a la base de datos, la ejecución de consultas SQL y la paso de variables a las páginas. Además, se muestra cómo redirigir rápidamente a otras páginas y cómo crear capas de clase para menús. Se incluyen ejemplos de código para la manipulación de imágenes y la creación de formularios.
Tipo: Apuntes
1 / 160
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































Todos los artículos de la Web en formato PDF
6 -. Montar una web con apache+php+postgreSQL en Linux
7 -. Acceso a base de datos de Access 2000 usando el ADO Data Control
8 -. Cómo obtener el nombre de archivo largo a partir de uno corto en Visual C++
1
Office 2000 y XML
URL : http://www.programacion.net/articulos/office2000xml.php Autor : Ramón Montero Email : [email protected]
Office 2000 no es solo una buena suite de aplicaciones informáticas, sino que también es una herramienta de gestión de documentos web muy avanzada. Sus opciones de XML permiten generar automáticamente los documentos web más avanzados del momento, además de permitir la interconexión de diferentes documentos provenientes de las distintas aplicaciones que forman Office 2000.
En este artículo se van a comentar algunas de las características de los "esquemas" que utiliza Office 2000 para trabajar con XML.
Notas: Para comprobar los ejemplos que siguen a continuación, es imprescindible disponer de Office 2000 y de Internet Explorer 5.
1. Introduccción
La versión anterior de Microsoft Office, o sea, la versión 97, ya incorporaba muchas opciones y herramientas para generar páginas web, aunque algunas de ellas no estaban muy depuradas, perdiéndose incluso alguna información importante cuando se convertía un documento Office al formato HTML.
La última versión de Microsoft Office, esto es, la versión 2000 (que internamente se define como versión 9 ), no solo ha mejorado sus posibilidades de creación y edición de páginas web, sino que ha incorporado verdaderas opciones avanzadas para la Web, tales como el funcionamiento en intranet, la utilización de CSS o la incorporación de XML y VML.
La idea de Microsoft ha sido utilizar el HTML en Office 2000 de forma similar a como se trabaja en los formatos propios de las diferentes aplicaciones, para lo cual, se ha visto obligada a perfeccionar el código que se genera cuando se trabaja como página web, auxiliándose especialmente de las normas CSS y XML, aunque también aprovecha algunas características propias del entorno que forman Office 2000-Internet Explorer 5. Todo esto hace posible que cuando se pasa del diseño en formato propio al Diseño Web, no se nota el cambio en las herramientas disponibles.
Cualquier usuario de Office 2000 que observe el código fuente (opción Ver > Código fuente
HTML ) que genera un documento cualquiera de Word 2000 abierto como página web (opción Archivo > Nuevo... > Página Web ), observará que el código es bastante complejo, aunque no se haya escrito ni una palabra. Existen dos motivos principales.
Uno es que cualquier documento precisa cierta información extra que no tiene relación directa con su contenido, como es el nombre del autor, la fecha de creación, la empresa propietaria, etc. Esta información se guarda en formato XML y se distingue porque se incluye entre las etiquetas y .
El otro motivo es que es necesario definir algunos estilos de trabajo para poder empezar, como son el estilo de texto Normal o el estilo de definición de la página (tamaño, márgenes, encabezado y pie de página,...). Estos estilos se definen en formato CSS y se incluyen entre las etiquetas .
Según se va creando el documento, no solo se van añadiendo las etiquetas HTML necesarias para soportar el contenido, sino que se van modificando los elementos XML de información extra y las descripciones CSS de los estilos.
2. Espacios de nombres
Lo primero que hay que tener en cuenta para entender el código que genera Word 2000 cuando trabaja como Diseño Web, son los espacios de nombres.
De una forma sencilla, se puede decir que los "espacios de nombres" (namespaces) es un sistema normalizado que permite trabajar con varios documentos integrados en un mismo documento. Podemos imaginar que es como si ciertas partes de un código se situan en una capa, mientras que otras partes del mismo código están en otras capas diferentes, de tal manera que dichas capas se pueden superponer y mezclar, conformando un único documento.
Esto permite, entre otras cosas, poder trabajar con diferentes especificaciones dentro del mismo documento, sin que las posibles coincidencias entre las distintas definiciones produzcan interferencias ente sí. Por ejemplo, se puede trabajar con una etiqueta que se refiera al final del documento y otra etiqueta que sirva para señalar la dirección del final de una carrera de bicicletas, pues si cada etiqueta pertenece a un espacio de nombre distinto, actuarán sin interferirse mutuamente.
En el código de un documento Office 2000 se declaran los espacios de nombres al principio del código. Si observamos el caso de un documento Word 2000 en blanco, veremos que empieza con:
Podemos ver cómo se aprovecha la etiqueta HTML para incluir los tres espacios de nombre (atributo xmlns) correspondientes al espacio de nombre por defecto adjudicado a la
Office 2000 y XML Pag. 5
El sistema Office 2000-IE5 soporta una variación de este proceso, ya que pueden añadir condiciones a estas marcas que les indican si el código que incluyen debe ser procesado o no.
Para utilizar CC hay que añadir [if X ] a la marca de principio y [endif] a la marca de final, donde X es la condición que se precisa para activar el código que se incluye entre las marcas de CC.
Por ejemplo, las siguientes líneas:
Permiten mostrar el mensaje solo si el navegador utilizado es el IE5.
Por el contrario, el código siguiente:
** Usted no está navegando con Internet Explorer 5 **
Hace que se muestre el mensaje solo si el navegador utilizado no es el IE5.
Office 2000 aprovecha el CC para incluir información especial que solo él puede utilizar. Así, el siguiente código:
Es interpretado por Office 2000 (que es la versión 9) mediante [if gte mso 9] para que pueda trabajar con la información incluida como un documento XML que utiliza el espacio de nombre o (de office).
Cualquier otro programa o navegador que abra una página web con este código, ignorará la información XML.
Office 2000 utiliza los CCs en otras ocasiones diferentes a la comentada, siendo corriente encontrar CCs insertados en el código HTML.
4. Organización de recursos
Cuando se salva un documento HTML es necesario controlar perfectamente los archivos adicionales al documento, como los gráficos, los sonidos, los vídeos, los frames de los
Office 2000 y XML Pag. 7
diseños con cuadros, etc.
Office 2000 realiza este control automáticamente, de forma similar a como actúa IE5 cuando se da la orden de guardar una página web "completa", o sea, creando una carpeta especial con el mismo nombre del archivo HTML (y el añadido _archivos ), donde incluye todos los recursos necesarios para construir adecuadamente la página web correspondiente al archivo HTML.
En dicha carpeta, además de los archivos de los recursos, se encuentra un archivo XML denominado filelist.xml. En dicho archivo se incluye una relación de datos necesarios para gestionar los recursos de la página web.
Un ejemplo del contenido de filelist.xml puede ser:
**
**
No es complicado entender el contenido del archivo filelist.xml , y si el lector piensa que no parece tener ninguna utilidad, debe entender que soporta información única y adecuada para que Office 2000 pueda reconstruir perfectamente el documento cuando se vuelva a abrir la página web.
5. Controles ActiveX
En algunas ocasiones, no es suficiente con las restringidas posibilidades del HTML para mantener ciertas características especiales de gestión avanzada de documentos. En estos casos, Office 2000 recurre a la inserción de controles ActiveX, capaces de solucionar cualquier necesidad.
Pongamos el caso de una hoja de cálculo generada con Excel 2000, que se guarda en formato HTML, pero manteniendo la interactividad.
El código que se genera es similar al siguiente:
**
...... ......
**
Se puede distinguir fácilmente la inclusión del control ActiveX () que controla
Office 2000 y XML Pag. 8
definido por la v , y en el caso del rectángulo, el aprovechamiento del CSS para su descripción.
Los lectores interesados en el VML pueden ver el tutorial existente en RAMON.ORG sobre el tema.
Por supuesto que para ver en la pantalla de nuestro ordenador las figuras definidas en VML, hay que disponer de un visualizador que incluya un intérprete del VML, que además de Office 2000, puede ser el navegador Internet Explorer 5, siempre que se haya instalado la opción VML.
Aunque en principio hubo varias empresas que participaron en el desarrollo del VML, en la actualidad Microsoft se ha quedado casi solo en su aplicación, ya que la mayoría de las casas prefiere esperar a que se termine de desarrollar el SVG (Scalable Vector Graphics), también basado en el estándar XML y muy parecido al VML, pero con la ventaja de que está arropado por un grupo de trabajo del W3C.
7. Conclusiones
Más que ser una guía de referencia de la utilización del XML en Office 2000, este artículo pretende ser una introducción al sistema de utilización del XML por parte de Office 2000 que Microsoft ha implementado para conseguir que cualquier usuario pueda trabajar en modo Web-HTML desde las aplicaciones que integran Office 2000, sin perder sus principales características, cosa imposible de realizar sin el apoyo del XML.
Office 2000 es sin duda alguna el primer proceso que hace un uso intensivo y completo del XML, y que combinado con IE5, forma un sistema completo y avanzado de diseño web automatizado, haciendo muy fácil la utilización de sus documentos en las intranets.
La mayor pega que se le puede achacar al código HTML generado por Office 2000 es la gran cantidad de información que no pueden entender otras aplicaciones distintas del propio Office 2000 o IE5, por lo que algunas utilidades especializadas en el diseño web están incluyendo opciones de eliminación automática del código específico no estandarizado, pudiendo obtenerse estos filtros incluso de la propia página web de Microsoft.
Office 2000 y XML Pag. 10
2
El coprocesador
matemático
URL : http://www.programacion.net/articulos/copro.php Autor : Astaroth Email : [email protected]
Bueno, este documento es una breve iniciación al funcionamiento del coprocesador matemático en los sistemas PC y, más concretamente, a la arquitectura de los procesadores PENTIUM, puesto que hoy por hoy es lo más utilizado. No es mi intencion dar una explicacion completa de su arquitectura interior, simplemente trato de arrojar un poco de luz donde no la hay, porque cuando decidí meterme con el coprocesador matemático, no encontre apenas documentación y la poca (por no decir nula) estaba en inglés.
1. ¿Merece la pena usar el copro?
Esta pregunta es algo ambigua, porque depende mucho de la aplicacion en sí. Si lo que queremos realizar son calculos intensivos en 3D la respuesta es sí. Esto depende mucho por la incapacidad que tiene el coprocesador de intercambiar datos con los registros de proposito general, lo que obliga a costosas descargas en memoria con conversion a entero y que provoca que, por ejemplo, un calculo en el que tengamos que utilizar directamente el resultado de la operacion como un puntero a una zona de memoria, o como valor para introducir en una zona de memoria, sea algo lento.
Si por ejemplo lo que queremos es realizar un calculo sobre unos datos dados (por ejemplo una multiplicacion de matrices) si que merece la pena su uso.
2. Estructura interna
El coprocesador trabaja internamente sólo en formato real, por lo que cualquier carga en los registros de coprocesador provocará que dicho valor sea convertido a coma flotante.
Sus registros están estructurados en forma de pila y se accede a ellos por el numero de entrada que ocupan en la pila.
Los registros son R(0) hasta R(7), en total ocho registros de 80bits, como han de ser manejados en formato de pila, el coprocesador tiene un puntero de control de pila llamado
Como hemos visto al funcionar a base de pila siempre tenemos que dejarla tal y como se encontraba al iniciarse nuestra rutina, de ahi la operacion de popeo con la variable Desca, aunque esto puede realizarse más rapido, siempre teniendo en cuenta varias cosas.
En vez de usar fadd podemos usar faddp que automaticamente suma St(0) y St(1) y elimina automáticamente el operando sobrante de la pila quedando en St(0) el resultado listo para ser popeado.
¡Ojo, las instrucciones de cálculo con la particula "p" ej: faddp o fdivp, sólo trabajan con las posiciones de pila St(0) y St(1)!
También podríamos haber usado en vez del fstp a Descal un ffree St(1), esta instrucción automáticamente libera ese componente de la pila, pero sólo es efectiva para dejar la pila tal y como estaba cuando el operando a liberar ocupa la última posicion en la pila (esto es, el primero introducido).
Start: fild Dword Ptr ds:[Numero1] ;Cargar en el copro la ;variable Numero1 indicando ;que es un entero fld Dword Ptr ds:[Numero2] ;Idem pero es un real faddp ;Sumarlos y popear el ;operando sobrante. ;St(0)=St(0)+St(1) ;pop st(1) > nul ;Solo opera con estos ;punteros de pila!! fstp Dword Ptr ds:[Resul] ;Descargar el resultado. mov eax,4c00h int 21h End Start
o bien...
.CODE Start: fild Dword Ptr ds:[Numero1] ;Cargar en el copro ;la variable Numero ;indicandole que es un entero fld Dword Ptr ds:[Numero2] ;Idem pero es un real fadd St(0),St(1) ;Sumarlos ;St(0)=St(0)+St(1) fstp Dword Ptr ds:[Resul] ;Descargar el resultado. ;pop St(0) > Resul ffree St(0) ;Descartar el otro valor. ;Free St(0) (stack cleared) mov eax,4c00h int 21h End Start
Como habreis podido observar liberamos con ffree St(0) esto es por lo anteriormente comentado. Al liberar el resultado de la pila St(1) pasa a ser St(0), St(2)-St(1), etc. Debido a su estructura en forma de pila.
5. Instrucciones
Estas son las instrucciones mas comunes, he omitido algunas, por tratarse por ejemplo de
El coprocesador matemático Pag. 13
aritmetica BCD (cosa poco comun en el mundo del tiempo-real) pero para los interesados, Intel tiene a su disposicion unos archivos en formato de Acrobat Reader con la lista y la organizacion interna de la FPU. Los ciclos de reloj de las instrucciones, son los declarados por Intel para el Pentium basico, esto puede verse alterado en las CPU's MMX, PRO y Pentium II. No voy a comentar las instrucciones porque en este momento carezco del tiempo necesario para realizar una documentación sobre las instrucciones de manera seria, pero de todas formas solo hay que ser un poco despierto para con solo los nombres hacerse una idea basica del funcionamiento de cada instrucción. Cualquier instruccion de cálculo ( fadd, fsub, etc) toman por defecto si no se le especifica otros operandos St(0) y St(1).
Leyenda : rm=Modo Real, vm=Modo Virtual, pm=Modo Protegido
Instrucción Ejemplo Ciclos de reloj FABS fabs 1 FADD [reg,reg] fadd 3, 1 FADD memreal fadd shortreal 3, 1 FADDP reg,ST faddp st(6),st 3, 1 FIADD memint fiadd int16 7, 4 FCHS fchs 1 FCLEX fclex 9+ FNCLEX fnclex 9 FCOM fcom 4, 1 FCOMP fcomp 4, 1 FCOMPP fcompp 4, 1 FICOM memint ficom double 8, 4 FICOMP memint
ficomp darray[di]
8, 4
FCOS fcos 18- FDECSTP fdecstp 1 FDIV [reg,reg] fdiv st(5),st 39 FDIV memreal fdiv longreal 39 FDIVP reg,ST fdivp st(6),st 39 FIDIV memint fidiv warray[di] 42 FDIVR [reg,reg]
fdivr st(5),st 39
FDIVR memreal
fdivr longreal 39
FDIVRP reg,ST fdivrp st(6),st 39 FIDIVR memint
fidivr warray[di]
42
FFREE ST(i) ffree st(3) 1 FILD memint fild quads[si] 3, 1 FINCSTP fincstp 1
El coprocesador matemático Pag. 14
FSQRT fsqrt 70 FST reg fst st 1 FST memreal fst longs[bx] 2 FSTP reg fstp st(3) 1 FSTP mem32real
fstp longreal 2
FSTP mem64real
2
FSTP mem80real
3
FSTCW mem16 fstcw ctrlword 2+ FNSTCW mem
fnstcw ctrlword 2
FSTENV mem fstenv [bp-14] 16-bit rm or vm=50+;32-bit rm or vm=48+;16-bit pm=49+;32-bit pm=50+ FNSTENV mem
fnstenv [bp-14] 16-bit rm or vm=50;32-bit rm or vm=48;16-bit pm=49;32-bit pm= FSTSW mem16 fstsw statword 2+ FSTSW AX fstsw ax 2+ FNSTSW mem
fnstsw statword 2
FNSTSW AX fnstsw ax 2 FSUB [reg,reg] fsub st,st(2) 3, 1 FSUB memreal fsub longreal 3, 1 FSUBP reg,ST fsubp st(6),st 3, 1 FISUB memint fisub double 7, 4 FSUBR [reg,reg]
fsubr st,st(2) 3, 1
FSUBR memreal
fsubr longreal 3, 1
FSUBRP reg,ST
fsubrp st(6),st 3, 1
FISUBR memint
fisubr double 7, 4
FTST ftst 4, 1 FUCOM [reg] fucom st(2) 4, 1 FUCOMP [reg] fucomp st(7) 4, 1 FUCOMPP fucompp 4, 1 FWAIT fwait 1- FXAM fxam 21 FXCH [reg] fxchg st(3) 1
El coprocesador matemático Pag. 16
FXTRACT fxtract 13 FYL2X fyl2x 22- FYL2XP1 fyl2xp1 22-
6. Hints, o cómo acelerar
Lo primero es que, como ya hemos visto con los ciclos de las instrucciones, el volcado y carga de memoria es lento, con lo cual, la primera regla, es realizar las menores cargas y volcados posibles, aprovechando al maximo las posiciones de la pila para cuantas más operaciones mejor.
Por ejemplo, hemos de multiplicar un array por 5...
.DATA Array dd 200 dup(?) ;Array con datos.. :D Value dd 5 .CODE fild Dword Ptr ds:[Value] mov ecx,200 ;200 datos a multiplicar mov edi,offset Array Bucle: fild Dword Ptr ds:[edi] ;fild suponiendo que son ;enteros.. fmul ;Multiplica St(0),St(1) fistp Dword Ptr ds:[edi] ;descargamos el operando add edi, dec ecx jnz Bucle ffree St(0) ;Liberar el dato "5" :)
o bien, para ahorrarnos el ffree... :)
fild Dword Ptr ds:[Value] mov ecx,199 ;200 datos a multiplicar mov edi,offset Array Bucle: fild Dword Ptr ds:[edi] ;fild suponiendo que son ;enteros.. fmul ;Multiplica St(0),St(1) fistp Dword Ptr ds:[edi] ;descargamos el operando add edi, dec ecx jnz Bucle fmulp ;St(0)=St(0)*St(1) ;pop St(1) > nul fistp Dword Ptr ds:[edi]
Esto en realidad es un ejemplo tonto, pero como podemos observar la enseñanza del mismo es directamente aplicable a muchas rutinas matemáticas de ámbito 3D.
Otra cosa a tener en cuenta es que, si las cargas y descargas ya de por sí son lentas (hay que tener en cuenta cache hits en las cargas) es más lento todavía con la inclusión de la particula "i", ya que la FPU ha de convertir ese dato entero a real, esto provoca que siempre perdamos unos pocos ciclos en la operación. Aun así, lo expuesto arriba ya de por sí es más rápido que lo mismo escrito en código de procesador (osea con imuls,etc).
Esto es fácilmente solucionable, si nuestra aplicacion necesita realizar diversos cálculos
El coprocesador matemático Pag. 17
ecuación programada con el procesador.
Además, los inversos se pueden utilizar hasta en los sitios mas insospechados. Por ejemplo, en nuestro sistema de sonido, en el player de Sb hay una tabla de inversos para eliminar DIV's en la rutina de mezcla.
8. Cuidado con...
En primer lugar, mucho cuidado con la pila, cualquier desestabilizacion de la pila puede provocar resultados insospechados y hasta, en muchos casos, el cuelgue total del computador.
En segundo lugar, con los compiladores. Ignoro si hay algun compilador perfecto para el inline en asm, porque realmente yo no uso ninguno, siempre programo en 100% ensamblador, pero he visto casos como el de un chaval que una noche a través del IRC me comento que un bucle con MUL's y otro con FMUL's le funcionaban a la misma velocidad. Me paso el exe, y me di cuenta que el WATCOM C le habia generado en vez de FMUL's, FMULP's, con lo cual siempre popeaba datos y ocasionaba una excepción de pila, lo que hacia que el codigo de copro se ejecutara más lento. Las excepciones de pila por arriba, esto es por St(0) son controlables, pero por abajo (St(7)) no lo son tanto.
No sé si esto es un bug declarado del compilador, pero tambien he oido que existen algunos problemas con la conversion de real a entero de la citada Math387 del Watcom C, por lo cual aconsejo, que después de haber escrito la rutina, coger un debugger y asegurarse de que el codigo generado por el compilador es exacto.
Nosotros aqui en TLOTB trabajamos tanto con TASM como con NASM y con ninguno de los dos hemos tenido ningun problema con las instrucciones y sintaxis de copro, con lo cual tambien aconsejo el ensamblar las rutinas con alguno de estos dos ensambladores y despues enlazarlas con el programa principal.
9. ¿Que hay de verdad sobre las transferencias con copro?
Bien, esto es un tema peliagudo, y lo evaluaremos en dos casos particulares.
La segunda es el conexionado del procesador a la memoria del sistema, cuya transmisión optima es 64bits (mejor si disponemos de modulos de memoria DIMM). La tercera, el alineamiento a 64bits es lo mas óptimo en una CPU Pentium. Aquí, en transferencia, hay que tener cuidado con los NaN.
El coprocesador matemático Pag. 19
Para borrar una zona de memoria (por ejemplo una pantalla virtual) el copro bate records.
Alineamiento... hacer la siguiente prueba...
Apuntar lo que tarda y luego hacer lo mismo con una direccion sin alinear.. ¡veréis la grandiosa diferencia! :)
11. Palabras de control y estado de coprocesador y registros de flag
Aqui esta la especificación de bits de las palabras de estado y de control, Hay que tener en cuenta que esta documentación la he podido conseguir sólo del 387, y que hay bastantes diferencias con el 287, asi que podría ser que en los actuales cambie alguna cosa.
PALABRA DE CONTROL
Bit Nombre Descripción 15-13 -- Reservados en el 387 12 -- Reservados en el 387; en el 287 era control de infinito.
El coprocesador matemático Pag. 20