Professional Documents
Culture Documents
III
IV
PHP y MySQL
Tecnologas para el desarrollo de aplicaciones web
VI
A Valeria
VII
VIII
ndice
Agradecimientos .............................................................................................
VII
Prefacio
.............................................................................................
XVII
1. INTERNET Y LA PROGRAMACIN DE ORDENADORES ............. 1.1. INTRODUCCIN ............................................................................ 1.2. INTERNET ....................................................................................... 1.2.1. El servicio web ..................................................................... 1.2.2. Relacin cliente/servidor ...................................................... 1.2.3. Proceso de creacin y publicacin de pginas web ............. 1.2.4. Dinamismo e interactividad en las pginas web .................. 1.3. PROGRAMACIN DE ORDENADORES ..................................... 1.3.1. Tipos de lenguajes de programacin .................................... 1.4. PROGRAMACIN EN INTERNET ............................................... 1.4.1. Programacin del lado del cliente vs programacin del lado del servidor ................................................................... 1.4.2. Tecnologas de programacin del lado del cliente ................ 1.4.3. Tecnologas de programacin del lado del servidor ............. 2. OPEN SOURCE Y SOFTWARE LIBRE .................................................. 2.1. INTRODUCCIN ............................................................................ 2.1.1 Qu es open source? ..........................................................
1 1 3 4 5 7 8 9 11 15 16 18 20 25 25 27
IX
2.2.
2.3. 2.4.
2.5.
2.6.
BREVE RESEA CRONOLGICA ............................................... 2.2.1. Primera etapa, antecedentes ................................................. 2.2.2. Segunda etapa, desarrollo .................................................... 2.2.3. Tercera etapa, expansin ..................................................... LA CORRIENTE OPEN SOURCE Y SOFTWARE LIBRE, FILOSOFA Y CARACTERSTICAS ............................................. LICENCIAS ...................................................................................... 2.4.1. Licencias propietarias .......................................................... 2.4.2. Licencias libres .................................................................... 2.4.3. Licencias semilibres ............................................................. SITUACIN ACTUA DEL SOFTWARE OPEN SOURCE ............ 2.5.1. Software open source, aplicaciones para todo .................... 2.5.2. Comunidades open source ................................................... 2.5.3. Usuarios de software open source ....................................... VENTAJAS, INCONVENIENTES Y PERSPECTIVAS DE FUTURO ........................................................................................... 2.6.1. Ventajas ................................................................................ 2.6.2. Inconvenientes ...................................................................... 2.6.3 Perspectivas de futuro ..........................................................
28 28 28 29 31 35 36 37 38 40 40 47 48 51 51 52 52
3. CREACIN DE PGINAS WEB MEDIANTE EL LENGUAJE HTML ................................................................................. 3.1. INTRODUCCIN ............................................................................ 3.1.1. Definicin de HTML ........................................................... 3.2. HISTORIA DE HTML ..................................................................... 3.3. SOFTWARE NECESARIO PARA TRABAJAR CON HTML ....... 3.3.1. Navegadores......................................................................... 3.3.2. Editores ................................................................................ 3.4. ESTRUCTURA DE UNA PGINA WEB ....................................... 3.4.1. Complementos a la estructura bsica: metatags .................. 3.5. CARACTERSTICAS GENERALES DEL LENGUAJE Y SINTAXIS DE SUS COMANDOS .............................................. 3.5.1. Caracteres especiales ........................................................... 3.6. COMANDOS BSICOS .................................................................. 3.6.1. Comandos de cabeceras para definicin de ttulos y secciones ........................................................................... 3.6.2. Comandos de cambio de estilo de texto ............................... 3.6.3. Bloques de texto y prrafos ................................................. 3.6.4. Comandos para la generacin de listas ................................
55 55 57 58 60 60 60 62 62 66 67 68 68 68 69 71
NDICE
3.7.
3.8.
3.6.5. Creacin de Tablas ............................................................... 3.6.6. Insercin de imgenes .......................................................... 3.6.7. Tratamiento del color ........................................................... 3.6.8. Enlaces o hipervnculos ....................................................... MARCOS O FRAMES ...................................................................... 3.7.1. Construccin de pginas con marcos ................................... 3.7.2. Enlaces en pginas con marcos ............................................ FORMULARIOS ..............................................................................
76 79 81 82 85 85 87 90 99 99 100 102 108 111 111 112 113 113 114 119 120 124 137 137 139 141 143 144 145 146 147 153
4. INTRODUCCIN A PHP .......................................................................... 4.1. EL LENGUAJE PHP ........................................................................ 4.2. ORGENES Y EVOLUCIN DEL LENGUAJE ............................. 4.3. PROGRAMACIN EN PHP: PRIMEROS EJEMPLOS ................ 4.4. FORMAS DE INCRUSTAR EL CDIGO PHP EN LOS DOCUMENTOS HTML ................................................... 4.5. ESCRITURA DEL CDIGO FUENTE PHP .................................. 4.5.1. Aspectos sobre la sintaxis del lenguaje ................................ 4.5.2. Insercin de comentarios en el cdigo ................................. 4.6. ELEMENTOS BSICOS DEL LENGUAJE ................................... 4.6.1. Tipos de datos ...................................................................... 4.6.2. Variables .............................................................................. 4.6.3. Constantes ............................................................................ 4.6.4. Cadenas de caracteres y variables ....................................... 4.6.5. Operadores ........................................................................... 5. PHP Y LOS FORMULARIOS DE HTML ............................................... 5.1. FORMULARIOS DE HTML ........................................................... 5.2. ENVO DE DATOS A PROGRAMAS PHP .................................... 5.3. MTODOS DE ACCESO A LAS VARIABLES DEL FORMULARIO........................................................................ 5.4. MTODOS DE TRANSFERENCIA DE DATOS EN FORMULARIOS........................................................................ 5.4.1. Mtodo GET ........................................................................ 5.4.2. Mtodo POST ...................................................................... 5.4.3. Diferencias entre ambos mtodos ........................................ 5.5. TRANSFERENCIA DE DATOS AL SCRIPT DESDE EL URL ............................................................................................. 5.6. TRATAMIENTO DE FORMULARIOS CON LISTAS DE SELECCIN MLTIPLE ..........................................................
XI
6. SENTENCIAS DE CONTROL ................................................................. 6.1. INTRODUCCIN ............................................................................ 6.2. ESTRUCTURAS CONDICIONALES ............................................ 6.2.1. Sentencia IF ......................................................................... 6.2.2. La clusula ELSE ................................................................ 6.2.3. Sentencia If ... ELSEIF ... ELSE ......................................... 6.2.4. Sintaxis alternativa de las sentencias IF .............................. 6.2.5. Estructuras condicionales SWITCH ... CASE .................... 6.3. ESTRUCTURAS ITERATIVAS ...................................................... 6.3.1. Sentencia WHILE ................................................................ 6.3.2. Sentencia DO ... WHILE ..................................................... 6.3.3. Sentencia FOR ..................................................................... 6.3.4. Sentencia FOREACH .......................................................... 6.3.5. Sentencias BREAK y CONTINUE ..................................... 7. DEFINICIN DE FUNCIONES ............................................................... 7.1. CMO SE DEFINEN FUNCIONES EN PHP? ............................. 7.2. LLAMADA A LAS FUNCIONES ................................................... 7.3. ARGUMENTOS DE UNA FUNCIN ............................................ 7.3.1. Argumentos opcionales ........................................................ 7.3.2. Argumentos con valores por defecto .................................... 7.3.3. Listas de argumentos de longitud variable ........................... 7.3.4. Paso de argumentos por valor o por referencia ................... 7.4. MBITO DE LAS VARIABLES ..................................................... 7.4.1. Variables locales .................................................................. 7.4.2. Variables globales ................................................................ 7.4.3. Variables estticas ................................................................ 7.5. CLUSULAS INCLUDE Y REQUIRE ........................................... 7.6. FUNCIONES VARIABLES ............................................................. 8. ARRAYS ............................................................................................. 8.1. CONCEPTOS FUNDAMENTALES ............................................... 8.1.1. Construccin de arrays ........................................................ 8.1.2. Arrays multidimensionales ................................................... 8.2. RECORRIDO DE TODOS LOS ELEMENTOS DE UN ARRAY ............................................................................................. 8.3. FUNCIONES DE MANIPULACIN DE ARRAYS ....................... 8.3.1. Transformacin de los ndices ............................................. 8.3.2. Subdivisin ..........................................................................
157 157 158 158 162 165 167 169 175 175 176 179 187 188 193 193 196 199 199 200 201 203 206 206 207 208 209 211 215 215 216 218 219 225 225 226
XII
NDICE
Contabilizacin de elementos ............................................... Bsqueda de datos ............................................................... Generacin de arrays ........................................................... Prolongacin o truncamiento de un array ............................ Combinacin de arrays ........................................................ Aplicacin de funciones ....................................................... Ordenacin de los elementos de un array .............................
227 228 232 237 238 240 244 249 249 250 250 250 253 254 256 256 258 259 259 267 269 269 272 275 277 278 281 283 285 285 286 288 291 294
9. FUNCIONES PREDEFINIDAS ................................................................ 9.1. INTRODUCCIN ............................................................................ 9.2. FUNCIONES DE MANIPULACIN DE CADENAS DE CARACTERES .......................................................................... 9.2.1. Reconocimiento de caracteres .............................................. 9.2.2. Conversiones entre cadenas y arrays ................................... 9.2.3. Prolongacin de una cadena................................................. 9.2.4. Modificacin de una cadena ................................................ 9.2.5. Comparacin de cadenas ..................................................... 9.2.6. Bsqueda de datos ............................................................... 9.2.7. Subdivisin de cadenas ........................................................ 9.2.8. Longitud de una cadena ....................................................... 9.3. FUNCIONES DE FECHA Y HORA ................................................ 9.4. FUNCIONES MATEMTICAS ...................................................... 10. PROGRAMACIN ORIENTADA A OBJETOS ................................... 10.1. INTRODUCCIN ............................................................................ 10.2. DEFINICIN DE UNA CLASE ...................................................... 10.2.1. Constructores ....................................................................... 10.3. CONSTRUCCIN DE OBJETOS ................................................... 10.3.1. Acceso a las variables y mtodos del objeto ........................ 10.4. HERENCIA ...................................................................................... 10.4.1. Definicin de subclases ........................................................ 11. COOKIES ............................................................................................. 11.1. QU SON LAS COOKIES? ........................................................... 11.2. GENERACIN DE COOKIES ........................................................ 11.3. RECUPERACIN DE LOS VALORES DE LAS COOKIES ........ 11.4. COOKIES DE SESIN Y COOKIES PERMANENTES ............... 11.5. VISIBILIDAD DE LAS COOKIES EN EL SITIO WEB ................
XIII
12. MANEJO DE FICHEROS ........................................................................ 12.1. MECANISMOS DE ALMACENAMIENTO DE DATOS .............. 12.2. OPERACIONES DE MANIPULACIN DE FICHEROS .............. 12.2.1. Apertura y cierre de ficheros ............................................... 12.2.2. Operaciones de lectura de datos ........................................... 12.2.3. Lectura con formato ............................................................. 12.2.4. Operaciones de escritura de datos ........................................ 12.2.5. Otras funciones de manipulacin de ficheros ...................... 12.3. ENVO DE FICHEROS A TRAVS DE FORMULARIOS HTML ... 13. BASES DE DATOS RELACIONALES Y EL LENGUAJE SQL ............ 13.1. INTRODUCCIN ............................................................................ 13.2. DISEO DE BASES DE DATOS .................................................... 13.2.1. Modelo relacional ................................................................ 13.2.2. Diagramas entidad/relacin ................................................ 13.3. UN EJEMPLO ILUSTRATIVO: CINEM@S .................................. 13.4. EL LENGUAJE SQL ........................................................................ 13.4.1. Introduccin ......................................................................... 13.4.2. Sentencias de definicin de datos ......................................... 13.4.3. La sentencia INSERT .......................................................... 13.4.4. La sentencia DELETE ......................................................... 13.4.5. La sentencia UPDATE ......................................................... 13.4.6. La sentencia SELECT ......................................................... 14. EL SISTEMA GESTOR DE BASES DE DATOS MYSQL .................. 14.1. QU ES MYSQL? .......................................................................... 14.2. UTILIZACIN DE MYSQL ............................................................ 14.2.1. Arranque del servidor MySQL ............................................ 14.2.2. Inicio del monitor de MySQL .............................................. 14.3. EJECUCIN DE SENTENCIAS SQL ............................................ 14.4. GESTIN DE USUARIOS .............................................................. 14.4.1. La tabla USER ..................................................................... 14.4.2. Eliminacin de usuarios ....................................................... 14.4.3. Establecimiento de contraseas para los usuarios ............... 14.4.4. Creacin de nuevos usuarios................................................ 14.5. BASES DE DATOS Y TABLAS EN MYSQL ................................. 14.6. TIPOS DE DATOS ........................................................................... 14.6.1. Tipos Numricos ..................................................................
295 295 296 296 298 300 303 306 307 309 309 310 310 311 311 316 316 317 324 328 329 330 339 339 340 340 342 344 346 346 349 350 352 354 356 356
XIV
NDICE
14.7.
14.8.
14.6.2. Tipos cadena de caracteres .................................................. 14.6.3. Tipos enum y set .................................................................. 14.6.4. Tipos fecha/hora .................................................................. INTEGRIDAD REFERENCIAL EN MYSQL ................................ 14.7.1. Definicin de claves forneas .............................................. 14.7.2. Insercin de registros en tablas relacionadas ....................... 14.7.3. Eliminacin de registros en tablas relacionadas .................. 14.7.4. Actualizacin de registros en tablas relacionadas................ IMPORTACIN Y EXPORTACIN de datos ................................. 14.8.1. Importacin de datos ............................................................ 14.8.2. Exportacin de datos............................................................
359 361 362 364 365 372 373 379 381 381 385
15. PHPMYADMIN: ADMINISTRACIN DE BASES DE DATOS MYSQL DESDE LA WEB ......................................................... 15.1. INTRODUCCIN ............................................................................ 15.2. ENTRADA A PHPMYADMIN ........................................................ 15.3. GESTIN DE BASES DE DATOS ................................................. 15.3.1. Consulta de las bases de datos ............................................. 15.3.2. Manipulacin de las tablas .................................................. 15.3.3. Estructura de las tablas ........................................................ 15.4. CREACIN DE NUEVAS BASES DE DATOS ............................. 15.4.1. Creacin de tablas ................................................................ 15.5. OPERACIONES DE IMPORTACIN Y EXPORTACIN DE DATOS ....................................................................................... 15.5.1. Importacin de datos externos en las tablas ........................ 15.5.2. Exportacin de datos............................................................ 15.6. GESTIN DE USUARIOS .............................................................. 15.6.1. Usuarios y privilegios .......................................................... 15.6.2. Creacin de usuarios ............................................................ 16. CONECTIVIDAD A BASES DE DATOS MYSQL DESDE PHP ........ 16.1. INTRODUCCIN ............................................................................ 16.2. CONEXIN CON MYSQL DESDE PHP ....................................... 16.2.1. Apertura de la conexin ....................................................... 16.2.2. Cierre de la conexin ........................................................... 16.3. SELECCIN DE LA BASE DE DATOS ........................................ 16.4. EJECUCIN DE SENTENCIAS SQL SOBRE LA BASE DE DATOS SELECCIONADA ........................................................
389 389 390 392 392 393 398 400 401 403 403 405 407 407 408 413 413 414 414 415 416 417
XV
16.5.
16.4.1. Insercin de datos a travs de formularios........................... 419 16.4.2. Recuperacin de los resultados de las consultas .................. 424 OTRAS FUNCIONES DE MANIPULACIN DE DATOS ........... 450 453 453 454 455 458 460 465 465 466 468 468 470 471 471 473 474 475 476 477 478 479 480 480 484 486 488 490 493 495
17. IMPLEMENTACIN DE FOROS .......................................................... 17.1. INTRODUCCIN ............................................................................ 17.2. ESTRUCTURA DE LA TABLA DE LA BASE DE DATOS .......... 17.3. GENERACIN DE LA PGINA PRINCIPAL DE LOS FOROS .... 17.4. CONSULTA DE UN MENSAJE CON SUS RESPUESTAS .......... 17.5. INSERCIN DE NUEVOS MENSAJES ........................................ 18. SOLUCIONES OPEN SOURCE BASADAS EN PHP Y MYSQL ....... 18.1. INTRODUCCIN ............................................................................ 18.2. GESTORES DE CONTENIDO ....................................................... 18.2.1. Funcionamiento .................................................................... 18.2.2. Caractersticas ..................................................................... 18.2.3. Ventajas e inconvenientes ..................................................... 18.3. GESTORES DE CONTENIDO BASADOS EN PHP Y MYSQL ......................................................................................... 18.3.1. PHP-NUKE ......................................................................... 18.3.2. POSTNUKE ........................................................................ 18.3.3. MAMBO SERVER.............................................................. 18.3.4. PHPWEBSITE .................................................................... 18.3.5. PHP-WCMS ........................................................................ 18.3.6. XOOPS ................................................................................ 18.3.7. DRUPAL .............................................................................. 18.3.8. SITEFRAME ....................................................................... 18.4. OTRAS SOLUCIONES OPEN SOURCE ....................................... 18.4.1. Weblogs ................................................................................ 18.4.2. Sistemas de foros ................................................................. 18.4.3. Plataformas de e-learning ................................................... 18.4.4. Entornos de comercio electrnico ........................................ 18.4.5. Sistemas de atencin al cliente ............................................. 18.4.6. Herramientas de gestin de proyectos .................................. 18.4.7. Otras herramientas ............................................................... ndice alfabtico
............................................................................................. 497
XVI
Prefacio
El presente libro aborda una temtica de plena actualidad y de gran auge en los ltimos aos, como es el uso de soluciones open source para el desarrollo de aplicaciones web. El uso conjunto del lenguaje PHP y el sistema gestor de bases de datos MySQL permite la construccin, de una manera sencilla y eficiente, de verdaderos sitios web dinmicos. En los ltimos tiempos se est observando cmo son cada vez ms las empresas que optan por estas tecnologas para el desarrollo de sus portales; incluso, en el caso de particulares, algunos de los servicios gratuitos de alojamiento de pginas web ofrecen la posibilidad de usar PHP en conjuncin con MySQL. Los autores de este libro somos profesores de la Universidad de Cantabria, con experiencia en la imparticin de cursos sobre tecnologas de programacin, desarrollo de aplicaciones web, informtica de gestin y sistemas de informacin. Fruto de nuestra dilatada experiencia docente de estos aos surge el presente libro. Parte del material que incluye ha sido usado exitosamente para la imparticin de varios cursos de verano y un mdulo de desarrollo de aplicaciones web en el Mster en e-Business que organiza la Universidad de Cantabria. Nuestra intencin ha sido escribir un libro que pueda ser seguido por personas con conocimientos muy bsicos de lenguajes de programacin y con inquietudes por el desarrollo de sitios web. En el campo de la informtica, especialmente, existe un gran nmero de personas autodidactas y con un carcter claramente vocacional; este tipo de libros va dirigido a ellos.
XVII
Es por ello que se ha buscado un enfoque eminentemente prctico, ilustrando los diferentes conceptos con un gran nmero de ejemplos. De hecho, se pretende que a lo largo de los diferentes captulos se vaya describiendo paso a paso todo el proceso de desarrollo de un sitio web verdaderamente dinmico y profesional. Para ello hemos optado por mostrar el desarrollo del sitio web de una empresa ficticia; en concreto consideraremos el sitio web de un multicine que hemos bautizado como Cinem@s y que ofrecer la posibilidad de consultar carteleras dinmicas (mostrando siempre la informacin actualizada), consultar disponibilidades de localidades, registrarse como cliente,... El libro comienza con una rpida presentacin de las caractersticas generales de Internet y las diferentes tecnologas de programacin que pueden ser usadas. Para pasar posteriormente a analizar la filosofa y evolucin de la conocida como corriente open source. El tercer captulo tiene por objeto presentar los comandos bsicos del lenguaje HTML que permitan disear unas sencillas pginas web en torno a las que construir posteriormente la aplicacin web. Tras estos tres captulos iniciales, los siguientes se dedican a la presentacin del lenguaje PHP, su interaccin con los formularios de HTML, as como a presentar las estructuras bsicas presentes en todo lenguaje de programacin (sentencias de control, funciones y estructuras de datos). Se ha dedicado tambin un captulo a una introduccin muy bsica a la programacin orientada a objetos; as como sendos captulos dedicados a manejo de cookies y ficheros. La segunda parte del libro se centra en el uso del sistema MySQL, para lo que se ha considerado oportuno introducir un captulo previo de estudio del modelo relacional de bases de datos y el lenguaje SQL. Tras analizar las caractersticas de MySQL se muestra cmo es posible la administracin remota de las bases de datos mediante una aplicacin desarrollada en PHP. Una vez analizada esta aplicacin de administracin, los siguientes captulos muestran la sencillez de los procesos de conectividad a MySQL desde PHP. El libro finaliza con un captulo en el que se presentan muy brevemente algunas de las aplicaciones open source ms conocidas en Internet y que se basan en las tecnologas explicadas en el libro. Llegado a este punto se espera que el lector pueda no solo hacer uso de esas aplicaciones, sino tambin modificarlas y adaptarlas a sus necesidades particulares, aprovechando de esta forma la gran ventaja de las aplicaciones de cdigo abierto. Finalmente, quisiramos mostrar nuestro agradecimiento a los Departamentos de Matemtica Aplicada y Ciencias de la Computacin y de Administracin de Empresas de la Universidad de Cantabria por sus facilidades y apoyo para escribir
XVIII
PREFACIO
este libro. Agradecimiento que hacemos extensivo a todos nuestros alumnos durante estos aos; ellos nos han servido de incentivo para embarcarnos en este proyecto editorial. ngel Cobo Patricia Gmez Daniel Prez Roco Rocha Santander, febrero de 2005
XIX
ALERTA!
XX
Por supuesto, no han sido las empresas las nicas beneficiadas con el desarrollo de Internet y del servicio web. Las instituciones pblicas tienen tambin nuevas formas de ofrecer servicios a los ciudadanos (e-governement), los usuarios individuales tienen nuevas formas de adquirir productos (e-commerce) o nuevas formas de formarse e instruirse (e-learning),... Para poder realmente obtener todos estos beneficios ha sido preciso desarrollar nuevas tecnologas que consigan hacer del servicio web un servicio dinmico e interactivo. En sus orgenes el servicio World Wide Web fue concebido como un sistema flexible de compartir informacin multimedia entre equipos heterogneos a travs de redes informticas. Para ello fue desarrollado un sistema de generacin de documentos a travs de un lenguaje estndar: el lenguaje HTML. Los documentos generados de esta forma podan incorporar texto y elementos grficos, pero eran documentos totalmente estticos. Posteriormente fueron desarrollndose diferentes tecnologas que, trabajando en conjuncin con el lenguaje HTML, pudieran paliar estas carencias. As por ejemplo, Netscape incorpor en la versin 2.0 de su clebre navegador un intrprete de un nuevo lenguaje que poda ser intercalado entre el cdigo HTML y que permita realizar operaciones no disponibles en un lenguaje puramente descriptivo como es HTML; dicho lenguaje, llamado en sus orgenes LiveScript, adquiri posteriormente el nombre de JavaScript. Unos aos ms tarde la empresa Sun Microsystems lanz un revolucionario lenguaje de programacin, el lenguaje Java, que permita incrustar en las pginas web programas con las prestaciones propias de cualquier lenguaje de programacin. Microsoft por su parte tambin se uni a esta evolucin primero con sus lenguajes de script: VBScript basado en Visual Basic y JScript, versin Microsoft de JavaScript, y, ms recientemente, con las tecnologas .NET. Igualmente se han venido desarrollando diferentes extensiones del propio lenguaje HTML con objeto de aumentar su dinamismo; en este contexto se podra citar el HTML dinmico (DHTML) y el lenguaje XML. Internet ha jugado un papel esencial en la expansin de la denominada corriente open source. Los defensores de esta corriente defienden el desarrollo de aplicaciones informticas y su distribucin libre, de forma gratuita; pero no solo eso sino que tambin ponen a disposicin de los usuarios el cdigo fuente de los programas desarrollados. Se trata, en definitiva, de que los usuarios puedan utilizar los programas sin ninguna restriccin y puedan conocer si lo desean su funcionamiento interno. El ejemplo ms emblemtico de esta corriente open source lo constituye el sistema operativo Linux. En los ltimos aos est corriente se ha desarrollado enormemente y ya se pueden obtener en la propia red Internet todo tipo de programas basados en esta filosofa: servidores y navegadores web, entornos de programacin, editores, herramientas ofimticas,... Grandes empresas como IBM o Yahoo, por ejemplo, han apostado muy fuerte por las soluciones open
source y, sin lugar a dudas, el impacto de este tipo de soluciones parece destinado a incrementarse en el futuro debido a sus altas prestaciones y calidad, su menor coste y su alta difusin. Las dos herramientas que se analizarn en este libro surgen de esta corriente. Por un lado el lenguaje PHP, que naci como un lenguaje para realizar un seguimiento de visitas de pginas personales, se ha convertido en uno de los referentes actuales en los denominados lenguajes de script. Por otro lado, el sistema gestor de bases de datos MySQL se presenta como una herramienta con altas prestaciones para el desarrollo de bases de datos, especialmente apropiado para ser usada por pequeas organizaciones o empresas. La utilizacin conjunta de ambos: PHP y MySQL permite llegar a desarrollar interesantes aplicaciones web que puedan cubrir las necesidades de pequeas empresas que quieran fortalecer su presencia en Internet o usuarios individuales que quieran generar verdaderas pginas dinmicas. Como complemento a ambas herramientas, en Internet se pueden encontrar igualmente gestores de contenidos, aplicaciones basadas en PHP que permiten a los usuarios finales aprovechar las ventajas de estas tecnologas sin necesidad de tener grandes conocimientos sobre su funcionamiento y sintaxis de los lenguajes. En el presente libro se darn referencias de algunas de estas herramientas de gestin de contenidos y otras herramientas para la creacin de aplicaciones web que han sido desarrolladas igualmente haciendo uso de las dos tecnologas que se analizarn en este libro: el lenguaje PHP y el gestor de bases de datos MySQL. El Captulo 18 presentar algunas de estas herramientas.
1.2. INTERNET
El objeto de esta seccin no es tanto definir lo que es Internet como el poner de manifiesto algunas de las caractersticas ms destacadas de la misma que influyen decisivamente en las tecnologas de desarrollo vinculadas al servicio web, como es el caso del lenguaje PHP. Se asume que cualquier lector interesado en este libro es usuario de Internet y conoce los diferentes servicios que la red ofrece, posiblemente tambin su inters en el desarrollo de aplicaciones web es el que le ha impulsado a adquirir este libro. Internet (INTERconected NETwork) es una red de redes de ordenadores de todo tipo que se comunican mediante un lenguaje comn: el conocido como protocolo TCP/IP. Esa primera caracterstica de la heterogeneidad de los equipos conectados es clave para entender el funcionamiento de todos los servicios de la red y para comprender la necesidad de la portabilidad en cualquier desarrollo que se quiera hacer en el mbito de Internet. A nivel de programadores de aplicaciones web, que
es en el que se sita el presente libro, no es necesario disponer de conocimientos tcnicos sobre los protocolos de comunicacin en los que se basa Internet. Los desarrollos de aplicaciones realizados en Internet tienen tambin un campo de aplicacin en aquellas redes privadas que usan los mismos sistemas y protocolos que Internet: las denominadas Intranets. Otro de los aspectos a tener en cuenta es el carcter distribuido de la red. Ese carcter totalmente distribuido se concreta a todos los niveles: en el aspecto geogrfico no existe ningn nodo central de la red, de hecho, los orgenes de Internet se sitan en un proyecto militar del Gobierno de los Estados Unidos para crear una red que no fuera vulnerable ante el ataque a alguno de sus nodos. En el aspecto econmico, tampoco existe ningn gobierno o institucin que mantenga la red sino que son las propias subredes que la componen las encargadas de su propio mantenimiento. El carcter distribuido tambin se manifiesta en el aspecto poltico ante la ausencia de un gobierno central de la red; lo que s existen son diversas organizaciones o asociaciones que tratan de establecer diferentes estndares para el desarrollo de la red. Aunque el servicio web es actualmente el servicio ms conocido y utilizado de la red Internet, conviene recordar que no es el nico. Los tres servicios originarios de la red: correo electrnico (e-mail), transferencia de fichero (FTP) y acceso remoto (Telnet), siguen estando presentes y siguen siendo ampliamente utilizados. Pero podran citarse otros servicios, algunos muy conocidos y otros en cierta decadencia al haber absorbido el propio servicio web sus funciones: servicios de noticias (news), gopher, servicios de bsqueda de archivos (Archie), Vernica, servicios de localizacin,... En los ltimos aos tambin estn teniendo mucho auge las aplicaciones P2P.
servicio se sita en 1990, es en 1991 cuando el sistema desarrollado en el CERN se abre a Internet, apareciendo en 1992 el primer navegador web: Mosaic. El trmino hipertexto que empez a hacerse popular a partir de la aparicin de este servicio tiene, sin embargo, su definicin en un trabajo de Ted Nelson en 1965, la definicin original del trmino es: "Un cuerpo de material escrito o grfico interconectado de un modo complejo que no se puede representar convenientemente sobre el papel; puede contener anotaciones, adiciones y notas de los estudiosos que lo examinan". En una definicin ms moderna y aplicable al concepto de hipertexto en Internet, se podra decir que un hipertexto es un documento multimedia, es decir, integrando bajo una plataforma informtica todas las tecnologas de la informacin, y que incorpora relaciones estructurales que enlazan el documento con otros documentos o recursos. Algunas de las caractersticas destacadas de los hipertextos son: Almacenamiento de un gran volumen de informacin. Facilidad de acceso y consulta. Presentacin de una forma ms agradable. Uso de todas las tecnologas de la informacin. Permiten una navegacin individualizada. Estructuracin multidimensional. Multiplataforma. Dinamismo e interactividad.
Clientes: equipos que los usuarios individuales utilizan para conectarse a la red y solicitar servicios a los servidores. Durante el tiempo de conexin tienen presencia fsica en la red. Normalmente los proveedores de acceso a Internet asignan a estos equipos una direccin IP durante su conexin, pero esa direccin es variable, es decir, cambia de unas conexiones a otras (IP dinmica). Los conceptos de cliente y servidor se suelen utilizar con dos significados diferentes, en referencia al hardware el sentido es el indicado anteriormente, el servidor hace referencia al equipo remoto al que se realiza la conexin y el cliente sera el equipo local utilizado para efectuar dicha conexin. Pero tambin se utilizan esos conceptos en referencia al software: Programa servidor es el programa que debe estar ejecutndose en el equipo servidor para que este pueda ofrecer su servicio. Un documento HTML sin ms almacenado en el equipo remoto no basta para que sea accesible como pgina web por el resto de usuarios de Internet, en ese equipo debe estar ejecutndose una aplicacin servidor web. Uno de los programas servidores web ms conocido y utilizado es Apache, programa que tambin pertenece a la corriente open source. Existen otros servidores web como el Personal Web Server (PWS) o el IIS disponibles en los equipos Windows. En el caso de otros servicios como el correo electrnico o la transferencia de ficheros se necesitaran igualmente los correspondientes programas en el servidor. Programa cliente es en este caso el software necesario en el equipo cliente para tener acceso al correspondiente servicio. As por ejemplo, los navegadores como el Internet Explorer o Mozilla son ejemplos de clientes web; un programa como Outlook es un ejemplo de cliente de correo electrnico y programas como WS_FTP o CuteFTP son ejemplos de clientes FTP.
Figura 1.1 Relacin cliente/servidor. Los clientes realizan peticiones de servicio a los servidores
comandos HTML que se reciben y producir a partir de ellos la pgina web. Existen diferentes navegadores web que se pueden utilizar, por ejemplo, Internet Explorer, Netscape Navigator, HotJava, Mozilla,... este ltimo sigue la corriente open source.
Otro ejemplo de dinamismo puede ser el preprocesamiento de datos introducidos en formularios, comprobando por ejemplo la validez sintctica de direcciones de correo electrnico o la pertenencia a determinados rangos de valores numricos. En lo referente a interactividad, se trata de permitir que entre el usuario que acceda a la pgina y la propia pgina exista un cierto grado de comunicacin que no se limite a que la pgina muestre la informacin al usuario. El usuario, por ejemplo, le podra solicitar a la pgina que realice algn clculo. Volviendo al ejemplo de los multicines, supongamos que se desea que el usuario pueda hacer un clculo de forma automtica de los importes de las entradas; mediante un formulario el usuario puede introducir el nmero de entradas a adquirir, la sesin para la que se desean y determinados parmetros que puedan afectar al precio (ser estudiante, disponer de un vale de descuento,...) y la pgina debe calcular de forma automtica el importe total a pagar. Esto es interactividad.
bases de datos, modelo en el que se basan la mayora de los sistemas gestores de bases de datos actuales, entre ellos MySQL. Los 80 vienen marcados por la aparicin del ordenador personal y el nacimiento de la microinformtica. La informtica deja de ser algo exclusivo de las grandes empresas e instituciones y se acerca al pblico en general. En esta poca aparecen tambin los primeros sistemas operativos con interfaces de usuario grficas: el clebre Mac de Apple Macintosh. Aos ms tarde Microsoft seguira esos pasos con su sistema operativo Windows. La aparicin de este tipo de interfaces tambin afectara notablemente a la evolucin de los lenguajes de programacin, en concreto surge la necesidad de desarrollo de tcnicas de programacin basadas en eventos. En los aos 80 aparece tambin una nueva forma de entender la programacin: la programacin orientada a objetos, as surgen los lenguajes ADA (1980) y C++ (1985). La base en la que se apoya este estilo de programacin es el entender los objetos como entidades compuestas de acciones y datos y, por tanto, a la hora de programar las funciones (acciones) y las variables (datos) deben entenderse como componentes de una misma unidad. La dcada de los 90 se inicia con la aparicin del revolucionario servicio web y la necesidad cada vez ms patente de orientar los desarrollos hacia la integracin de aplicaciones. El servicio web, como ya se coment, rpidamente crea la necesidad de nuevas formas de programacin y as en 1995 nace el lenguaje Java, primer lenguaje pensado para integrar directamente programas en las pginas web. Los programas Java que se integran en esas pginas se denominan applets. En la actualidad, la evolucin en los diferentes sistemas operativos, de los nuevos servicios de Internet y del propio hardware influyen en las prestaciones recomendadas que debe tener un lenguaje de programacin, algunas de las que se podran citar son: Programacin estructurada: en la actualidad todos los lenguajes de programacin soportan este tipo de programacin, en la que las instrucciones se agrupan en bloques constituyendo mdulos que se llaman unos a otros. Programacin orientada a objetos: los lenguajes de programacin de mayor xito se basan en la construccin de clases de objetos. Cada clase engloba, por un lado las acciones que pueden ser realizadas con esos objetos y, por otro, los datos o caractersticas asociadas a los mismos. Algunos lenguajes actuales, aunque no pueden ser considerados orientados a objetos, s que incorporan algunas caractersticas propias de estos lenguajes, trabajando tambin con objetos.
10
Programacin guiada por eventos: los programas deben ser capaces de dar respuesta a las diferentes acciones que el usuario efecta sobre la interfaze del programa. Por ejemplo, cuando un usuario elige una opcin de men o pulsa un botn se genera un evento que debe ser detectado, identificado y tratado por el programa. Programacin concurrente: la aparicin cada vez con ms frecuencia de equipos con ms de un procesador plantea nuevas formas de programacin; un programa podra ser susceptible de dividir en varias tareas que puedan estar realizndose de forma simultnea, cada tarea puede ser ejecutada por un procesador diferente o bien utilizar mecanismos de reparto del tiempo de procesador. Esta es la base de la programacin paralela o concurrente. Prestaciones multimedia: los programas deben ser capaces de manejar todo tipo de informacin y recursos; deben de estar preparados para trabajar con elementos grficos en diferentes formatos, animaciones o vdeo, sonido,... Portabilidad: evidentemente los programas son desarrollados para que puedan ser utilizados por diferentes usuarios y no siempre est garantizado que los usuarios tengan equipos similares. La portabilidad de los programas permite que estos puedan ser ejecutados sobre diferentes plataforma informticas. Sin embargo, la portabilidad puede entenderse a dos niveles: a nivel de cdigo fuente la portabilidad implica que el cdigo puede ser compilado sobre las dos plataformas para obtener dos versiones diferentes del programa. En algunos casos, la portabilidad se consigue a nivel no de cdigo fuente sino del cdigo resultado del proceso de compilacin; esto es lo que ocurre por ejemplo con el lenguaje Java. En Internet, la portabilidad es un concepto clave por cuanto a la red estn conectados todo tipo de equipos. Integracin de aplicaciones: cada vez es ms necesario que los lenguajes de programacin incorporen mecanismos sencillos para conectarse con otras aplicaciones. Quizs el caso ms claro de ello sea la conectividad a bases de datos; los programas deben ser capaces de establecer esa conexin y realizar consultas sobre los datos almacenados.
11
hardware del equipo y resultan difciles de entender por un programador no especialista. El ejemplo clsico de lenguaje de bajo nivel es el lenguaje ensamblador. La mayor parte de los programadores optan por utilizar lenguajes cuyo cdigo resulta ms fcil de entender, por cuanto sus reglas sintcticas se asemejan ms a la forma de comunicarse las personas; son lenguajes que estn ms cerca del programador pero ms lejos de la mquina a la que van dirigidos. Estos lenguajes son los denominados "lenguajes de alto nivel" y a ellos pertenecen los lenguajes de programacin ms conocidos. Cuando se est desarrollando un programa usando un lenguaje de programacin se genera un cdigo (cdigo fuente) que es comprensible para todo aquel usuario que tenga los conocimientos suficientes sobre el correspondiente lenguaje, pero que en ningn caso es comprensible directamente para la mquina. Los ordenadores trabajan internamente mediante circuitos electrnicos que admiten dos posiciones: abierto o cerrado (1 0) y por tanto, toda orden a dar a la mquina debe ser planteada en ltima instancia como secuencias de ceros y unos (cdigo binario). Parece claro por tanto que se necesita un proceso de traduccin del cdigo fuente que nosotros entendemos a instrucciones entendibles por la mquina. Ese proceso de traduccin se puede realizar de dos maneras, y eso da pie a establecer una nueva clasificacin de los lenguajes de programacin: Lenguajes compilados: en un lenguaje compilado el cdigo fuente pasa por un proceso denominado "compilacin" en el que se genera un cdigo denominado "objeto", que una vez enlazado con otros posibles mdulos de cdigo objeto necesarios, genera el fichero ejecutable con el programa. Ese fichero ejecutable es lo nico necesario para poder utilizar el programa y contiene todas las instrucciones del mismo pero en el formato entendible por la mquina. El aspecto ms importante a destacar es que el proceso de compilacin se realiza con anterioridad a cualquier ejecucin o uso del programa; en ese proceso se comprueba la validez sintctica del programa y si todo es correcto se genera el ejecutable. Si se produce un error en la compilacin el programa no podr ser utilizado. Lenguajes interpretados: en los lenguajes interpretados, la traduccin de las instrucciones se va realizando de forma secuencial por una aplicacin, denominada "intrprete", al mismo tiempo que se ejecuta el programa. De esta forma, si llegado un punto del programa el intrprete se encuentra con una instruccin errnea, el programa no contina pero s que habr podido ejecutar todas las sentencias previas. A diferencia de los lenguajes
12
compilados, la verificacin de la correccin sintctica del programa no se realiza antes de la ejecucin sino al mismo tiempo. Por poner un smil que sirva para clarificar la diferencia entre ambos tipos de programas, supngase que una persona recibe una lista con una serie de tareas a realizar. Podra optar por utilizar dos estrategias: Antes de comenzar la persona pierde unos minutos leyendo toda la lista y analizando la coherencia o factibilidad de las tareas que se le estn encomendando. Si todas las tareas son coherentes realiza un proceso de planificacin para determinar la forma de realizarlas todas. Pero si detecta alguna tarea que no entiende o le resulta incoherente, informa a la persona que le ha encargado las tareas y opta por no iniciar sus labores a la espera de una posible rectificacin en el listado de tareas (enfoque de un programa compilado) Nada ms recibir la lista de tareas, la persona lee la primera labor encomendada y la realiza. A continuacin pasa a la segunda, la lee y la realiza, y as sucesivamente. Si todo ha ido bien, habr realizado todas las tareas, pero si al llegar a un punto de la lista se encuentra con una tarea errnea o no coherente, opta por abandonar el resto del trabajo e informar a la persona que le encarg las tareas de tal extremo (enfoque de un programa interpretado)
Figura 1.2 Necesidad de un proceso de traduccin del cdigo fuente para que el ordenador pueda entenderlo. Dicha traduccin puede realizarse mediante un proceso de complicacin o mediante el uso de un intrprete
13
A primera vista, se podra pensar que un lenguaje compilado es ms seguro en el sentido de no producir errores a la hora de ejecutar el programa. En principio, si se producen errores sintcticos en el programa, estos son detectados en la compilacin y por tanto el programa nunca se ejecutara hasta que estos errores fuesen corregidos. Efectivamente, esto es as, pero tampoco se puede descartar que, a pesar de no haber errores sintcticos en el cdigo fuente, se produzcan errores a la hora de ejecutar el programa. Pinsese en un programa que tiene una instruccin en la que se deben dividir dos nmeros almacenados en dos variables y guardar el resultado en una tercera variable; la instruccin puede ser sintcticamente correcta, pero qu pasa si a la hora de ejecutar el programa el segundo de los nmeros es cero?, se producir un error de tipo aritmtico debido a la divisin por cero y si el programa no est preparado para ello, se abortar bruscamente su ejecucin. Este tipo de errores son los que se denominan errores en tiempo de ejecucin. En un lenguaje interpretado, todos los errores son detectados en tiempo de ejecucin, tanto los debidos a errores sintcticos como los debidos a condiciones singulares producidas a la hora de ejecutar el programa. Desde un punto de vista prctico los lenguajes compilados resultan ms poderosos pero los interpretados resultan ms flexibles. El proceso de compilacin genera cdigos ejecutables fuertemente dependientes de la mquina a la que van dirigidos, con lo que se pierde la portabilidad del programa final aunque s que se puede en algunos casos tener portabilidad del cdigo fuente. Por ejemplo, si se ha desarrollado un programa en lenguaje C siguiendo el estndar ANSI, ese cdigo puede ser compilado por un compilador de C en Windows para generar la versin ejecutable en Windows del programa, y posteriormente repetir la compilacin en Unix con un compilador diferente para obtener la versin Unix. Por supuesto, la portabilidad del cdigo solo es posible si no se hace uso en el programa de aspectos particulares de una plataforma concreta. Con un lenguaje interpretado se facilita la portabilidad, ya que lo nico necesario es disponer en cada plataforma del intrprete adecuado. Esta es la razn por la cual muchos de los lenguajes para el desarrollo de aplicaciones web son interpretados, ya que en Internet la portabilidad es imprescindible. Ejemplos de lenguajes interpretados son JavaScript, VBScript y el propio PHP. Otra de las ventajas de los lenguajes interpretados puede ser la mayor facilidad para su aprendizaje y la simplificacin en el proceso de desarrollo de las aplicaciones. En el caso de los lenguajes interpretados para el desarrollo de aplicaciones web, no se requiere adems ningn tipo de herramienta de desarrollo como puedan ser compiladores; los intrpretes van integrados en los navegadores web en un caso y en los servidores web en otro. El cdigo fuente adems se
14
incrusta dentro del cdigo HTML con lo que incluso no sera necesario ningn tipo de editor especfico. Mencin especial merece el lenguaje Java: se dice de l que es un lenguaje que combina el poder de los lenguajes compilados y la flexibilidad de los interpretados. Cuando se quiere integrar en una pgina web un programa Java (applet Java), se necesita un proceso de compilacin que genera un cdigo binario a partir del cdigo fuente, pero este cdigo no es ejecutable directamente sino que se ejecuta por un intrprete que incorpora el navegador web que el usuario utilice al acceder a la pgina. Este pequeo artificio es el que permite conseguir la portabilidad del cdigo compilado Java. Los lenguajes interpretados que se utilizan en Internet para aumentar las prestaciones de las pginas web se suelen denominar lenguajes de script y a los programas con ellos desarrollados se les denomina scripts o guiones. Como ya se ha comentado, el lenguaje PHP pertenece a esta categora al igual que los otros dos lenguajes de script ms conocidos: JavaScript y VBScript.
15
Quin ejecutar o interpretar las ordenes? Como se ha comentado, en el servicio web intervienen dos equipos, el servidor en el que est alojada la pgina y el cliente que recibe el cdigo HTML y genera la pgina en s. Cuando existe tambin un programa o script integrado en la pgina, la duda es cul de los dos equipos es el encargado de ejecutar las rdenes. En PHP, los programas son ejecutados por el servidor mientras que en JavaScript es el cliente el que los ejecuta.
1.4.1. PROGRAMACIN DEL LADO DEL CLIENTE VS PROGRAMACIN DEL LADO DEL SERVIDOR
La respuesta a la ltima pregunta planteada en la seccin anterior da pie a la clasificacin de las tecnologas de programacin en Internet en dos categoras: Programacin del lado del cliente: los programas residen junto a la pgina web en el servidor pero son transferidos al cliente para que este los ejecute. Java, JavaScript, VBScript son lenguajes de programacin del lado del cliente. Programacin del lado del servidor: los programas son ejecutados por el servidor y lo que se enva al cliente es la respuesta o resultado de dicha ejecucin. Lenguajes como PHP o Perl pertenecen a esta categora.
Figura 1.3 Diferencia entre la programacin del lado del servidor y la del lado del cliente
16
Cada una de estas estrategias tiene evidentemente sus ventajas y sus inconvenientes, en cualquier caso no son excluyentes, ya que en una misma pgina pueden incorporarse por ejemplo scripts en PHP para ser ejecutados por el servidor y scripts en JavaScript para ser ejecutados por el cliente. En definitiva, se trata de aprovechar las ventajas de cada tecnologa en el desarrollo de las aplicaciones web.
Programacin del lado del cliente Los programas residen en el servidor pero se ejecutan en el cliente Se descarga de trabajo a los servidores Programacin del lado del servidor Los programas residen y son ejecutados por el servidor El trabajo recae sobre los servidores pudiendo llegar a sobrecargarse Al cliente solo se les transfiere el resultado de la ejecucin del programa Una vez enviada al usuario la respuesta del programa, cualquier peticin adicional del cliente requiere una nueva conexin con el servidor y la ejecucin en l de un nuevo programa En los equipos de los clientes no se necesita ningn software especial, todo lo necesario debe estar instalado en el servidor Todos los clientes podrn visualizar correctamente la pgina El cdigo fuente permanece en el servidor, se conserva su privacidad y los clientes no tienen acceso a l La mayora de los servicios de alojamiento gratuito de pginas no admiten este tipo de programacin
La ejecucin del programa requiere una transmisin por la red del cdigo necesario para ello Las respuestas a las acciones de los usuarios sobre el programa pueden ser invocadas sin necesidad de realizar transmisiones por la red Para la correcta ejecucin del programa se requiere que el cliente tenga instalados programas o plug-ins adecuados Si en un cliente no est instalado alguno de los programas intrpretes o plug-ins, la pgina no se ejecutar correctamente Al transferirse el cdigo, el cliente tiene acceso a dicho cdigo y puede obtener a partir de l informacin que pueda resultar comprometida Se pueden integrar los programas en las pginas alojadas en cualquier servidor web
Tabla 1.1 Diferencias entre la programacin del lado del cliente y del lado del servidor
17
JavaScript
JavaScript es un lenguaje interpretado basado en guiones que son integrados directamente en el cdigo HTML. El cdigo es transferido al cliente para que este lo interprete al cargar la pgina. Con JavaScript no pueden crearse programas independientes. La primera versin de este lenguaje apareci con el navegador Netscape 2.0 en 1995, con el nombre original de LiveScript y soportando gran cantidad de las instrucciones que tiene en la actualidad. La versin JavaScript 1.1 se dise con la llegada de las versiones 3.0 de los navegadores e incorpor algunas funcionalidades nuevas como el tratamiento dinmico de imgenes y la creacin de arrays. Es esta versin la primera que se incorpora al explorador de Microsoft. En los navegadores 4.0 de Microsoft y Netscape se incorpor ya un intrprete para una nueva versin del lenguaje, el JavaScript 1.2. Con esta versin se inicia un proceso de diferenciacin en algunos aspectos de la implementacin en los dos navegadores, proceso que culminara con el nacimiento de JScript, nombre con el que Microsoft denomina a su versin de JavaScript. En la actualidad Microsoft ha desarrollado su JScript.net. Las principales caractersticas de este lenguaje son: Es un lenguaje interpretado. No necesita compilacin. Multiplataforma. Lenguaje de alto nivel. Admite programacin estructurada. Basado en objetos. Maneja la mayora de los eventos que se pueden producir sobre la pgina web. No se necesita ningn kit o entorno de desarrollo.
18
A diferencia de Java, JavaScript no dispone de elementos para crear interfaces de usuario propias para los programas y tiene que utilizar para ello los formularios de HTML a travs de los denominados manejadores de eventos.
Java
Java es un lenguaje de programacin clsico en cuanto a que requieren un proceso de compilacin. El cdigo compilado puede ser integrado en la pgina web para que sea ejecutado por el cliente. El nacimiento formal del lenguaje se sita en enero de 1996 con el lanzamiento por parte de la empresa creadora, Sun Microsystems, del JDK 1.0 (Java Development Kit). Este entorno de desarrollo Java puede obtenerse de forma totalmente gratuita a travs de Internet (http://www.javasoft.com) e incorpora los elementos bsicos necesarios para el desarrollo de aplicaciones Java. Con Java se pueden crear dos tipos de programas: Applets: programas que se integran en las pginas web y que, residiendo en el servidor, son ejecutados por el cliente. La ejecucin necesita de la interpretacin del cdigo compilado por el software cliente. Aplicaciones: programas autnomos que se pueden ejecutar en cualquier equipo. En este ltimo caso puede optarse por generar cdigo compilado similar al de los applets y que para su ejecucin necesita de un intrprete o cdigo compilado ejecutable directamente como en cualquier otro lenguaje de programacin.
En el caso de los applets, el cdigo fuente no se incrusta directamente en el documento HTML, sino que lo que se aade es un cdigo binario resultado de la compilacin, el denominado JBC (Java Byte Code). Esto permite proteger el cdigo fuente, aunque hasta cierto punto, ya que las particularidades de este cdigo compilado hacen que sea factible el proceso inverso, es decir, la decompilacin, recuperar el cdigo fuente a partir del compilado. En la propia Internet pueden encontrarse programas capaces de hacerlo. La razn de todo esto est en el hecho de que para conseguir la portabilidad de los programas el cdigo compilado es un cdigo que se encuentra a mitad de camino entre un cdigo fuente y un cdigo objeto fuertemente dependiente de una plataforma. Es por ello que se suele decir de Java que es un lenguaje que combina la flexibilidad de los lenguajes interpretados y el poder de los compilados.
19
Por supuesto, Java es un lenguaje con unas altas prestaciones, mucho mayores que las de lenguajes interpretados. Algunas de sus caractersticas son: Es un lenguaje orientado a objeto. Admite programacin concurrente. Dispone de clases de objetos para la generacin de interfaces grficas de usuario. Tiene prestaciones multimedia. Resulta un lenguaje familiar, al tener una sintaxis similar al C++, aunque eliminando algunos de los problemas ms engorrosos del lenguaje C: el uso de punteros, la gestin de la memoria y el control de accesos a los elementos de arrays. Es un lenguaje simple, robusto y seguro. A travs de Internet se puede acceder a todo lo necesario para desarrollar applets Java.
VBScript
VBScript es, al igual que JavaScript, un lenguaje basado en guiones que permite integrar programas directamente en el cdigo HTML. Admite un doble uso, por un lado como lenguaje del lado del cliente, pero tambin como lenguaje del lado del servidor para la generacin de pginas ASP. Es un lenguaje desarrollado por Microsoft tomando como referente de sintaxis el VBA, Visual Basic para Aplicaciones. Por supuesto, no ofrece todas las funcionalidades de un entorno de desarrollo visual como Visual Basic, pero si se presenta como un herramienta poderosa y de fcil uso para generar pginas web interactivas.
20
Programacin CGI
CGI son las siglas de Common Gateway Interface (Interfaz de Pasarela Comn) y lo que define es un estndar para establecer la comunicacin entre un servidor web y un programa. Esta interfaz define una forma cmoda y simple de ejecutar programas que se encuentran en la mquina en la que se aloja el servidor, a travs de la definicin de una serie de reglas que deben cumplir tanto las aplicaciones como los servidores para hacer posible la ejecucin de los programas. Al tratarse de una interfaz, no existe ningn tipo de dependencia con el lenguaje de programacin empleado. Para desarrollar programas CGI se puede utilizar cualquier lenguaje. Los ms habituales son: C, C++, Fortran, Perl, Tcl, Visual Basic, AppleScript. Los lenguajes interpretados como Tcl y Perl, tienen mayor facilidad de mantenimiento y depuracin, presentan ventajas de seguridad, pero resultan ms lentos. Los lenguajes compilados (C, C++,...), por su parte, son mucho ms rpidos. En el caso de CGI la velocidad de ejecucin es importante, ya que habr que sumar el tiempo de ejecucin al tiempo de espera de red y a la velocidad de transmisin.
21
Las JSP se diferencian de otras tecnologas del lado del servidor como los CGI o las ASP en dos aspectos principalmente: por un lado, los JSP y servlets se ejecutan en una mquina virtual Java, lo cual permite que, en principio, se puedan usar en cualquier tipo de ordenador, siempre que tenga instalado esa mquina virtual. Por otro lado, un programa JSP se compila a un programa en Java la primera vez que se invoca, y del programa en Java se crea una clase que se empieza a ejecutar en el servidor como un servlet. De esta manera los servlets no se ejecutan cada vez que se recibe una peticin, sino que persisten de una peticin a la siguiente, lo que permite realizar operaciones como la conexin a bases de datos o manejo de sesiones de una manera ms eficiente. Un JSP es una pgina web con etiquetas especiales y cdigo Java incrustado, mientras que un servlet es un programa que recibe peticiones y genera a partir de ellas una pgina web. En ambos casos se necesita un programa servidor que se encargue de recibir las peticiones, distribuirlas entre los servlets y realizar las tareas de gestin propias de un servidor web. Estos programas suelen llamarse contenedores de servlets o servlet engines, y, entre otros, podran citarse como ejemplos Resin, BEA Weblogic, JRun de Macromedia, Lutris Hendir, o, quizs el ms popular y conocido: Toncat.
ColdFusion
ColdFusion es una tecnologa desarrollada inicialmente por Allarie, que en la actualidad pertenece a Macromedia. Es una herramienta sencilla de aprender y bastante potente que funciona sobre la mayora de servidores web. Los scripts se desarrollan por medio de etiquetas al estilo HTML (ColdFusion en realidad se denomina Cold Fusion Markup Language -CFML-). Estas etiquetas se sitan dentro del documento HTML y son ejecutadas por el servidor, de forma que el cliente solo ve el resultado, no el cdigo. Bsicamente ColdFusion est formado por tres componentes: una aplicacin servidor, un lenguaje de marcacin (ColdFusion Markup Language, CFML) y un programa administrador. La aplicacin servidor es la encargada de leer e interpretar las instrucciones que le son pasadas a travs de pginas ColdFusion. Estas pginas se identifican por tener la extensin .cfm o .cfc y contienen etiquetas HTML y etiquetas especficas del lenguaje propio de ColdFusion: CFML. Las etiquetas del lenguaje CFML tienen una sintaxis similar a las de HTML y se distinguen del resto por tener nombres que siempre comienzan con cf. Adems de las etiquetas predefinidas, el programador puede crear nuevas etiquetas e incluso puede integrar cdigo en otros lenguajes como C, C++ o Java.
22
Las aplicaciones ColdFusion pueden interactuar con cualquier base de datos que soporte ODBC o JDBC.
PHP
PHP es un lenguaje interpretado del lado del servidor que surge dentro de la corriente denominada cdigo abierto (open source). Se caracteriza por su potencia, versatilidad, robustez y modularidad. Al igual que ocurre con tecnologas similares, los programas son integrados directamente dentro del cdigo HTML. En este libro se explicar en detalle la sintaxis y el funcionamiento de este lenguaje, de momento se realiza a continuacin una breve comparativa con las otras tecnologas del lado del servidor descritas previamente. Comparado con ASP, la principal ventaja de PHP es su carcter multiplataforma. Por otro lado, los programas en ASP resultan ms lentos y pesados, y tambin menos estables. En los entornos Microsoft la ventaja de ASP es que los servidores web de Microsoft soportan directamente ASP sin necesidad de ninguna instalacin adicional Sealar tambin la existencia de herramientas que permiten convertir programas desarrollados en ASP al lenguaje PHP, una de las ms conocidas es asp2php. Comparando el lenguaje PHP con el lenguaje Perl, utilizado habitualmente en la programacin CGI, puede decirse que PHP fue diseado para desarrollo de scripts orientados a web, mientras que Perl fue diseado para hacer muchas ms cosas y debido a esto, se hace muy complicado. La sintaxis de PHP es menos confusa y ms estricta, pero sin perder la flexibilidad. En comparacin con ColdFusion, PHP es ms rpido y eficiente para tareas complejas de programacin, adems PHP resulta ms estable y usa una menor cantidad de recursos. Por el contrario, ColdFusion posee un mejor gestor de errores, un buen motor de bsquedas, abstracciones de bases de datos y un gran nmero de funcionalidades para el procesamiento de fechas. Finalmente, ColdFusion no est disponible para todas las plataformas. En definitiva, PHP es uno de los lenguajes ms utilizados actualmente en el desarrollo de aplicaciones web y viene experimentado un constante crecimiento en su nivel de utilizacin en Internet. Este libro trata de humildemente contribuir a continuar con el proceso de difusin de esta tecnologa.
23
Las definiciones de globalizacin son mltiples, aqu interesa ms comprender su significado general que entrar en los matices de las distintas definiciones. No obstante, para una mayor profundidad sobre el concepto se recomienda consultar las siguientes obras Globalizacin: oportunidades y desafos. (Maesso Corral, 2003) y Los limites a la globalizacin (Noam Chomsky, 2002).
25
complejidad de los sistemas software, haciendo crecer por tanto la inversin y dependencia de dichos sistemas y en definitiva de sus creadores. Segmentos Hardware Software Servicios TI Telecomunicaciones Total 2003 Diciembre 140.129 61.017 114.938 292.287 608.371 2004 Noviembre 142.032 63.758 117.301 303.507 626.598 % Cto 03/04 1.35 4.5 2.05 3.83 2.99 Previsin 2005 147.351 67.854 122.272 316.941 654.418
Tabla 2.1 Facturacin del mercado de las TIC (en millones de euros) en Europa por segmentos. Elaboracin propia a partir de los datos de noviembre obtenidos en el Centro de Prediccin Econmica de la Universidad Autnoma de Madrid (CEPREDE) y el Observatorio de Tecnologas de la Informacin Europeo (EITO)
En el mbito informtico, que es el que interesa en este libro, este proceso de homogenizacin y dependencia queda claramente reflejado en el software y en especial en los sistemas operativos, donde las posibilidades de eleccin del tipo de sistema para el usuario no tcnico son muy reducidas, e incluso son los propios fabricantes y no las necesidades del usuario los que obligan a cambiar de una versin a otra en una aplicacin. Como ejemplo de lo anterior basta con preguntarse cuntos sistemas operativos conocemos, por qu tenemos instalado y utilizamos ese sistema operativo y no otro, y si fue esta nuestra la eleccin. Inicialmente la estandarizacin de aplicaciones informticas se ha visto propiciada por los avances en las TIC, especialmente por la red Internet y sus protocolos y servicios, que han eliminado las barreras fsicas y geogrficas permitiendo una sociedad global comunicada de forma colectiva e interactiva. Pero Internet, que crece y madura conforme aumenta su nmero de usuarios2, se acerca de forma pausada, a su filosofa inicial, convirtindose en un medio de comunicacin de informacin, conocimiento y experiencias plural y diverso, que se aleja de la estandarizacin y busca una mayor libertad favoreciendo el desarrollo de importantes avances. Uno de los acontecimientos ms fascinantes se ha producido en el mbito informtico y de desarrollo de
Las ltimas cifras registradas en agosto del 2004 por el Centro de Prediccin Econmica de la Universidad Autnoma de Madrid (CEPERDE) revelan que en el mundo existen ms de 797millones de internautas, lo que supone un incremento del 121% respecto al ao 2000, de los que ms de 14 millones de usuarios estn en Espaa, aproximadamente el 36 % de la poblacin del pas.
2
26
aplicaciones con la aparicin de la corriente denominada free software u open source, que merece, como se ver a continuacin, una especial atencin por cuanto supone una ruptura con los planteamientos tradicionales de la industria del software, dominados por el principio de beneficio econmico.
un punto de partida para poder comprender los siguientes epgrafes en los que se analizar la evolucin cronolgica de este movimiento, su filosofa y caractersticas y la expansin espectacular que est teniendo en la actualidad.
28
Ante esta situacin solo era cuestin de tiempo que el software libre desapareciera y se implantara el software comercial o Closed Source (cdigo fuente cerrado), que supone para el usuario adquirir nicamente el derecho a la utilizacin de las aplicaciones.
Es este contexto el que en 1984 inspir a Richard Stallman, miembro del staff del laboratorio de inteligencia artificial del Instituto de Tecnologa de Massachusetts (MIT), a renunciar a su puesto y dar inicio al proyecto GNU, acrnimo del ingls GNU is not Unix, con el propsito de crear una comunidad para compartir software de forma libre. Libre en cuanto a la posibilidad de ver su cdigo fuente, modificarlo y poder distribuirlo con o sin coste, pero siguiendo la distribucin esos mismos principios. Para conseguir ese objetivo, la primera tarea que se propuso fue desarrollar un sistema operativo completo tipo Unix4 que siguiera esos criterios de libertad.
En 1985 los componentes del proyecto GNU crearon la Fundacin para el Software Libre, free software Fundation (FSF), organizacin sin nimo de lucro creada para el fomento del software libre que pasa a ocuparse de tareas organizativas y de distribucin de este tipo de software tanto procedente del proyecto GNU como ajeno. Esta asociacin establece la definicin de free software, software libre, indicando que un software para tener esta calificacin debe cumplir con cuatro condiciones, denominadas las cuatro libertades: 1. Libertad para ejecutar el programa con cualquier propsito. 2. Libertad de acceso al cdigo fuente, permitiendo la modificacin del programa segn las necesidades del usuario. 3. Libertad para redistribuir copias, tanto gratis como por un canon. 4. Libertad para distribuir versiones modificadas del programa.
La intencin de hacer el nuevo sistema compatible con Unix fue debida a que ...ese era el sistema operativo ms utilizado y por tanto el ser compatible con dicho sistema facilitara el trasvase de usuarios de uno a otro...... Stallman, 1999.
29
En 1993 Ian Murdock da lugar al proyecto Debian como una asociacin de personas, cerca de un millar de desarrolladores voluntarios dispersos por todo el mundo, que trabajan a travs de la Red y hacen causa comn para el desarrollo y distribucin de software de forma abierta en la lnea de Linux y GNU, dando lugar al sistema operativo que han denominado Debian GNU/Linux5. Un hecho crucial para toda la corriente es la creacin por parte de esta asociacin del denominado Contrato social de Debian con la comunidad de software libre. El primer borrador de este documento fue elaborado por Bruce Parens en 1997 y en l se recogen las llamadas directrices de software libre de Debian, formadas por diez puntos en los que se recoge la filosofa a seguir por el proyecto Debian y que servirn de base a la futura definicin de open source. Esta definicin se produce en febrero de 1998 cuando dentro de la comunidad de software libre un grupo, formado entre otros por Raymond, E; Parens, B; Peterson, C, crea la open source Initiative (OSI) que elabora y promueve el uso de la nomenclatura open source. La OSI, tomando como base las directrices del software libre de Debian y eliminando las referencias especficas a dicha asociacin, establece la definicin de open source que se rige por los siguientes puntos que a continuacin se muestran de forma resumida: 1. Libre redistribucin. 2. Acceso al cdigo fuente. 3. Trabajos derivados. 4. Integridad del cdigo fuente del autor. 5. No discriminacin contra personas y grupos. 6. No discriminacin contra campos de trabajo. 7. Distribucin de licencia. 8. La licencia no debe ser especfica a un producto. 9. La licencia no debe restringir otro tipo de software. 10. La licencia debe ser tecnolgicamente neutral. Como conclusin a este epgrafe se recoge en la Tabla 2.2 un resumen de los acontecimientos ms importantes dentro del movimiento software libre y open source.
Si bien en la mayora de ocasiones la utilizacin de este sistema operativo suele designarse solo como Linux, la expresin correcta sera GNU/Linux. Linux por si solo es un ncleo y no un sistema operativo completo.
5
30
Richard Stallman crea el proyecto GNU. Los componentes del proyecto GNU crean la FSF (free software Foundation). Linux Trovalds desarrolla el Kernel Linux. Primer sistema operativo libre Linux, combinacin de GNU/LINUX. Ian Murdock crea el proyecto Debian. Debian establece el Contrato social Debian con la comunidad del Software libre. Un grupo de la comunidad Software Libre crea la OSI (open source Initiative). Bruce Parents miembro de OSI establece la definicin de open source.
Tabla 2.2 Acontecimientos ms importantes dentro del movimiento software libre y open source
31
Si bien es cierto que estos trminos no son exactamente idnticos ya que cada uno de ellos tiene su origen en una corriente distinta de un mismo movimiento (Stallman, 19996), no es menos cierto que son ms las coincidencias que los unen que las diferencias, siendo las propias tendencias las que intentan hacer prevalecer los matices de su concepto sobre el otro.
GNU y open source dos corrientes de un mismo movimiento Son numerosos los artculos que circulan por la Red hablando de enfrentamiento entre las dos corrientes, pero en honor a la verdad y acudiendo a la informacin que las propias organizaciones FSF y OSI ofrecen, dicho enfrentamiento no existe, ms bien todo lo contrario, colaboran y participan en distintos proyectos y eventos, aunque siempre dejando claro que no son organizaciones idnticas. Sin entrar en profundidades filosficas, las dos corrientes tienen en comn un aspecto fundamental, la obligacin de que su software permita acceso al cdigo fuente, es decir, que sus aplicaciones sean de cdigo abierto. Su punto clave de distensin se encuentra en la posicin diferente que mantienen respecto de la distribucin del cdigo fuente y de los programas que de l pueden derivarse, puesto que la FSF establece como condicin obligatoria para considerar un software como libre que dicha aplicacin, su cdigo fuente y las aplicaciones que de l se deriven permanezcan siempre libres, utilizando para ello unas licencias de software especiales que se estudiarn en el epgrafe siguiente. Por el contrario, la OSI no establece restricciones y permite que un software con cdigo abierto sea modificado y posteriormente cerrado. De hecho, a tenor de lo anterior, todo software libre admitido por la FSF estara admitido por la OSI como software open source, sin embargo, no todo el software open source de la OSI es considerado libre por la FSF. No se entrar a juzgar cul de los dos vocablos es el ms idneo para designar en sentido amplio a todo el movimiento. Pero por ser necesario en aras de la claridad utilizar uno de los dos, se usar el trmino open source puesto que, como se ha
6
Stallman, R; Raymond, E. S; Bruce. P; O'Reilly.T et al.: open sources: Voices from the open source Revolution. Edited by Chris DiBona, Sam Ockman, Mark Stone. (1999).
32
visto, engloba tanto al software open source como al software libre de la FSF y su uso es ms extendido y reconocido en los foros internacionales. Como ejemplo de la utilizacin y reconocimiento del termino open source se pueden citar los siguientes acontecimientos recientes: La Unin Europea ha puesto en funcionamiento el 15 de diciembre del ao 2003 el open source Observatory dedicado al estudio del fenmeno open source en el mbito de la Unin Europea. Bajo el ttulo open source World Conference se ha celebrado en Mlaga los das 18, 19 y 20 de febrero del ao 2004 un congreso7 internacional para el anlisis de la situacin mundial del software considerado open source.
Open source no es solo una definicin de un tipo de software sino que representa todo un movimiento, con una filosofa y formas de trabajar distintas que implican unas repercusiones tecnolgicas, sociales y econmicas que requieren de un anlisis detallado que se realizar a continuacin. Open source busca dar la libertad total a los usuarios en la utilizacin del software, lo que implica la necesidad de poner a total disposicin de estos el cdigo fuente que en la mayora de las ocasiones adems de ser accesible puede ser copiado, modificado y redistribuido sin restricciones. Esta filosofa cargada de libertad y apertura no puede crecer en los tradicionales entornos cerrados y requiere la bsqueda y definicin de nuevos espacios abiertos y colaborativos, que dan lugar a las denominadas comunidades. Una comunidad es una agrupacin de personas que con independencia de su perfil econmico, social, cultural y geogrfico presentan un inters comn y de forma voluntaria se incorporan a un grupo, inicialmente pequeo, que crece en torno a un mismo inters hasta crear una comunidad organizada. Este fenmeno social de agrupacin voluntaria de personas, generalmente de forma virtual, en torno al desarrollo de software open source constituye el motor de todo el movimiento. Motor social que se ha visto favorecido en su desarrollo por la aparicin y uso intensivo de Internet, que acta como espacio fsico en el que estas comunidades se instalan y comunican y como catalizador del movimiento open source. Es por ello que se reconoce la existencia de una estrecha vinculacin entre Internet y el open source, pues sin una red libre del tipo de Internet sera imposible el desarrollo de esta tendencia, y sin esta no se habran desarrollado numerosos elementos que contribuyen al mantenimiento y crecimiento de la Red.
Congreso que pese al ttulo open source cont con la presencia de prestigiosos representantes de ambas corrientes, free software y open source.
7
33
El movimiento open source tiene importantes consecuencias econmicas, relacionadas con las sociales, que repercuten favorablemente en los usuarios. En primer lugar, altera la forma tradicional de produccin de software, puesto que no hay una organizacin empresarial con finalidad lucrativa propietaria del software que se desarrolle, ni se paga una contraprestacin econmica a los desarrolladores. El modelo de produccin del movimiento open source se basa en la comunidad, formada por desarrolladores y usuarios cuya finalidad principal es generar y disponer de un software de calidad, ocupando el lucro una posicin marginal, lo que permite que el precio del software generado sea bajo o nulo. Un segundo punto a considerar es que el open source supone una anomala en el funcionamiento del mercado, debido a que las comunidades, salvo excepciones, no pueden ser compradas o absorbidas como si de una empresa se tratase; incluso en el caso de que una comunidad fuera eliminada, segn el tipo de licencia que esta hubiera incorporado en sus programas, estos y los posteriores desarrollos que se hicieran sobre los mismos seguiran siendo igual de libres. Por ltimo, open source ha supuesto una apertura del mercado, generando competencia y reduciendo los efectos negativos de las situaciones prximas al monopolio, obligando a las empresas a ser ms competitivas, lo que se traduce en ofertar mejores productos a menores precios. La tendencia monopolstica que viene presentando el sector tecnolgico de desarrollo de software en el que unas pocas compaas controlan los productos existentes en el mercado ha generado un retroceso en la ingeniera del software debido a: El desarrollo de software no se basa en optimizar este, sino en los adelantos y mayores requerimientos de hardware. La aparicin de nuevas versiones y mejoras de software se rigen por criterios econmicos y no tecnolgicos, y generalmente se producen de forma dilatada en el tiempo para sacar el mayor rendimiento econmico a cada versin.
La forma de trabajo de open source, con un amplio nmero de desarrolladores y usuarios revisando y testando los productos continuamente, favorece que los avances y mejoras sean rpidas y regidas por criterios de calidad tecnolgica. Los desarrolladores-usuarios pueden colaborar en distintas comunidades y estas aliarse entre s para determinados proyectos, que generan colaboraciones y sinergias desinteresadas econmicamente, difciles de encontrar en el entorno
34
empresarial, y que repercuten en diversidad de enfoques ante un mismo problema tecnolgico. Por ltimo, una cuestin fundamental en el open source es que la aparicin de nuevos productos deriva de los intereses de los usuariosdesarrolladores, que son quienes dirigen la comunidad.
2.4. LICENCIAS
La comunidad open source y software libre se basan en la bsqueda de la libertad duradera y permanente del software, pero en una libertad siempre conforme al derecho y la jurisprudencia y nunca sustentada en la violacin de las normas legales. Es precisamente la normativa jurdica la que permite y ampara que el software se mantenga libre frente a intentos de apropiacin por terceros. Esta libertad se consigue dotando al software de los correspondientes derechos de autor y licencias. La licencia, en un lenguaje coloquial, puede definirse como la forma en la que el autor de una obra, en este caso software, permite el uso y distribucin de su creacin por terceras personas de la manera que l considera ms oportuna, siendo por tanto responsabilidad del autor incluir la licencia que especifique de qu forma puede ser utilizado un programa. La cuestin de las licencias es uno de los temas ms complejos de cuantos rodean al open source, y ello es debido tanto a la dificultad propia del mbito jurdico que supone redactar una licencia sin ambigedades ni contradicciones, que no entre en conflicto con la ley y sobre todo que sea sostenible ante los tribunales en caso de litigio; como a la gran variedad de licencias existentes. Es prctica habitual y recomendada8 entre los desarrolladores de software libre a la hora de crear una licencia para el software desarrollado, tomar como base la licencia libre GPL (General Public License), que posteriormente se analizar, y a partir de ella si no se est de acuerdo en algn punto modificarlo hasta lograr una licencia a medida. Buena muestra de lo anterior es la Tabla 2.3, que recoge algunas de las licencias ms habituales. Para simplificar, el anlisis y tratamiento de las licencias de software pueden clasificar estas segn su pertenencia a uno de estos tres grupos:
8
Esta recomendacin se debe a la mencionada complejidad que entraa el desarrollar una licencia conforme al derecho.
35
Academic Free License Apache Software License Apple Public Source License Artistic license Attribution Assurance Licenses BSD license Common Public License GNU General Public License (GPL) GNU Library or "Lesser" General Public License (LGPL) IBM Public License Intel open source License Jabber open source License MIT license
Tabla 2.3 Licencias principales open source y Software Libre
Prohibicin de realizar copias de la aplicacin. Con ciertas reservas son admitidas la realizacin de copias de los programas informticos para uso privado con fines de seguridad, las llamadas copias de seguridad9. Prohibicin de realizar y distribuir modificaciones de la aplicacin. Cada licencia permite utilizar el producto en un solo equipo informtico. Un ejemplo aclaratorio de esta clusula consiste en que un usuario que adquiere una licencia de una aplicacin si tiene dos equipos informticos solo podr utilizar esa licencia en uno de ellos.
As queda regulado en el artculo 25.3 de la Ley de Propiedad Intelectual RDL 1/1996 de 12 de abril. 10 La figura legal ms prxima en Espaa sera la llamada obra colectiva. regulada en los artculos 8 y 97 de la Ley de Propiedad Intelectual, Real Decreto Legislativo 1/1996 de 12 de abril. 11 Copyleft no es lo contrario de Copyright pues la clusula Copyleft la impone el autor del programa original en uso de sus facultades de copyright.
37
FDL (Free Document License), licencia que recoge las mismas condiciones que la GPL pero adaptada al tema de la documentacin, manuales y textos derivados del software libre. LGPL (Lesser General Public License), que consiste en una modificacin de la GPL con un carcter menos restrictivo al permitir la creacin de libreras abiertas que puedan incorporarse tanto a programas libres como propietarios sin obligar a estos ltimos a cambiar de licencia.
Las caractersticas genricas de este tipo de licencias con respecto a las licencias de software propietario son: Posibilidad de instalar el software en tantas mquinas como se quiera. Aceptacin de la licencia a posteriori, utilizada una aplicacin el usuario decide si quiere redistribuirla, siguiendo la licencia inicial y, por tanto, acatndola. Posibilidad de hacer tantas copias como se quiera. No restriccin en la distribucin, incluso mediante venta12.
No obstante, hay que destacar que es en el mbito de las licencias donde mejor queda reflejada la distincin entre las dos corrientes, open source y software libre, puesto que la OSI admite licencias, como la BSD (Berkeley Systmen Distribution), que aaden determinadas restricciones a los trminos de distribucin de originales y de redistribucin de programas derivados, al eliminar la obligatoriedad de mantener el software como libre suprimiendo la clusula Copyleft. La licencia BSD tiene como principal caracterstica permitir que un programa libre pueda ser modificado obtenindose de l un programa derivado que se cierra, deja de ser libre su cdigo fuente, cambiando la licencia.
Siguiendo los principios de libre mercado la oferta y la demanda mantendrn un coste bajo o nulo, puesto que si los vendedores obtienen un margen de beneficios elevado entrarn nuevos vendedores en el mercado y la competencia har que los precios disminuyan
38
que da libre acceso al cdigo fuente, siendo posible modificar y distribuir el programa, pero no es libre en los trminos de la FSF al ser necesario pagar licencia cuando se use en proyectos comerciales. Para finalizar este apartado se identificarn las licencias a las que estn sujetas las aplicaciones open source que se van a utilizar y desarrollar en los captulos siguientes: PHP, que es uno de los lenguajes de programacin ms utilizados por la comunidad open source adopta su propia licencia, la PHP License 3.0 que puede ser consultada integramente en (www.php.net/license/3_0.txt) licencia que tomando como base la licencia BSD presenta una gran libertad en su uso y redistribucin con las nicas limitaciones que pueden resumirse en: Indicar en las redistribuciones la nota de copyright y condiciones de la licencia original. No utilizar en los programas derivados el nombre de PHP, ni como nombre ni con fines publicitarios sin permiso de PHP Group.
MySQL, considerada la base de datos por excelencia del open source, ha generado recientemente un pequeo sobresalto entre la comunidad de cdigo abierto, pues de su licencia inicial, la licencia LGPL que permite que sus libreras sean utilizadas por programas de cdigo abierto y no abierto, ha pasado en la versin MySQL 4 a la licencia GPL (www.mysql.com/products/licensing.html), que obliga a que todo cdigo que quiera utilizar las librerias oficiales de MySQL deba ser GPL, lo que supona romper la compatibilidad con PHP regida por una licencia no GPL. Finalmente MySQL AB, compaa propietaria de MySQL, ante las repercusiones que poda tener esta medida ha publicado una excepcin13 a la licencia GPL de MySQL que permite incluir las libreras en otros proyectos de cdigo abierto que usen licencia distinta a GPL. Esto supone que permitir que las libreras de acceso MySQL sean incluidas en PHP 5 como suceda hasta ahora en PHP 4.
13
La publicacin se ha realizado el 12 de marzo del 2004 y puede ser consultada ntegramente en la siguiente direccin www.mysql.com/products/foss-exception.html
39
14
El software de infraestructura, tambin llamado de base o de sistema, es aquel conjunto de programas que tienen como misin facilitar el uso del ordenador por parte de los usuarios. Entre sus funciones estn comunicar la computadora con sus perifricos, asignndolos y administrndolos y actuar como intermediario entre el hardware y el software de aplicacin. Este tipo de software suele dividirse en sistema operativo y programas de utilidades.
40
No comerciales Debian (www.debian.org), Debian GNU/Linux es junto con Redhat la distribucin de uso ms extendido. Desde el punto de vista tcnico sus
41
controles son muy rigurosos y es considerada la distribucin Linux ms estable. Las aplicaciones tienen su propio formato .deb y un cmodo instalador apt. La distribucin completa consta de ms de 8.000 paquetes con utilidades y aplicaciones de todo tipo: programas matemticos, grabadores de CD, editores de imgenes, etc. Desde su origen es una distribucin creada y mantenida por los usuarios, su licencia es GPL y es una distribucin apoyada pblicamente por la FSF y el proyecto GNU. LinEx (www.linex.org), distribucin gratuita, incluido el soporte y atencin al usuario, desarrollada y promovida por la administracin autonmica de Extremadura. Su desarrollo se basa en la distribucin GNU/Debian de la que hereda sus ventajas, con una gran variedad de software que permite cubrir todas las necesidades de un usuario medio con software libre, e intenta eliminar algunos de sus inconvenientes, facilitando al mximo la instalacin15. Guadalinex (www.guadalinex.org), distribucin gratuita desarrollada por la administracin autonmica de Andaluca fruto de la colaboracin establecida con la junta de Extremadura destinada a dar cumplimiento al Decreto 72/2003, en el que la Junta de Andaluca opta por el software libre como instrumento para el impulso de la Sociedad del Conocimiento en Andaluca. Guadalinex se desarrolla a partir de Linex de forma que LinEx y Guadalinex ofrecen sus funcionalidades con las mismas aplicaciones mantenidas en un mismo repositorio y por un nico equipo de control de calidad, diferencindose en los programas y contenidos que sean de inters solo en una de las dos comunidades. Knoppix, distribucin GNU/Linux alemana totalmente gratuita y basada en Debian que presenta como ventaja el no necesitar instalacin, puesto que permite arrancar desde el CD que puede ser descargado desde Internet (www.cylnux.org) y Slackware (www.eslack.org). Es una de las ms antiguas y conocidas distribuciones GNU/Linux gratuitas que destacan por su facilidad de instalacin y estabilidad.
La distribucin Linex ha sido reconocida dentro del apartado Linux, con el premio a la mejor distribucin de 2003 por la empresa Softonic
42
despertando un gran inters entre la comunidad open source que se ha lanzado a la bsqueda de aplicaciones libres con la calidad necesaria para sustituir a las comerciales. La oferta de software open source de aplicacin es amplia y abarca desde suites ofimticas y aplicaciones de gestin empresarial hasta gestores de correo y aplicaciones multimedia. Establecer una enumeracin de todas las aplicaciones existentes sera complicado tanto por el nmero como por la poca calidad de muchas de ellas que han comenzado a desarrollarse recientemente y requerirn un tiempo de maduracin; sin embargo, s se podra indicar dentro de cada tipo aplicaciones ya contrastadas que, por supuesto, siguen mejorndose. As, dentro de la ofimtica destaca el paquete OpenOffice (www.openoffice.org), suite ofimtica gratis y compatible con distintos sistemas operativos y diferentes arquitecturas. Est compuesto por hoja de clculo, procesador de texto, editor de frmulas, editor de presentaciones, etc., por tanto tiene todas las funcionalidades de Microsoft Office, con el que es totalmente compatible y adems incorpora otras propias como la posibilidad de exportar documentos de texto a otros formatos como Pdf, Flash, XML, etc. En el desarrollo de software de gestin empresarial los avances hechos pblicos son menores que en el resto de actividades, posiblemente por el recelo y desconfianza que todava muestra el mbito empresarial hacia herramientas que son consideradas de dominio pblico pero, que analizando la situacin real con detenimiento, son prcticamente igual de accesibles para la competencia que los productos licenciados de pago, con la ventaja de un menor coste o incluso ser gratuitas. Hoy en da no tiene sentido pensar que una empresa es la nica que utiliza en exclusiva una aplicacin, salvo determinadas aplicaciones realizadas a medida, es ms, en el mundo empresarial la dificultad no est en el acceso a la tecnologa o a un programa concreto, sino en sacar el mximo rendimiento de su uso.
Algunas aplicaciones empresariales que podran citarse son: FacturLinEx y ContaLinEx (www.gnulinex.net), herramientas de gestin liberadas y de acceso gratuito desarrolladas y cedidas por el gobierno de Extremadura. Fisterra (www.fisterra.org), herramienta ERP (Enterprise Resource Planning), que naci como aplicacin empresarial a medida, de pago y con cdigo cerrado y posteriormente se liber su cdigo bajo licencia GPL, ofrecindose de forma gratuita.
43
FacturaLUX (www.facturalux.org), que pretende ser un software ERP creado con software de cdigo abierto que permita la gestin integral de la empresa.
En cuanto a gestores de correo, como alternativas al omnipresente Microsoft Outlook, se tienen varias opciones, las ms reconocidas Evolution y Mozilla Thunderbird, anteriormente conocido como Mozilla mail, que es el cliente de correo del proyecto Mozilla. (www.mozilla.org). Por ltimo, en lo que se refiere a las aplicaciones multimedia, verdadera revolucin del software, que permiten entre otras cosas ver y escuchar audio y video, tratamiento de imgenes, etc. tambin existen aplicaciones abiertas capaces de hacer sombra a los productos de cdigo cerrado. Como principales ejemplos, en la Tabla 2.4 se recoge para cada software de cdigo cerrado un posible homlogo open source.
Cerrado MSN Messenger MSN Netmeeting WinAmp Winzip Windows Media Player Photoshop Acrobat Reader ACDSEE Abierto AMSN GnomeMeeting XmmS Gzip, zip Mplayer, Xine Gimp Gpdf GThumb Direccin http://amsn.sourceforge.net/ www.gnomemeeting.org www.xmms.org www.gnu.org/software/gzip/gzip.html www.mplayerhg.hu www.gimp.org www.purl.org/net/gpdf http://gthumb.sourceforge.net
Los ltimos proyectos open source que mayor inters han despertado entre la comunidad son KDE y Gnome, orientados a dotar al usuario de un escritorio intuitivo y amigable desarrollado con software totalmente libre: KDE, (The K Desktop Enviroment www.kde.org), es el entorno grfico desarrollado en C++ que ha constituido el escritorio tradicional en los sistemas Unix. Este desarrollo ha pasado por dos etapas muy distintas. Una inicial, desde los comienzos del proyecto, en octubre de 1996, hasta octubre de 2000 con licencia no libre en sus libreras QT, lo que gener el rechazo por parte de la comunidad open source, y la actual, a partir de octubre del 2000, con la versin KDE 2.0 en la que todo el desarrollo es software open source bajo licencia GPL. Gnome, (Gnu Network Object Model Environment www.gnome.org), surge como proyecto liderado por Miguel de Icaza y Federico Mena dentro de GNU
44
en respuesta al desarrollo no libre de KDE con el objetivo de dotar al software GNU de un escritorio libre. El proyecto est muy evolucionado y en realidad no es solo un escritorio puesto que integra distintas aplicaciones ofimticas. Recientemente la empresa Novell ha anunciado que dos de sus divisiones Ximian y SuSE, trabajarn juntas para crear un escritorio Linux comn, con las mejores caractersticas de GNOME y KDE .
Tabla 2.5 Servidores activos en Internet en ms de 5.000 sitios (noviembre 2004). Elaboracin propia a partir de datos ofrecidos por la consultora de Informacin Netcraft
45
El servidor Apache, desarrollado por ms de cien desarrolladores voluntarios dentro del proyecto Apache, gestionado por la Fundacin Apache, The Apache Software Foundation (www.apache.org), es el servidor web ms utilizado en el mundo y esto es debido a sus caractersticas: robustez, rapidez, ser multiplataforma con versiones para Linux, Win32, MacOs, Unix, modularizable, dispone de mdulos para ejecutar PHP, Perl, etc. En cuanto a las aplicaciones gestoras de bases de datos, son numerosos los ejemplos que siguen la corriente open source: MySQL, Postgrade, Sap DB, Interbase Borland,... de las cuales, merece especial mencin MySQL, que presenta como caractersticas destacadas su carcter multiplataforma, una buena integracin con PHP, licencia GPL que garantiza su libertad, gran velocidad y estabilidad. En una encuesta sobre desarrollo de bases de datos realizada por Evans Data Corporation en enero del 2004, se puso de manifiesto que SQL Server y Access continan dominando el desarrollo de bases de datos, pero las bases de datos open source estn ganando terreno. El uso de SQL Server y Access haba crecido casi un 6%, mientras que el uso de MySQL se haba incrementado ms del 30% en los seis meses anteriores a la realizacin de la encuesta. Los lenguajes de programacin son las herramientas bsicas utilizadas por los desarrolladores para crear aplicaciones web. Dentro del desarrollo web la comunidad open source parece mostrar sus predileccin por el lenguaje PHP. Aunque no se va a profundizar en este apartado en este lenguaje, por ser objeto de estudio de los prximos captulos, s se puede adelantar que se trata de un lenguaje interpretado especialmente diseado para embeber su cdigo en el HTML de las pginas web y especial facilidad para interactuar con bases de datos. Los sistemas gestores de contenido, ms conocidos como CMS (Content Management Systems) son aplicaciones desarrolladas para facilitar la creacin y gestin de portales en Internet. Estas herramientas, que sern estudiadas con ms detalle en el Captulo 18, han alcanzado una gran difusin debido a su simplicidad de uso y potencia de desarrollo; basan su funcionamiento en tres elementos fundamentales: una base de datos, por ejemplo MySQL, un servidor web como Apache y un lenguaje de programacin que permita la interaccin con la base de datos como por ejemplo PHP. Ejemplos de gestores de contenido son PHPNuke, Postnuke, Drupal,... En el Captulo 18 se darn referencias a estos productos y otro tipo de herramientas de desarrollo web basadas en PHP y MySQL.
46
En su origen las comunidades nacan del espritu de colaboracin de usuarios y desarrolladores independientes en la bsqueda de software libre y de calidad. Eran comunidades creadas y mantenidas por los usuarios. Con el tiempo el nmero de comunidades open source se ha incrementado notablemente, en gran medida debido al apoyo y soporte econmico recibido de grandes empresas como IBM a la comunidad Eclipse y Compaq a Sourceforge, por ejemplo. Las comunidades organizan su trabajo en proyectos, cada proyecto se corresponde generalmente con el desarrollo y mejora de una aplicacin concreta, tarea realizada por los usuarios de la comunidad que de forma libre deciden participar en uno o varios proyectos. Intentar enumerar las comunidades sera adems de imposible, pues continuamente aparecen nuevas iniciativas, injusto, pues se corre el riesgo de no mencionar a
47
todas. No obstante, tomando como criterios la tradicin y aos de trabajo, los proyectos desarrollados y en vas de desarrollo y los usuarios (vase Tabla 2.6) destacan especialmente dos comunidades: Sourceforge (http://sourceforge.net/) Savannah (http://savannah.gnu.org/) Comunidad SourceForge Savannah Proyectos 90.625 2.176 Usuarios registrados 952.696 31.392
Tabla 2.6 Proyectos activos y usuarios registrados de dos de las comunidades open source ms importantes a fecha de noviembre de 2004. Fuente: Web de las propias comunidades
48
utiliza, ejemplo claro es el sitio web de la Casa Blanca16 soportado con sistema operativo Linux y servidor web Apache. Y latinoamrica, con pases como Per y Chile en los que se han sucedido las propuestas de leyes que obliguen al uso exclusivo de software open source en la administracin pblica. En Europa las iniciativas no se han quedado atrs a la hora de apostar por el open source, ejemplos claros son la administracin alemana que en junio del 2002 anunci la migracin de sus sistemas a Linux, o Noruega pas que decidi no renovar las licencias de Microsoft e invertir en favor del software libre. En el caso espaol, si bien no se han producido hasta el momento iniciativas a nivel estatal17, s pueden encontrarse ejemplos en distintos gobiernos autonmicos y municipales. Destaca especialmente el caso de la Junta de Extremadura, entidad pionera de la introduccin de software libre en la administracin pblica espaola, que rescindi sus licencias de sistema operativo pertenecientes a Microsoft y ha desarrollado un sistema operativo propio, GNU/LINEX (www.linex.org), lo que ha servido de ejemplo a otras comunidades como la andaluza, que ha desarrollado el sistema Guadalinux (www.guadalinex.org), o la Generalitat Valenciana, que ha comunicado su intencin de migrar todas las aplicaciones utilizadas por sus organismos hacia el software libre.
16
Informacin tomada de Netcraft, empresa britanica de servicios de Internet reconocida internacionalmente por sus estudios sobre la Red. 17 La nica iniciativa con carcter estatal ha sido una Proposicin de Ley para promocionar el uso del software libre en la Administracin del estado en general y en las administraciones autonmicas en particular, presentada por el Grupo Mixto y debatida en el Congreso de los Diputados el 24-09-2002, sesin plenaria nmero 181, donde fue rechazada.
49
Como ejemplos de multinacionales y grandes empresas de distintos sectores econmicos que han confiado e invertido en el software open source se recogen las siguientes: Sector tecnolgico e informtico: Oracle, ha realizado la migracin de sus aplicaciones de negocio de Unix a un cluster de mquinas Intel bajo Linux. IBM, desde el ao 2001 ha realizado inversiones superiores a 1.000 millones de dlares en Linux y utiliza Apache en su aplicacin de comercio electrnico WebSphere, adems de mantener una colaboracin muy activa con la comunidad open source Eclipse como estrategia y apuesta de futuro. Hewlett-Packard/Compaq y Sun Microsystems, mantienen y dan soporte a distintas comunidades open source como opensource.compaq.com, en el caso de la primera, y sunsource.net, en el caso de la segunda.
Sector ventas y distribucin: Toyota Motor Sales Usa, eligi Linux como sistema operativo de su red de 1.200 servidores. Amazon, basa sus sistemas en la utilizacin de servidores Apache sobre Linux.
Media y comunicacin: Walt Disney Feature Animation, utiliza Linux en sus proyectos. El Pas, basa sus sistemas en Apache, PHP4 y Linux. El prestigioso grupo editor Forbes presenta como base de sus plataformas Linux y Apache y contribuye activamente con el open source Software Institute (www.oss-institute.org)
Financiero: Morgan Stanley, prestigiosa firma financiera, utiliza como sistema operativo Linux. El Banco Herrero, se sirve de Linux sobre un servidor Apache. El Banco Sabadell pas del sistema operativo Solaris 8 sobre Netscape/Enterprise 4.1 a Linux corriendo sobre un servidor Apache
50
2.6.1. VENTAJAS
Se enumeran a continuacin algunas de las ventajas que proporciona el software open source, destacando que, si bien las econmicas18 son las ms visibles, hay otras ventajas importantes: Ahorro de costes, las distribuciones de software open source son generalmente gratuitas o a un coste muy bajo, teniendo en cuenta que con sus licencias dan al usuario libertad para hacer con la aplicacin las modificaciones o distribuciones que consideren oportunas sin ningn coste aadido. El cdigo de los programas es abierto y por tanto no depende de una sola empresa desarrolladora ni de su poltica y permite total flexibilidad para adaptar el programa a las necesidades de los usuarios. Mayor calidad y seguridad en los programas. Esto es debido tanto a que el cdigo sea libre como a la metodologa de trabajo de las comunidades, que permite que un elevado nmero de programadores pueda revisar y trabajar simultneamente sobre un mismo cdigo, detectando errores que de otra manera seran difciles de detectar. Reactiva la competencia en un mercado con tendencias monopolsticas. Rapidez de desarrollo, la evolucin19 y lanzamiento de versiones mejoradas en el software open source es muy superior al software cerrado.
Beneficios que no solo se deben cuantificar como diferencia entre, el pago actual por las licencias de software y el que se pagara, en caso de ser necesario, al utilizar software open source, pues hay otras cuestiones como ahorro en costes de actualizaciones, estabilidad del sistema que repercute en la productividad, etc. 19 Atendiendo al estudio de IBM que se puede obtener integro en: http://www-1.ibm.com/linux/LinuxInSight.pdf, Linux es el sistema operativo que ms rpido ha evolucionado en la historia de la ingeniera de software.
18
51
Escucha activa a los usuarios y retroalimentacin entre la produccin del software, desarrolladores, y los usuarios mediante una relacin directa y de colaboracin.
2.6.2. INCONVENIENTES
Por supuesto no todo son ventajas, la utilizacin de este tipo de software puede tener sus inconvenientes: Dificultad en cambiar o dejar de utilizar determinadas aplicaciones de software cerrado que se han convertido en un estndar. La utilizacin de software open source no es la mejor opcin para determinadas empresas que basen su negocio en algoritmos secretos o patentados. La utilizacin de aplicaciones open source generalmente requiere, tanto para el usuario domstico como para el personal de empresas, un proceso de adaptacin y formacin, no porque las herramientas open source sean ms complicadas sino simplemente debido a que los usuarios nunca han trabajado con ellas. Existencia de proyectos de desarrollo y comunidades en algunos casos sin estructuras jerrquicas ni organizativas claras que dan al usuario sensacin de desorganizacin. Dentro del movimiento hay algunas comunidades con una tendencia excesiva a la bsqueda del elitismo que aleja al usuario domestico no tcnico.
52
El continuo incremento de usuarios pblicos y privados, de comunidades de desarrollo y de mejoras tcnicas afianzan que la corriente open source no es una moda pasajera dentro del desarrollo del software. Ms an, predicen y hacen aventurar que su verdadero esplendor est por llegar, siendo indicativo de esto mismo la creacin del Observatorio del software de fuente abierta por parte de la Unin Europea para estudiar este fenmeno en los actuales y futuros estados miembros y la elaboracin desde la UNESCO de un programa de actuaciones en apoyo del software libre. Por ltimo, las voces ms optimistas predicen en artculos y comentarios la rpida desaparicin de las compaas de software cerrado. Desde aqu, manifestar que aunque la situacin actual parece indicar que se producir un importante cambio en el mbito del software, estas compaas no tienen porqu desaparecer, aunque s posiblemente reorientar su ncleo de actividad de la produccin de software hacia la prestacin de servicios de valor aadido. No obstante, en ningn caso se puede pensar que este cambio ocurra de un da para otro sino que, como en todo periodo de transformacin, ser fruto de un proceso continuo que comienza ahora a caminar con paso firme.
53
55
se mostrar el proceso de construccin de un sencillo sitio web, tomando como referencia lo que podra ser el objetivo de una empresa ficticia, a la que se denominar Cinem@s. Esta empresa ficticia pertenece al sector del entretenimiento y dispone de un multicine, el objetivo final que persigue es ofrecer a sus clientes un cmodo servicio de informacin y reserva de localidades a travs de Internet. El primer paso para ello ser la creacin de unas sencillas pginas web de presentacin, en torno a las cuales se desarrollar posteriormente la aplicacin web deseada. La Figura 3.1 muestra la pgina web de inicio de Cinem@s, el proceso de creacin de est pgina ser explicado a lo largo del captulo, y contendr enlaces a otras pginas que se desarrollarn en la segunda parte del libro para implementar el sistema de consulta y compra de localidades.
56
y se guarda el documento con un nombre con extensin .htm o .html, ya se habr creado una primera pgina web. Dicho documento abierto desde el navegador genera una pgina como la que se puede ver en la Figura 3.2.
NOTA
Toda pgina web debe ser guardada en un documento de texto con la extensin .htm o .html..
Si se analiza detalladamente el cdigo HTML que ha producido esta pgina puede verse cmo los diferentes comandos van sealando los diferentes elementos de la
57
pgina. Por ejemplo, los comandos <H1> y </H1> sealan el inicio y el fin, respectivamente, del texto que se mostrar con formato de ttulo: Primer ejemplo de pgina web. De la misma manera, los comandos <B> y </B> encierran el texto que se mostrar en negrita.
Toda pgina web desarrollada con HTML oculta un documento de texto sin formato, texto ASCII, que incorpora todas las instrucciones o etiquetas del lenguaje HTML necesarias para conseguir que la pgina tenga la apariencia que se visualiza en el navegador. Este documento de texto que aparece oculto al usuario final, es lo que se denomina cdigo fuente de la pgina. Las herramientas de navegacin web permiten la consulta de ese cdigo fuente; por ejemplo, Internet Explorer dispone de la opcin Cdigo fuente del men Ver.
58
El antecedente ms remoto de HTML se encuentra en el lenguaje de marcado generalizado, GML, desarrollado por Charles Goldfarb, Ed Mosher y Ray Lorie dentro de IBM, en los primeros aos de la dcada de los setenta con el objetivo de dotar de un formato comn a los documentos de la empresa con independencia de su tipo. Este lenguaje fue posteriormente mejorado por sus creadores dando lugar a la primera tecnologa de informacin estandarizada y estructurada: el lenguaje de marcado generalizado estndar, SGML, que en 1986 es aceptado por la Organizacin Internacional de Estandarizacin (ISO), como un estndar. A pesar de esto, no se consigui evitar una elevada complejidad para el usuario final, que unido a un alto coste impidi que dicho lenguaje se convirtiera en un estndar aceptado, aunque s sent las bases de lo que sera posteriormente HTML. El salto cualitativo se produce en 1989 cuando Tim Berners-Lee y Anders Berglund, investigadores del Laboratorio Europeo de Fsica de Partculas (CERN), crearon un lenguaje basado en etiquetas para editar documentos con el fin de compartirlos entre diferentes equipos de investigacin que trabajaban para el CERN. Esta aplicacin simplificada del SGML se llam HTML, lenguaje de marcas de hipertexto, y se convirti por su simplicidad en el primer formato de informacin estndar de Internet, dando lugar a la aparicin del servicio ms popular de la red: el servicio web. El lenguaje HTML ha ido evolucionando mediante distintas versiones, desde la HTML 2.0 de 1994, hasta la actual, adaptando el lenguaje en cada momento a las necesidades y caractersticas de los usuarios de Internet, pasando, desde la transferencia de documentos de texto plano, a la incorporacin de posibilidades multimedia (imgenes, vdeo, Flash, applets de Java), de dinamismo (HTML Dinmico), de presentacin (CSS) y de operatividad (CGI, ASP, JSP, PHP,...) que no estaban presentes en un principio. Cambios y modificaciones no siempre realizados de forma coordinada, como ejemplo claro la implementacin de distintas etiquetas y extensiones del lenguaje en funcin del navegador, lo que provoca que en ocasiones una misma pgina no se visualice de igual forma en todos los navegadores. Con la intencin de solucionar estos problemas se cre en 1996 el consorcio W3C (www.w3.org), formado por ms de 350 organizaciones, entre las que se encuentran las principales empresas del sector: Microsoft, Netscape,... y distintos organismos pblicos internacionales como el MIT, INRIA,... con el propsito de promover el crecimiento de la Web, desarrollando especificaciones y software de referencia disponibles para todos los usuarios sin coste alguno. La tarea principal del W3C es la de recomendar a las empresas y desarrolladores interesados en la Web una serie de pautas sobre cmo deben implementarse los diferentes lenguajes (HTML, CSS, XML, etc.) y tecnologas.
59
3.3.1. NAVEGADORES
Son programas instalados en el equipo del usuario que se encargan de ejecutar las rdenes contenidas en el cdigo HTML. Cuando un usuario desea visitar una pgina web, su equipo debe conectarse con un servidor remoto y efectuar una peticin al servidor web. Como respuesta a esta peticin se inicia, a travs de la red y basndose en el protocolo HTTP, la transferencia del cdigo fuente que define la pgina. Una vez que ese cdigo llega al equipo del usuario, el navegador que este tenga instalado interpreta lnea a lnea el cdigo recibido y genera la pgina tal y como se ver finalmente. Por tanto, los navegadores web o browsers son las aplicaciones encargadas de realizar las peticiones de pginas web y otros recursos al servidor y de presentar luego los resultados de la peticin al usuario. Si adems la pgina HTML contiene imgenes, vdeos, documentos PDF u otro tipo de ficheros diferentes, el navegador es el encargado de intentar presentar en pantalla de forma correcta dichos contenidos y, si no puede hacerlo, de arrancar la aplicacin necesaria para la visualizacin de los mismos. Los navegadores ms conocidos son Internet Explorer y Netscape Comunicator, pero existen otros navegadores menos conocidos como Neoplanet, Opera, Hot Java, Mozilla, etc. Este ltimo cada vez adquiere mayor importancia, y como se indic en el Captulo 2, es el navegador estandarte de la corriente open source.
3.3.2. EDITORES
La labor de creacin de una pgina web est a mitad de camino entre la programacin y el diseo grfico o maquetacin. Aunque se utiliza un lenguaje (HTML), este est lejos de ser un lenguaje de programacin como C, C++, Java, etc. Por otro lado, crear la pgina no se reduce nicamente a buscar una combinacin de colores y colocacin de diferentes elementos multimedia con una apariencia visual atractiva.
60
Hasta el momento se ha visto que para trabajar en HTML simplemente se necesita un procesador de textos, por ejemplo el bloc de notas, con el que se crea la pgina escribiendo directamente cdigo HTML, y un navegador que interprete dicho cdigo. Pero trabajar de esta manera requiere dominar completamente el lenguaje, de ah que para facilitar la labor de creacin de pginas web se hayan desarrollado unos programas, editores de HTML, que pueden ser clasificados en dos grandes grupos: Editores WYSIWYG (What You See Is What You Get): con este tipo de editores el usuario no trabaja directamente sobre el cdigo, sino sobre un documento que muestra la apariencia de la pgina tal como llegara al usuario final (lo que tu ves es lo que tu obtienes). Se trata de editores ideales para personas que comienzan a utilizar el lenguaje HTML y quieren llegar a crear una pgina sin necesidad de dominar el lenguaje, ya que estos editores se encargan de generar automticamente ese cdigo de forma oculta para el usuario. Por supuesto, el usuario tiene la posibilidad de consultar el cdigo generado y, en algunos casos, dependiendo del editor, tambin modificarlo. Editores no WYSIWYG: en este tipo de editores, el usuario en todo momento puede ver y editar el cdigo fuente. Por supuesto, estos editores disponen de opciones que permiten generar automticamente la estructura de los diferentes elementos de la pgina y ayudan a la utilizacin de los comandos sin necesidad de que el usuario los conozca con todo detalle.
Cualquier persona que quisiera crear su pgina web sin ningn tipo de complicaciones, podra utilizar el procesador de texto Microsoft Word. Tras incluir todo el contenido, con el formato deseado, se elegira la opcin de Guardar como pgina web..., y el propio Word generara una pgina web con el cdigo fuente correspondiente. Otro tipo de editores especficamente creados para generar pginas web, como por ejemplo FrontPage, tambin permiten al usuario crear sus pginas de esta forma tan simple. En ambos casos se estara trabajando con un entorno de edicin perteneciente a la primera categora de editores (WYSIWYG). A pesar de su simplicidad de uso, estos editores tambin tienen sus inconvenientes; el principal es la falta de control por parte del usuario del cdigo generado, llegndose a generar en ocasiones un cdigo excesivamente complejo y no optimizado. Dentro de la segunda categora de editores se podran citar los siguientes: HomeSite 1stPage2000 (www.allaire.com) (www.evrsoft.com)
61
La mayora de los editores que se utilizan a un nivel profesional incorporan las dos funcionalidades o modos de edicin. Normalmente, los desarrolladores prefieren trabajar directamente sobre el cdigo y utilizar el otro modo para comprobar nicamente la apariencia final de la pgina.
62
Las metatags, se pueden agrupar segn su funcionalidad en dos bloques. El primero, formado por metatags orientadas a definir una pgina web de acuerdo con los estndares del lenguaje HTML, consiguiendo con ello que no solo los navegadores, sino tambin las aplicaciones que estos puedan necesitar para visualizar la pgina, sepan de forma clara cmo tienen que tratarla, consiguiendo as la mxima compatibilidad y accesibilidad. Y, el segundo, formado por metatags orientadas a conseguir la promocin de la pgina o sitio web.
Etiquetas de compatibilidad
Dos son las principales etiquetas que contribuyen a dotar al sitio de un correcto aspecto formal y que, an no siendo obligatorias, es al menos necesario conocer para poder interpretar su significado. La primera es la etiqueta META HTT-EQUIV="Content-Type", cuya finalidad es solucionar el problema derivado de la disparidad de caracteres e idiomas en los que se puede elaborar una pgina web. Problema, que de forma resumida, se debe a la elaboracin de una pgina en un determinado idioma y la posterior posibilidad de que dicha pgina sea solicitada por un navegador desde cualquier punto del mundo y con un idioma distinto, lo que con frecuencia impide que dicho navegador pueda interpretar correctamente todos los caracteres que componen la web. Un ejemplo claro es el carcter . Surge as la necesidad de dotar de un estndar a todos los documentos HTML, que permita indicar al navegador qu conjunto de caracteres debe utilizar para presentar las pginas. Este patrn viene dado por la metaetiqueta:
<META HTTP-EQUIV= "Content-Type" CONTENT= "text/html;charset= caracteres a usar">
donde el atributo charset fijar el conjunto de caracteres de la pgina. El navegador al recibir la pgina obtiene en la cabecera esta metaetiqueta y solicita al sistema operativo que cargue los caracteres necesarios para poder presentar la pgina tal y como se cre. Para las pginas elaboradas en castellano se deber usar el conjunto de caracteres ISO 8859-1, tambin denominado Latin1, que incluye las letras acentuadas y la letra , tanto en maysculas como en minsculas. La metaetiqueta a incluir ser entonces:
<META HTTP-EQUIV= "Content-Type" CONTENT="text/html;charset= ISO-8859-1">
Por ltimo, indicar que esta etiqueta debe situarse entre el <HEAD> y <TITLE>. 63
La segunda metaetiqueta a destacar es DOCTYPE, y permite cumplir con las recomendaciones del W3C en las que se indica la necesidad de que se declare el tipo de documento y en la versin de HTML utilizada, facilitando de esta forma la compatibilidad y accesibilidad a los navegadores. El texto de la declaracin debe colocarse al principio del documento, en la seccin de precabecera, antes de la etiqueta <HTML>, de forma que sea lo primero que recibe el navegador cliente al solicitar una pgina web. En HTML, atendiendo a las recomendaciones del consorcio W3C20, es posible establecer tres tipos diferentes de documentos: Strict: el documento debe estar elaborado de una forma estricta conforme a las reglas del estndar HTML aprobadas por la W3C para cada versin de HTML. La etiqueta para establecer este tipo de documento es la siguiente:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
El inconveniente de este tipo de definicin es que los navegadores antiguos pueden no admitirla y que su rigidez no permite errores de cdigo en la elaboracin de la pgina web. Transitional: es la declaracin utilizada con mayor frecuencia, con ella adems de incluir los elementos y atributos del HTML estricto se incorporan otros elementos no aceptados por el consorcio W3C y se dispone de ms flexibilidad a la hora de escribir el cdigo. La declaracin de este tipo de documento se consigue mediante la siguiente etiqueta:
Frameset: es la declaracin de documento a utilizar cuando la pgina utiliza marcos o frames. La declaracin se establece del siguiente modo:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
20
El consorcio W3C pone a disposicin de los desarrolladores un servicio gratuito que permite verificar y confirmar que el documento est elaborado siguiendo las directrices establecidas. El servicio est disponible en The W3C MarkUp Validation Service: http://validator.w3.org/
64
Etiquetas de promocin
An a riesgo de simplificar en exceso, se puede decir que el objetivo ltimo de una pgina web es ser visitada, y para lograrlo debe ser conocida, algo extremadamente complicado de conseguir debido a la ingente cantidad21 de sitios web en la red. Los usuarios de Internet en su bsqueda de informacin utilizan buscadores y directorios, es habitual que consulten solo las pginas que ocupan las primeras posiciones. Es por tanto un hecho que estos buscadores y directorios son la principal fuente de visitas de una web, y que la posicin que una pgina ocupa dentro de ellos es clave para conseguir visitas. A tenor de lo comentado, los desarrolladores se han esforzado primero en conocer el funcionamiento de los buscadores22 y robots y, posteriormente, desarrollar un medio de facilitar el indexado de sus pginas en las bases de datos de dichos buscadores. Surgen as una serie de metatags entre las que destacan las siguientes: META NAME="keywords", ofrece a los buscadores palabras clave (keywords) del contenido de la pgina. Su sintaxis completa es:
<META NAME="keywords" CONTENT="palabra1, palabra2, palabra3, palabra4, palabra 5, palabra6, palabra 7">
META NAME="description", permite establecer una descripcin general y concisa de la pgina, como norma general se recomienda utilizar las palabras que aparecen en las metatags keywords y no utilizar ms de 255 caracteres. La sintaxis es:
<META NAME="description" CONTENT=" Texto que forma la descripcin del sitio web .....">
21
El buscador Google, considerado en la actualidad el ms completo de la red, tiene indexadas un total de 3.300 millones de pginas web. 22 De forma resumida se puede considerar que, en funcin de la forma de operar, existen tres tipos de buscadores o robots: los que venden el posicionamiento, los que utilizan robots que leen las pginas webs, dando un peso fundamental a las metatags, e indexan las pginas en funcin de las veces que aparece un trmino y Google, que utiliza el sistema denominado pagerank en el que no importan tanto las metatags de una web y s el nmero de pginas de contenido similar que se dirigen o enlazan con ella.
65
3.5.
Antes de analizar los principales comandos de HTML es necesario conocer algunas de sus caractersticas: Los navegadores ignoran los cambios de lnea dentro del cdigo HTML, as como la existencia de ms de un espacio en blanco entre palabras. Todo comando que carezca de sentido es ignorado por el navegador sin generar ningn mensaje de error. Hay distintos tipos de navegadores e incluso un mismo navegador tiene distintas versiones, esto hace que no todos funcionen igual, por lo que la visualizacin de una misma pgina puede variar de un navegador a otro si no se respetan los estndares del lenguaje. Los comandos o etiquetas van encerrados entre los signos < > y suelen tener una orden de inicio y otra de fin con la misma forma que la de inicio pero precedida de /. Ejemplo, para sealar que un texto se debe visualizar en negrita se utiliza el comando <B> para sealar el inicio del texto y el comando </B> para el final. Para escribir los comandos en HTML es indiferente el uso de maysculas o minsculas, pues producen el mismo efecto. Si bien, es bastante comn utilizar maysculas para hacer ms identificables los comandos dentro del cdigo fuente. Los comandos o etiquetas pueden anidarse, combinarse, obteniendo como resultado la suma de los efectos de cada uno de ellos. Por ejemplo, si se desea que un texto aparezca en negrita y subrayado se podra realizar el siguiente anidamiento de comandos:
<B><U> El texto deseado </U></B>
Los comandos pueden requerir parmetros, elementos que especifican o concretan la orden indicada por el comando. Los parmetros se introducen a continuacin del inicio del comando. Por ejemplo, la etiqueta <HR> genera una lnea horizontal que permite separar partes de una pgina; este comando puede llevar los parmetros ALIGN, que indicar la posicin de la lnea (centrada, izquierda, derecha), SIZE, que indica el grosor de la lnea en pxeles, y WIDTH, que marca la longitud de la lnea.
66
Si los comandos requieren parmetros, estos pueden indicarse en cualquier orden, el valor del parmetro es asignado con el signo de igualdad y en caso de existir ms de uno, los parmetros se separan por espacios en blanco. Por ejemplo, los dos comandos siguientes seran equivalentes:
<HR SIZE=20 WIDTH=40 ALIGN=center> <HR ALIGN=center WIDTH=40 SIZE=20>
Los valores de los parmetros deben ser dados entrecomillados, salvo en el caso de que estos valores no incluyan espacios en blanco o caracteres especiales.
67