domingo, 7 de diciembre de 2014

Error 0xc000007b en Wamp Server

Hace poco he decidido dar el gran salto a Windows 8.1 por cuestiones laborales y me he encontrado con un problema muy común en la instalación del Wamp Server en sistemas de 64 bits, el famoso error 0xc000007b. Este error, por lo general es debido a una falta o mala instalación de las librerías necesarias para que el Wamp Server funcione correctamente, sin embargo, puede haber otras razones por las cuales no funcione y las cuales se desccribirán a continuación.

Descripción del problema


Al instalar el Wamp Server (x64) de manera correcta, en el momento que intenta iniciar la aplicación aparece el siguiente mensaje de error:


Aunque el error es bastante general, suele ocurrir con más frecuencia en sistemas de 64 bits. Los datos del entorno sobre el cual se ha realizado la solución descrita en este post son los siguientes:

S.O.: Windows 8.1 Pro
Arquitectura: 64 bits
Web Server: Wamp Server 2.5
Otros Servers: IIS

Creo necesario mencionar que en ese momento había una instalación del IIS de Microsoft y en ninguna medida contribuye con el error descrito. Sin embargo, después de solucionar el inconveniente deberá configurarse correctamente el Wamp Server en el puerto 8080 para que no entre en conflicto con el IIS.

También se puede observar que en la barra de tareas del escritorio el icono del Wamp Server se queda en amarillo y al colocar el puntero sobre él indica que solamente se ha habilitado un servicio de los dos necesarios para que funcione el servidor.


Para identificar el servicio que no ha podido iniciar basta ver el administrador de tareas y en "Procesos" verificamos que exista mysqld y Apache HTTP Server. En este caso, solamente veremos en ejecución el proceso mysqld. Además de esto, no es posible realizar ninguna acción sobre el servidor puesto que el menú del Wamp Server no funciona al hacer clic sobre el icono de la barra de tareas.

Solución


Después de investigar varios días sobre este error, encontré varios motivos por los cuales puede ocurrir este problema.

+ Bloqueo por el Firewall
+ Otra aplicación utilizando el puerto 80
+ Versión incorrecta del Microsoft Visual C++ Redistributable

La primera alternativa de solución es muy sencilla, simplemente se debe desactivar el Firewall y correr la aplicación con el Firewall desactivado para descartarlo como posible causa del problema. Si definitivamente ese es el problema, entonces en vez de dejarlo desactivado se debe agregar una excepción a la aplicación Wamp Server para que pueda pasar por el Firewall. Puedes encontrar más información sobre cómo permitir a una aplicación pasar a través del Firewall en el siguiente enlace:

http://windows.microsoft.com/es-co/windows-8/windows-firewall-from-start-to-finish

Por otra parte, puede existir otra aplicación que esté utilizando el puerto 80 el cual es el utilizado por el Wamp Server por defecto. Para verificar si existe otra aplicación utilizando este puerto podemos abrir una consola como administrador y ejecutar el comando netstat -a.



Como puede observarse en la imagen anterior, el puerto 80 está siendo ocupado por otra aplicación ejecutada por el usuario en sesión. Otra forma un poco más detallada para ver los puertos es instalar la aplicación cports disponible en http://www.nirsoft.net/utils/cports.html.

Lo ideal es cerrar todas las aplicaciones que estén utilizando el puerto 80 como torrents, otros servidores, entre otras aplicaciones. Lo curioso, es que después de para el Servidor IIS y verificar de nuevo si existía alguna aplicación utilizando el puerto 80 el mismo error seguía aparenciendo. Por lo cual, para este caso, queda descartado que el IIS sea el causante del problema en mención. Lo cual nos lleva a la siguiente alternativa.

Versión incorrecta de Microsoft Visual C++


Resulta que cada release del Wamp Server (x64) puede o no utilizar una versión distinta de Microsoft Visual C++ Redistributable. Hay que instalar exactamente la versión que se encuentra en el archivo README puesto que otras versiones probablemente no funcionarán. A lo cual reitero:

SE DEBE REVISAR EL ARCHIVO README SÍ O SÍ.

En dicho archivo, encontré lo siguiente:


README.txt
WampServer 2.5 - 32 and 64 bits

Be sure that you have installed Visual C++ Redistributable for Visual Studio 2012 : VC11 vcredist_x64/86.exe
http://www.microsoft.com/en-us/download/details.aspx?id=30679

Don't Use previous WampServer Extensions/Addons
There are no more compatible with the new wampserver version's (VC11)


Apache : 2.4.9
MySQL : 5.6.17
PHP : 5.5.12
PHPMyAdmin : 4.1.14
SqlBuddy : 1.3.3
XDebug : 2.2.5


Lo cual indica para esta versión, que únicamente debe ser instalada la versión 2012 del famoso Redistributable. Después de descargar este archivo y ejecutar la instalación, se debe ejecutar el Wamp Server y ejecutar desde el menú los siguientes procesos:

Apache -> service -> install Service
Apache -> service -> Start/Resume Service

Además de esto, en caso de tener otro servidor en funcionamiento, se deben configurar el puerto 80 en los siguientes archivos:

Reemplazar todas las conincidencias de la cadena http://localhost y reemplazar por http://localhost:8080 en el archivo wampmanager.tpl.


wampmanager.tpl
http://localhost:8080/

Reemplazar todas las conincidencias de la cadena :80 por :8080 en el archivo httpd.conf. En este caso, quedaría de la siguiente forma:


httpd.conf
Listen 0.0.0.0:8080
Listen [::0]:8080
ServerName localhost:8080


Si todo ha ido bien, tendremos nuestro servidor Apache en correcto funcionamiento y si es el caso el IIS en paralelo.


Referencias

- PHP, Apache, MySQL, Windows : WampServer. (2013, January 25). In Wamp Server Forum. Retrieved 12:23, December 7, 2014, from http://forum.wampserver.com/read.php?2,110511,110966
- PHP, Apache, MySQL, Windows : WampServer. (2014, May 6). In Wamp Server Forum. Retrieved 12:23, December 7, 2014, from http://forum.wampserver.com/read.php?2,123685
- Problema con Apache... desesperación. (2012, Agosto 16). In Foros del Web, comunidad para aprender web. Retrieved 12:23, December 7, 2014, from http://www.forosdelweb.com/f58/problema-con-apache-desesperacion-1008561

miércoles, 29 de octubre de 2014

Instalación Zend Framework

El núcleo de Zend Framework contiene todas las clases y librerías necesarias para construír una aplicación web profesional. Sin embargo, se requiere de una aplicación esqueleto que agregue y configure lo necesario para poder trabajar directamente con Zend Framework, y aunque cada uno de nosotros podemos crear dicho esqueleto lo usual es descargar la propia aplicación esqueleto que provee el Zend denominada Zend Skeleton Application. Podemos encontrar una versión actualizada del Skeleton directamente en el siguiente enlace Zend Skeleton on GitHub.

Si ya tienes instalada la aplicación Git en la computadora basta con ejecutar el siguiente comando

git clone https://github.com/zendframework/ZendSkeletonApplication

Después de esto, por simplicidad renombramos la carpeta a ZendApp y la movemos al directorio del servidor. Enseguida se deben resolver las dependencias, lo cual incluye descargar el código del Zend Framework, y esto se realiza ejecutando el siguiente comando directamente en la carpeta principal del Zend Skeleton:

php composer.phar self-update
php composer.phar install

Para versiones superiores a la 2.3, el archivo composer.phar no viene por defecto en el proyecto del github, por lo cual, es necesario instalar el composer para windows (Composer-Setup.exe) y ejecutar los siguientes comandos en la carpeta principal del Zend Skeleton:

composer self-update
composer install

Es de notar, que es necesario tener habilitada la extensión openssl de php para poder descargar los contenidos desde el composer.phar. Una vez ejecutados los comandos anteriores en la terminal (o símbolo del sistema en Windows) deberá aparecer una salida en consola similar a la siguiente

Instalación Zend Framework

Si es la primera vez que se utiliza GIT en la computadora, probablemente esta requiera la creación de un Token. Los tokens se utilizan para dar autorizaciones de utilización en la terminal del GIT cuando se instalan repositorios de GitHub. Si este es el caso, probablemente la terminal arroje un mensaje como el siguiente:

Solicitud de un Token por parte de GitHub
Para solucionar este inconveniente, se debe crear una cuenta GitHub en caso de no tenerla, y crear un token en las opciones de configuración de la cuenta tal y como lo muestra la siguiente imagen.

Creación de Token desde GitHub

Al crear el token, lo copiamos y lo pegamos en la consola de windows, presionamos enter y en caso de fallar la instalación intentamos nuevamente. Para ver más detalles sobre la instalación de tokens podemos seguir el siguiente enlace Token para Consola de comandos GitHub.

Con esto, el Zend Skeleton Application ha descargado el código del Zend y si se observa lo ha colocado en la carpeta vendor. Al acceder a la carpeta public del proyecto desde el navegador (http://localhost/ZendApp/public) se podrá observar el mensaje de bienvenida del Zend.

Primera interfaz de la aplicación Zend

Para poder utilizar las URLs amigables debemos tener habilitado además el módulo mod_rewrite del apache. Recordemos que Zend por defecto utiliza este tipo de routeado con archivos .htaccess y es la forma en que la mayoría de frameworks maneja sus direcciones.


Referencias

- Getting started: A skeleton application. (2014, October 29). Zend Framework. Retrieved 20:00, October 29, 2014, from http://framework.zend.com/manual/2.3/en/user-guide/skeleton-application.html

miércoles, 22 de octubre de 2014

Introducción a Zend Framework

Zend Framework, es un Framework de código abierto desarrollado en su gran mayoría por la empresa Zend Tecnhologies para el lenguaje de servidor PHP. Otros patrocinadores que se suman a este desarrollo son Google, Microsoft y Strikelron, desarrollando componentes e interfaces para servicios web y otras tecnologías. Zend Framework es uno de los más populares marcos de trabajo para desarrollar aplicaciones profesionales en PHP, ya que se caracteriza por ser robusto, altamente configurable, orientado a objetos y aplica un gran número de patrones de diseño.

Las principales características de Zend Framework son las siguientes:

- Open Source
- Implementa MVC
- Soporte para múltiples bases de datos
- Utiliza PHPUnit para testear el código
- Soporta instalación vía Pyrus o mediante Composer
- Utiliza Travis CI como servicio de integración continua

La versión actual de Zend Framework es la 2.4. Puedes consultar online la guía de referencia en

http://framework.zend.com/manual/2.4/en/index.html

Y la API en



Referencias

- About. (2014, October 21). Zend Framework. Retrieved 12:08, October 21, 2014, from http://framework.zend.com/about/
- Zend Framework. (2014, October 10). In Wikipedia, The Free Encyclopedia. Retrieved 19:03, October 22, 2014, from http://en.wikipedia.org/w/index.php?title=Zend_Framework&oldid=629049251

lunes, 29 de septiembre de 2014

Breve historia de las computadoras

El concepto de computadora apareció hace más de 160 años gracias a Charles Babbage y su Máquina Diferencial. Esta calculadora mecánica fue diseñada para tabular funciones polinomiales y su construcción no se llegó a culminar hasta mucho tiempo después de su diseño. La computadora estaba compuestaba por cientos de ruedas giratorias y una manivela para operarla.

Máquina diferencial del Museo de Londres.

Después de la Máquina diferencial, Babbage diseñó una máquina mucho mejor denominada Máquina Analítica, la cual incluyó soporte para realizar cálculos complejos con tarjetas perforadas. Aunque nunca se construyó, el diseño de esta máquina es notable debido a que está basada en los principios fundamentales de la informática moderna.


Primera Generación de Computadoras (1938-1958)


La primera generación de computadoras se caracterizó por el uso de tubos de vacío y relés para el procesamiento de datos. También era usual utilizar tarjetas perforadas o cintas de papel perforado para la entrada de datos y como medio de almacenamiento no volátil.

La primera computadora de esta generación de propósito general es la ENIAC (Electronical Numerical Integrator And Computer), también considerada como la primera computadora electrónica completa. Fue desarrollada inicialmente para el cálculo de trayectoria de proyectiles para el Laboratorio de Investigación de Balística de los Estados Unidos, y se terminó de construir en 1945. Su peso aproximado era de 27 toneladas y ocupada unos 167 metros cuadrados. Fue construída bajo la dirección de John Presper Eckert y John William Mauchly de la universidad de Pensilvania. Una de las grandes desventajas que tuvo la construcción y puesta en marcha de esta máquina era el gran costo que generaba en luz eléctrica, pues consumía unos 160.000 Watts, y era muy común el reemplazo de válvulas cada uno o dos días.

ENIAC (Tomado de Wikipedia)

En 1951, se construye la UNIVAC I, la primera computadora comercial fabricada en los Estados Unidos. Esta computadora pesaba más de 7 toneladas y estaba compuesta por 5.000 tubos de vacío, pudiendo ejecutar unos 1.000 cálculos por segundo. Funcionaba con una frecuencia del reloj de 2,25 MHz y utilizaba memorias de mercurio mucho más fiables que las anteriormente usadas de tubos de rayos catódicos.

UNIVAC I (Tomado de Wikipedia)

Segunda Generación de computadoras (1958-1964)


La segunda generación de computadoras reemplazó los antiguos tubos de vacío por transistores, lo cual impulsó el desarrollo de computadoras más pequeñas. Estas computadoras se programaban con lenguajes de programación de alto nivel.

En 1957 aparece el primer lenguaje de programación de alto nivel denominado FORTRAN (FORmula TRANslator) desarrollado por IBM para el equipo IBM 704.

En 1959 aparece el IBM 1401 basado en la tecnología de transistores, y con una memoria magnética de 4.000 caracteres que posteriormente se extendió a 16.000.

En 1960 aparece el IBM 1620 con una memoria de núcleo magnética de más de 60.000 dígitos decimales. En este mismo año se desarrolla el lenguaje de programación COBOL (COmmon Business-Oriented Languaje), el primer lenguaje de programación de alto nivel transportable entre modelos diferentes de computadoras; y ALGOL (ALGOrithmic Language), primer lenguaje de programación estructurado y orientado a los procedimientos.

Tercera Generación de computadoras (1964-1971)


La tercera generación de computadoras se caracterizó por la utilización de circuitos integrados que reemplazaron las placas de circuitos impresas.

En el año 1964 IBM anuncia la serie 360, la cual marca el comienzo de la tercera generación de computadoras. Las placas de circuito impreso con múltiples componentes son reemplazadas por circuitos integrados. Esto generó un gran avance en la construcción de computadores pues se redujo su tamaño y se optimizó la velocidad de procesamiento. En esta época aparecen las primeras minicomputadoras.

Cuarta Generación de computadoras (1971-1981)


La cuarta generación de computadoras estuvo marcada por la utilización de microprocesadores haciendo posible la construcción de microcomputadoras.

El tamaño reducido de los microprocesadores hizo posible la construcción de los primeras microcomputadoras, más conocidas como computadoras personales. El primer microprocesador de 8 bits fue el 8008 desarrollado por Intel en 1972. Este microprocesador contenía 3.300 transistores, aunque el microprocesador realmente diseñado para uso general fue su sucesor el Intel 8080, el cual contenía 4.500 transistores.

Intel 8008

Las microcomputadoras han evolucionado hasta convertirse en Laptops, las cuáles son las computadoras con más alta tendencia en el mercado hoy en día. También existen las Supercomputadoras que son utilizadas para fines específicos, construidas con cientos de los componentes principales de las computadoras de escritorio.


Referencias

- C. Wu, Thomas (2010). An introduction to Object-Oriented Programming with Java™ 5ed. NY: Mc Graw Hill.
- Primera generación de computadoras. (2014, 8 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:18, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=Primera_generaci%C3%B3n_de_computadoras&oldid=76852532.
- ENIAC. (2014, 25 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 14:47, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=ENIAC&oldid=77179255.
- UNIVAC I. (2014, 4 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:08, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=UNIVAC_I&oldid=76772820.
- Segunda generación de computadoras. (2014, 24 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:17, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=Segunda_generaci%C3%B3n_de_computadoras&oldid=77166469.
- Anexo:Historia de la computación. (2014, 27 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 16:16, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=Anexo:Historia_de_la_computaci%C3%B3n&oldid=77211596.
- Tercera generación de computadoras. (2014, 18 de septiembre). Wikipedia, La enciclopedia libre. Fecha de consulta: 19:09, septiembre 29, 2014 desde http://es.wikipedia.org/w/index.php?title=Tercera_generaci%C3%B3n_de_computadoras&oldid=77047459.

sábado, 6 de septiembre de 2014

Introducción a UML

Las grandes empresas necesitan aplicaciones corporativas que ayuden a mejorar sus procesos de negocio de una forma rápida y eficiente, y que brinden la posibilidad de evolución a medida que las necesidades cambien. Es por esto que una aplicación empresarial debe aportar escalabilidad, seguridad, robustez, y debe mantenerse estable ante condiciones de estrés, este conjunto de características hace referencia a lo que el el software se denomina su arquitectura. De la misma forma en que un edificio requiere de planos arquitectónicos para soportar teóricamente su existencia, las aplicaciones de software requieren de modelos que soporten su estabilidad y garanticen el correcto funcionamiento del sistema y su mantenibilidad. Estas características también pueden ser aplicadas a proyectos de software mucho más pequeños, pero en donde realmente compruban su eficacia es en proyectos de gran escala. El estándar para el modelado arquitectónico en aplicaciones de software se denomina UML (Lenguaje Unificado de Modelado).

El origen de UML


Anteriormente los programadores intentaban de manera somera representar los requerimientos del cliente dibujando dos o tres garabatillos que solo ellos entendían. Seguidamente casi sin analizar un poco más lo que habían obtenido del cliente empezaban a programar el sistema agregando poco a poco el código que fuera necesario en el proceso. Hoy en día ésta no es una práctica recomendada dado que no se transmite una idea clara del proceso al cliente y éste no puede evidenciar de manera correcta el avance del sistema. Puede ocurrir el caso de que el analista haya malinterpretrado al cliente y esto solo se evidencie después de la realización del proyecto.

Logo oficial de UML
Es por esto, que hoy en día es necesario contar con un plan bien definido del proceso de desarrollo de software. Se debe organizar el proceso de diseño de tal forma que los analistas, desarrolladores, project manager, y otras personas involucradas en el desarrollo del sistema comprendan cuál es el objetivo general del mismo y el lugar que ocupa cada uno dentro de él. Es entonces cuando aparece el concepto de UML, que solidifica el proceso de creación de proyectos de software permitiendo al observador distinguir los aspectos relevantes del sistema, así como visualizar de forma clara y fácil el flujo del mismo.

Modelado de software


El modelado comprende todo el proceso de diseño de aplicaciones de software. Antes de codificar las aplicaciones se recomienda realizar un modelado de la aplicación en donde se especifique su arquitectura y diseño. Entre más grande sea un producto de software es mucho mayor la probabilidad de fracaso, de no terminar el producto a los plazos pactados y con el presupuesto asignado. Es por esto, que el modelado en el desarrollo de software brinda una visión prometedora del proyecto para la toma de decisiones.

En la última especificación de UML, se definen trece tipos de diagramas agrupados en tres categorias. Seis tipos de diagramas representan la estructura estática de la aplicación, otros tres representa su comportamiento y cuatro más representan las interacciones.

Diagramas de Estructura: Diagrama de Clase, Diagrama de Objeto, Diagrama de Componente, Diagrama de Estructura Compuesta, Diagrama de Paquete, Diagrama de Despliegue.

Diagramas de Comportamiento: Diagrama de caso de uso, Diagrama de Actividad, Diagrama de Estado de la Máquina.

Diagramas de Interacción: Diagrama de Secuencia, Diagrama de Comunicación, Diagrama de Tiempo, Diagrama de Interacción.

Más adelante, veremos como cada uno de estos diagramas pueden representar parte del programa de manera clara y concisa. Hasta la próxima!.


Referencias

- Schmuller, Joseph (2001). Aprendiendo UML en 24 horas. México: Pearson Educación.
- Introduction To OMG's Unified Modeling Language™ (UML®). (2014, September 6). In OMG UML. Retrieved 09:00, September 6, 2014, from http://www.omg.org/gettingstarted/what_is_uml.htm

viernes, 5 de septiembre de 2014

Configuración PHP en Apache

La siguiente documentación se aplica para el servidor web Apache 2.2+ y PHP 5.3 o superior. Se ha de suponer que ya se tiene instalado tanto el servidor Apache (ver instalación) como el compilador del lenguaje de programación PHP (ver instalación).

Existen tres formas distintas de configurar PHP para trabajar con Apache. La primera es configurar PHP como un controlador de Apache, la segunda configurarlo como CGI, y la tercera como FastCGI.

Windows 7/8


PHP como controlador de Apache (handler)


Para configurar PHP como handler se deben agregar las siguientes líneas de código al archivo httpd.conf del Apache.

# Cargar PHP
LoadModule php5_module "c:/php-5.5.12/php5apache2_4.dll"
AddHandler application/x-httpd-php .php

# Configurar la ruta de php.ini
PHPIniDir "C:/php-5.5.12"

En este caso se ha utilizado la ruta c:\php-5.5.12 de acuerdo a nuestra versión de PHP y a la instalación que hemos hecho en Instalación PHP. Debemos asegurarnos que el archivo php4apache2_4.dll exista en este directorio. Posteriormente, si no lo hemos hecho antes, configuramos la zona horaria y el directorio raíz en el fichero php.ini.

doc_root = c:\inetpub\wwwroot
date.timezone = "America/Bogota"

El directorio raíz viene por defector direccionado al directorio c:\php-5.5.12\htdocs, si deseas cambiarlo deberás agregar la primera línea, en caso contrario solamente la segunda. Para verificar que todo se ha configurdo correctamente iniciarmos el servicio de apache, creamos un archivo llamado phpinfo.php en el directorio raíz y vamos a la dirección URL http://localhost/phpinfo.php. El archivo deberá contener la siguiente línea de código:

<?php phpinfo() ?>

Y deberá visualizarse de la siguiente manera en el navegador


La configuración de php mostrará en la directiva Server API el valor Apache 2.0 Handler.

PHP como CGI


CGI (Common Gateway Interface) define un camino para ejecutar aplicaciones externas denominadas scripts. Con las configuración adecuada no solamente podremos ejecutar aplicaciones PHP sino cualquier otra aplicación que soporte scripting como en Perl, Python, entre otros. Para poder ejecutar aplicaciones CGI debemos tener configurado el Apache para permitir la ejecución de scripts por CGI. Esto se logra de varias maneras.

ScriptAlias


La directiva ScriptAlias le comunica a Apache que un directorio ha sido configurado para ejecutar programas CGI y por ende, todo fichero situado en este directorio será ejecutado como CGI. Para lograr esto debemos agregar la siguiente línea de código al archivo de configuración httpd.conf.

ScriptAlias /cgi-bin/ c:/Users/youruser/Documents/cgi-bin

Por lo general el directorio en donde se encuentran los programas CGI es un directorio externo al DocumentRoot definido en el mismo httpd.conf.

CGI fuera de los directorios ScriptAlias


Como se vio anteriormente, la ejecución de programas CGI está restringida a la directiva ScriptAlias por razones de seguridad. Sin embargo, si se toman las medidas de seguridad adecuadas puede permitirse la ejecución de scripts CGI en cualquier directorio. Para lograr esto debe habilitarse la directiva AddHandler o SetHandler y especificar ExecCGI en las opciones de directiva.

En el archivo httpd.conf especificamos que extensiones están habilitadas para scripts CGI.

AddHandler cgi-script .cgi .pl

En el archivo principal de configuración del servidor

<Directory c:/apache2/htdocs/algundirectorio>
   Options +ExecCGI
</Directory>

Para habilitar la ejecución de scripts CGI a cualquier usuario del sistema agregamos la siguiente directiva

<Directory c:/Users/*/Documents/public_html>
   Options +ExecCGI
   AddHandler cgi-script .cgi .pl
</Directory>

Archivos .htaccess


Finalmente si no se tiene acceso al archivo de configuración httpd.conf en el servidor se puede lograr la ejecución de script CGI mediante archivos .htaccess. Puedes visitar el siguiente tutorial directamente en la página de Apache (VER TUTORIAL).

PHP como FastCGI


Ejecutar PHP bajo FastCGI tiene varias ventajas sobre instalarlo como CGI. Para configurar PHP como FastCGI debe seguir las siguientes instrucciones:

1. Descargar el módulo de Apache mod_fcgid directamente desde la página de Apache (DESCARGAR) e instalarlo de acuerdo a sus instrucciones de instalación.

2. Configurar el servidor web tal como se muestra a continuación

LoadModule fcgid_module modules/mod_fcgid.so


# Directorio en donde se encuentra php.ini
FcgidInitialEnv PHPRC  "c:/php" 

AddHandler fcgid-script .php
FcgidWrapper "c:/php/php-cgi.exe" .php

Después de esto los archivos con extensión .php serán ejecutados bajo FastCGI.


Referencias

- PHP: Apache 2.x on Microsoft Windows - Manual. (2014, 5 de Septiembre). PHP: Hypertext Preprocessor. Fecha de consulta: 19:08, Mayo 9, 2014 desde http://php.net/manual/en/install.windows.apache2.php
-Apache Tutorial: Dynamic Content with CGI. (2014, 5 de Mayo). The Apache Software Foundation. Fecha de consulta: 7:08, Septiembre 5, 2014 desde http://httpd.apache.org/docs/current/howto/cgi.html

Introducción a Java

La tecnología Java es tanto un lenguaje de programación como una plataforma.

Java como lenguaje de programación


Es un lenguaje de programación de alto nivel caracterizado por ser simple, orientado a objetos, robusto, seguro, dinámico, portable y multihilo. El código fuente esta compuesto por archivos de texto plano con la extensión .java. Estos archivos son compilados por el javac compiler que lo convierte en bytecodes para que la JVM (Java Virtual Machine) los traduzca a código binario para que los pueda comprender el computador. De esta forma, solo es necesario tener instalada una copia de la JVM en cualquier computador para poder ejecutar programas en java, he aquí la supremacía de su portabilidad.

Proceso de desarrollo en java


Java como plataforma


La plataforma Java comprende únicamente el entorno de software, el cual puede ser ejecutado en distintas plataformas como Microsoft Windows, Linux, Solaris OS y Mac OS. Esta plataforma está compuesta por dos compnentes

- La JVM (Java Virtual Machine)
- La API (Application Programming Interface)

La JVM com ya hemos visto se encarga de transformar el código de las aplicaciones a el código binario necesario para que cada procesador lo ejecute. Entre tanto, la API de Java es un conjunto de funciones (métodos) en clases, y empaquetadas en packages o paquetes de software que proveen la funcionalidad básica en la aplicaciones de Java.

Lugar la plataforma Java


Como puede observarse, la plataforma Java se sitúa justo en el medio de las plataformas de hardware populares y los programas Java. Más adelante veremos como instalar la JVM y las herramientas necesarias para desarrollar aplicaciones en Java con el JDK (Java Development Kit).

Para realizar una instalación del entorno de desarrollo en Java JDK puedes seguir este hilo leyendo nuestro post Instalación de Java (JDK).


Referencias

- Trail: Getting Started (The Java&trade; Tutorials). (2014, August 20). In Oracle Documentation. Retrieved 09:00, September 5, 2014, from http://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html

jueves, 24 de julio de 2014

DOM HTML Level 1


Nota: Algunas interfaces de la API DOM HTML Level 1 vistas en este post dejarón de utilizarse con las nuevas versiones de HTML. Cuando se haga referencia al término DEPRECATED se anuncia explícitamente que la interfaz es obsoleta. Para ver una lista completa de los atributos y métodos obsoletos en cada interfaz visite la página oficial de la especificación en el siguiente enlace DOM HTML Level 1.


La API DOM HTML Level 1 describe los objetos y métodos propios de los documentos HTML. Sus principales objetivos son los siguientes:

- Agregar la funcionalidad necesario a los documentos HTML y sus elementos.
- Abordar la compatibilidad hacia atrás con el "DOM Level 0"
- Proveer los mecanismos necesarios para las acciones regulares al trabajar con documentos HTML

Nótese que "DOM Level 0" no es formalmente una especificación, esto se refiere a las funcionalidades HTML ofrecidas en su tiempo por Netscape Navigator v3.0 y Microsoft Internet Explorer v3.0.

A continuación veremos cada una de las interfaces que hacen parte del API DOM HTML.

Interfaz HTMLCollection


Esta interfaz define simplemente una lista de nodos. Por conveniencia, los nodos representados en una colección HTML son actualizados a medida que se actualiza el documento.

Atributoslength
Métodositem, namedItem

Interfaz HTMLDocument


Esta interfaz se refiere a la raíz del documento la cual contiene todos los demás elementos el el árbol DOM.

Atributostitle, referrer, domain, URL, body, images, applets, links, forms, anchors, cookie
Métodosopen, close, write, writeln, getElementById, getElementsByName

Interfaz HTMLElement


Todas las interfaces de elementos HTML derivan de esta interfaz. Algunos elementos HTML solo exponen los atributos básicos, esto deben ser representados entonces con una interfaz HTMLElement base. Estos elementos son los siguientes:

- HEAD
- especiales: SUB, SUP, SPAN, BDO
- fuente: TT, I, B, U, S, STRIKE, BIG, SMALL
- frase: EM, STRONG, DFN, CODE, SAMP, KBD, VAR, CITE, ACRONYM, ABBR
- lista: DD, DT
- NOFRAMES, NOSCRIPT
- ADDRESS, CENTER

Atributosid
Métodostitle, lang, dir, className

Interfaz HTMLHtmlElement


Esta interfaz representa el elemento root del documento HTML (<html></html>) y solamente posee el atributo version.

Interfaz HTMLHeadElement


Contiene la información del encabezado del documento HTML (<head></head>) y solamente posee el atributo profile.

Interfaz HTMLLinkElement


El elemento link hace referencia a todos los recursos externos del documento web (<link />).

Atributosdisabled, charset, href, hreflang, media, rel, rev, target, type

Interfaz HTMLTitleElement


El elemento title representa el título del documento web (<title></title>) y solamente posee el atributo text.

Interfaz HTMLMetaElement


Contiene meta-información acerca del documento (<meta />).

Atributoscontent, httpEquiv, name, scheme

Interfaz HTMLBaseElement


Define la base de la URI para el documento (<base />).

Atributoshref, target

Interfaz HTMLIsIndexElement (DEPRECATED HTML 4.0)


Este elemento se utiliza para la entrada de texto de una línea (<isindex />).

Atributosform, promt

Interfaz HTMLStyleElement

Este elemento se utiliza para definir la información de estilos del documento  (<style></style>).

Atributosdisabled, media, type

Interfaz HTMLBodyElement


Representa el cuerpo del documento (<body></body>).

AtributosaLink, background, bgColor, link, text, vLink

Interfaz HTMLFormElement


Este elemento presenta un comportamiento similar a una colección HTML. Provee el acceso directo a los elementos de entrada (input) del formulario (<form></form>).

Atributoselements, length, name, acceptCharset, action, enctype, method, target 
Métodossubmit, reset 

Interfaz HTMLSelectElement


Representa la selección de una opción (<select></select>).

Atributostype, selectedIndex, value, length, form, options, disabled, multiple, name, size, tabIndex
Métodosadd, remove, blur, focus

Interfaz HTMLOptGroupElement


Representa un grupo de opciones en divisiones lógicas (<optgroup></optgroup>).

Atributosdisabled, label

Interfaz HTMLOptionElement


Representa una opción (<option></option>).

Atributosform, defaultSelected, text, index, disabled, label, selected, value

Interfaz HTMLInputElement


Representa un control del formulario (<input />).

AtributosdefaultValue, defaultChecked, form, accept, accessKey, align, alt, checked, disabled, maxLength, name, readOnly, size, src, tabIndex, type, useMap, value
Métodosblur, focus, select, click

Interfaz HTMLTextAreaElement


Representa un campo de texto multilínea (<textarea></textarea>).

AtributosdefaultValue, form, accessKey, cols, disabled, name, readOnly, rows, tabIndex, type, value
Métodosblur, focus, select

Interfaz HTMLButtonElement


Representa un botón en el documento (<button></button>).

Atributosform, accessKey, disabled, name, tabIndex, type, value

Interfaz HTMLLabelElement


Etiqueta de un campo de formulario (<label></label>).

Atributosform, accessKey, htmlFor

Interfaz HTMLFieldSetElement


Este elemento organiza los controles de formulario de forma lógica (<fieldset></fieldset>) y posee solamente el atributo form.

Interfaz HTMLLegendElement


Representa el título de un elemento FIELDSET.

Atributosform, accessKey, align

Interfaz HTMLUListElement


Representa una lista desordenada (<ul></ul>).

Atributoscompact, type

Interfaz HTMLOListElement


Representa una lista ordenada (<ol></ol>).

Atributoscompact, start, type

Interfaz HTMLDListElement


Representa una lista de definición (<dl></dl>) y solamente posee el atributo compact.

Interfaz HTMLDirectoryElement (DEPRECATED HTML 4.0)


Representa una lista de directorios (<dir></dir>) y solamente posee el atributo compact.

Interfaz HTMLMenuElement (DEPRECATED HTML 4.0)


Representa una lista de menú (<menu></menu>) y solamente posee el atributo compact

Interfaz HTMLLIElement


Representa un elemento de lista.

Atributostype, value

Interfaz HTMLBlockquoteElement


Representa una cita en bloque (<blockquote></blockquote>) y solamente posee el atributo cite.

Interfaz HTMLDivElement


Representa un contenedor genérico (<div></div>) y solamente posee el atributo align.

Interfaz HTMLParagraphElement


Representa un párrafo (<p></p>) y solamente posee el atributo align.

Interfaz HTMLHeadingElement


Se compone de los elementos h1 hasta h6 (<hX></hX) y solamente posee el atributo align.

Interfaz HTMLQuoteElement


Representa una cita (<q></q>) y solamente posee el atributo cite.

Interfaz HTMLPreElement


Representa texto preformateado (<pre></pre>) y solamente posee el atributo width.

Interfaz HTMLBREElement


Representa un salto de línea (<br />) y solamente posee el atributo clear.

Interfaz HTMLBaseFontElement (DEPRECATED HTML 4.0)


Representa la base fuente para el documento (<basefont />).

Atributoscolor, face, size

Interfaz HTMLFontElement (DEPRECATED HTML 4.0)


Representa un cambio de fuente local (<font /><font />).

Atributoscolor, face, size

Interfaz HTMLHRElement


Crea una línea/regla horizontal (<hr />).

Atributosalign, noShade, size, width

Interfaz HTMLModElement


Notifica que una parte del documento se ha modificado. Esta interfaz está conformada por los elementos INS y DEL.

Atributoscite, dateTime

Interfaz HTMLAnchorElement


Representa un enlace (<a><a />).

AtributosaccessKey, charset, coords, href, hreflang, name, rel, rev, shape, tabIndex, target, type
Métodosblur, focus

Interfaz HTMLImageElement


Representa una imagen embebida (<img />).

AtributoslowSrc, name, align, alt, border, height, hspace, isMap, longDesc, src, useMap, vspace, width

Interfaz HTMLObjectElement


Representa un objeto genérico embebido en el documento (<object><object />).

Atributosform, code, align, archive, border, codeBase, codeType, data, declare, height, hspace, name, standby, tabIndex, type, useMap, vspace, width

Interfaz HTMLParamElement


Representa los parámetros definidos para los elementos de tipo OBJECT (<param />).

Atributosname, type, value, valueType

Interfaz HTMLAppletElement (DEPRECATED HTML 4.0)


Representa un Applet Java embebido (<applet><applet />).

Atributosalign, alt, archive, code, codeBase, height, hspace, name, object, vspace, width

Interfaz HTMLMapElement


Representa un mapa de magen del lado cliente (<map><map />).

Atributosareas, name

Interfaz HTMLAreaElement


Representa un área en un mapa de imagen (<area />).

AtributosaccessKey, alt, coords, href, noHref, shape, tabIndex, target

Interfaz HTMLScriptElement


Represente sentencias de guión (<script><script />).

Atributostext, htmlFor, event, charset, defer, src, type

Interfaz HTMLTableElement


Representa una tabla con información tabular en el documento.

Atributos
caption, tHead, tFoot, rows, tBodies, align, bgcolor, border, cellPading, cellSpacing, frame, rules, summary, width 
Métodos
createTHead, deleteTHead, createTFoot, deleteTFoot createCaption, deleteCaption, insertRow, deleteRow

Interfaz HTMLTableCaptionElement


Representa el título de la tabla (<caption><caption />) y solamente posee el atributo align.

Interfaz HTMLTableColElement


Reagrupa los elementos con COL y COLGROUP (<col />).

Atributosalign, ch, chOff, span, vAlign, width

Interfaz HTMLTableSectionElement


Conforma el el encabezado, cuerpo y pie de una tabla con los elementos THEAD, TBODY, y TFOOT.

Atributosalign, ch, chOff, vAlign,rows 
MétodosinsertRow, deleteRow 

Interfaz HTMLTableRowElement


Representa una fila en la tabla (<tr /><tr>).

AtributosrowIndex, sectionRowIndex, cells, align, bgColor, ch, chOff, vAlign
MétodosinsertCell, deleteCell

Interfaz HTMLTableCellElement


Esta interfaz es utilizada para representar tanto los elementos TH como los TD.

AtributoscellIndex, abbr, align, axis, bgColor, ch, chOff, colSpan, headers, height, noWrap, rowSpan, scope, vAlign, width 

Interfaz HTMLFrameSetElement


Crea una grilla de marcos (<frameset /><frameset>).

Atributoscols, rows

Interfaz HTMLFrameElement


Crea un marco en el documento (<frame />).

AtributosframeBorder, longDesc, marginHeight, marginWidth, name, noResize, scrolling, src

Interface HTMLIFrameElement


Representa una sub-ventana en línea dentro del documento (<iframe /><iframe>).

Atributosalign, frameBorder, height, longDesc, marginHeight, marginWidth, name, scrolling, src, width


De seguro el lector ya habrá visto antes la mayoría de las anteriores interfaces en cursos básicos de HTML. El DOM HTML Leven 1 define formalmente los elementos HTML derivándolos de interfaces adecuadas para su posterior tratamiento. En resumen, podemos decir que cualquier introducción o curso intermedio de HTML hará referencia a las interfaces vistas anteriormente de forma mucho más transparente y sencilla para el programador, sin tanta formalidad y utilizando métodos empíricos más que teóricos. De cualquier forma, un programador que desee especializarse en el diseño web deberá pasar por algún momento de su vida por este interesante tema.

En una próxima entrega, veremos ejemplos prácticos de cómo podemos utilizar las interfaces más importantes vistas en este post. Hasta la próxima!.


Referencias

- Document Object Model (HTML) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 22:48, June 5, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html

lunes, 9 de junio de 2014

DOM Core Level 1

El Document Object Model (DOM) Core Level 1 define un conjunto de objetos e interfaces necesarias para el acceso y manipulación de los objetos del documento el cual es representado como una jerarquía de objetos Nodo (Node objects) de distintos tipos. Algunos de estos Nodos pueden contener otros nodos de uno o más tipos formando una jerarquía completa para el documento. Los tipos de nodos y la definición de que hijos pueden contener cada uno de ellos se describe a continuación:


Nodo Tipos de nodos que puede contener
Document Element (máximo uno), ProcessingInstruction, Comment, DocumentType
DocumentFragment Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
DocumentType Ninguno
EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Element Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference
Attr Text, EntityReference
ProcessingInstruction Ninguno
Comment Ninguno
Text Ninguno
CDATASection Ninguno
Entity Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference
Notation Ninguno

La mayoría de las API's definidas en la especificación son interfaces en lugar de clases, esto significa que en una implementación real solo es encesario exponer los métodos con los nombres definidos y la operación especificada. Lo anterior es totalmente transparente para el programador, así que vamos a empezar a describir generalmente cada una de las interfaces, anotando sus atributos y métodos.

Interfaz Document


La interfaz document representa el documento HTML o XML completo. El document es la raíz del documento dese la cual se puede acceder a todos los demás datos del mismo.

Atributos doctype, implementation, documentElement
Métodos createElement(tagName), createDocumentFragment(), createTextNode(data), createComment(data), createCDATASection(data), createProcessingInstruction(target, data), createAttribute(name), createEntityReference(name), getElementsByTagName(tagname)

Interfaz DocumentFragment


El DocumentFragment representa un objeto mínimo de un documento. Es generalmente utilizado para la manipulación de partes del árbol del documento, el cual no debe estar necesariamente bien formado. Un DocumentFragment puede ser insertado en el documento o en otros nodos para seguir siendo manipulado en el árbol DOM. Esta interfaz actúa de intermediaria cuando se crean por ejemplo dos nodos (de la interfaz Node) y se juntan en un nodo padre (DocumentFragment) para luego ser insertado en el documento.

Interfaz Node


La interfaz Node representa el tipo de datos principal del modelo de objetos del documento (DOM). Aunque todos los nodos implementan los métodos para agregar otros nodos dentro de sí, hay que resaltar que no todos los nodos pueden tener hijos, por ejemplo el Text o Comment. Si se intenta agregar un nodo hijo en uno nodo que no pueda tenerlo se lanzará una excepción de la interfaz DOMException.


ConstantesNombreTipo de nodo
ELEMENT_NODE
ATTRIBUTE_NODE
TEXT_NODE
CDATA_SECTION_NODE
ENTITY_REFERENCE_NODE
ENTITY_NODE
PROCESSING_INSTRUCTION_NODE
COMMENT_NODE
DOCUMENT_NODE
DOCUMENT_TYPE_NODE
DOCUMENT_FRAGMENT_NODE
NOTATION_NODE
Element
Attr
Text
CDATASection
EntityReference
Entity
ProcessingInstruction
Comment
Document
DocumentType
DocumentFragment
Notation
AtributosnodeName, nodeValue, nodeType, parentNode, childNodes, firstChild, lastChild, previousSibling, nextSibling, attributes, owenerDocument
MétodosinsertBefore(newChild, refChild), replaceChild(newChild, oldChild), removeChild(oldChild), appendChild(newChild), hasChildNodes(), cloneNode(deep)

Dependiendo del tipo de nodo, los valores para los atributos nodeName, nodeValue y attributes están dados por la siguiente tabla:


Tipo de nodo nodeName nodeValue attributes
Element tagName null NameNodeMap
Attr nombre del atributo valor del atributo null
Text #text contenido del nodo null
CDATASection #cdata-section contenido del CDATA Section null
EntityReference nombre de la entidad referenciada null null
Entity nombre de la entidad null null
ProcessingInstruction target contenido sin destino null
Comment #comment contenido del comentario null
Document #document null null
DocumentType nombre del tipo de documento null null
DocumentFragment #document-fragment null null
Notation nombre de la notación null null

Interfaz NodeList


La interfaz NodeList proporciona una colección ordenada de nodos.

Atributoslength
Métodositem(index)

Interfaz NamedNodeMap


Esta interfaz es utilizada para representar colecciones de nodos que han sido obtenidos mediante su nombre.

Atributoslength
MétodosgetNamedItem(name), setNamedItem(arg), removeNamedItem(name), item(index)

Interfaz CharacterData


Esta interfaz es una extensión de la interfaz Node que agrega un conjunto de atributos y métodos necesarios para acceder a los datos de caracteres del documento.

Atributosdata, length
MétodossubstringData(offset, count), appendData(arg), insertData(offset, arg), deleteData(offset, count), replaceData(offset, count, arg)

Interfaz Attr


Esta interfaz representa un atributo para un objeto Element. Generalmente los valores posibles son definidos en la definición del tipo de documento.

Atributosname, specified, value

Interfaz Element


La interfaz Element representa la mayoría de cada uno de los objetos nodo que encontramos en el documento. Element hereda de la interfaz Node, por lo que podremos utilizar sus métodos también.

AtributostagName
Métodos
getAttribute(name), setAttribute(name, value), removeAttribute(name), getAttributeNode(name), setAttributeNode(newAttr), removeAttributeNode(oldAttr), getElementsByTagName(name), normalize()

Interfaz Text


La interfaz Text representa como su nombre lo indica contenido textual (también llamado character data en XML) de un Element o Attr.

MétodossplitText(offset)

Interfaz Comment


Esta interfaz representa contenido comentado en el código XML o HTML, denotado entre las etiquetas <!-- y -->


Aquellos que ya han utilizado el lenguaje de programación JavaScript y ya están familiarizados con el paradigma de programación orientado a objetos verán las anteriores interfaces muy familiares y de seguro habrán utilizado más del 40% de sus métodos y atributos. Para aquellos que aún se sienten desorientados no debe haber preocupación, la programación orientada a objetos es bastante compleja y se aprende en la mayoría de los casos con la práctica, es por esto que en una próxima entrega utilizaremos el lenguaje JavaScript para manipular el DOM de nuestros documentos y ver cómo es de fácil utilizar las anteriores interfaces para desarrollar aplicaciones básicas.

Aunque hemos visto la mayoría de interfaces, aún quedan las interfaces extendidas que en algunos casos nos pueden servir de mucho. A modo de investigación queda por la cuenta del lector leer las referencias para adentrarse más en este maravilloso tema. Hasta la próxima!.


Referencias

- Document Object Model (Core) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 14:26, June 6, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html

jueves, 5 de junio de 2014

Introducción al DOM Level 1

El DOM (Document Object model), o modelo de objetos del documento es una API utilizada en el desarrollo de aplicaciones web (HTML y XML) para la manipulación dinámica de objetos. Comúnmente es utilizado por los lenguajes Java y ECMAScript (del cual se basan JavaScript y JScript) de acuerdo a la especificación OMG IDL. Para entender cómo trabaja el DOM a nivel de documentos observemos el siguiente fragmento de código HTML:

<table>
   <tbody>
      <tr>
         <td>Id</td>
         <td>Producto</td>
      <tr/>
      <tr>
         <td>0045</td>
         <td>Laptop</td>
      </tr>
   </tbody>
</table>

Cómo se puede observar, se ha definido una tabla muy sencilla en la que se ha colocado un identificador y nombre de producto. Pero más allá de ver que solamente tenemos un producto, esta tabla de dos filas y dos columnas puede ser representada en el modelo de objetos (DOM) de la siguiente forma:

Representación DOM

En el DOM, los documentos tienen una estructura lógica a modo de árbol, cada elemento puede contener otros elementos dentro de sí y anidarse cuantas veces sea necesario. En la anterior representación DOM el elemento table contiene un elemento tbody, que a su vez contiene dos elementos tr cada uno con dos elementos td y el texto dentro ellos. Para generar correctamente nuestro árbol DOM es necesario que los elementos estén correctamente anidados sin superposición tal y como se mencionó el la Introducción al lenguaje HTML.

El Document Object Model, es una representación clásica de modelado orientado a objetos, pues cada elemento de la página es en sí un objeto que contiene sus atributos y comportamiento. Como modelo de objetos, el DOM se caracteriza por:

- Las interfaces y objetos utilizados para representar y manipular el documento
- La semántica utilizada en estas interfaces y objetos (incluye comportamiento y atributos)
- Las relaciones y colaboraciones entre estas interfaces y objetos

El DOM está conformado por dos partes importantes en su especificación, la primera se denomina DOM Core y la segunda DOM HTML. El DOM Core Level 1 describe la funcionalidad necesaria para manipular la estructura del documento, elementos y atributos, en resumen, los objetos. El DOM HTML Level 1 exitiende lo anterior y describe los objetos y métodos específicos de los documentos HTML.


Referencias

- What is the Document Object Model ?. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 17:56, June 5, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/introduction.html
- Document Object Model (Core) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 22:48, June 5, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-core.html
- Document Object Model (HTML) Level 1. (1998, October 1). In World Wide Web Consortium (W3C). Retrieved 22:48, June 5, 2014, from http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/level-one-html.html

Document Object Model (DOM)

El DOM (document object model) es una plataforma y lenguaje neutral de interfaz (API) que permite el acceso dinámico y actualización de contenido, estructura y estilo en objetos HTML, XHTML y XML. Mediante el  DOM se hace posible la modificación de objetos ya existentes en el documento, la creación de nuevos objetos, y la eliminación de los mismos. Es muy utilizado en las RIA (Rich Internet Applications) y hoy en día es un componente fundamental en el desarrollo de aplicaciones web.

Las descripción del lenguaje, así como sus listas de correo e información en general se pueden encontrar en la página oficial del W3C (World Wide Web Consortium) en el siguiente enlace:



W3C DOM






Las especificaciones del lenguaje están en los Technical Reports de la misma página.



Document Object Model (DOM) Specifications




Actualmente existen tres documentos oficiales de especificación y uno en desarrollo. Los tres primeros documentos se denominan Niveles DOM y son respectivamente DOM Level 1, DOM Level 2 y DOM Level 3. La especificación en desarrollo se denomina DOM4 y es una vista rápida de lo que es el DOM Living Standard de la WHATWG. Aquí ocurre algo similar a lo que ocurre con HTML5 y HTML5 Living Standard, con dos especificaciones para la misma tecnología. (¿Por qué dos especificaciones ? Míralo Aquí).


Referencias

- Document Object Model. (2014, May 30). In Wikipedia, The Free Encyclopedia. Retrieved 21:22, June 5, 2014, from http://en.wikipedia.org/w/index.php?title=Document_Object_Model&oldid=610811714
- W3C Document Object Model. (2009, June 1). In World Wide Web Consortium (W3C). Retrieved 16:24, June 5, 2014, from http://www.w3.org/DOM/