como admistrar usuarios

MySQL es un sistema de administración de bases de datos muy potente. La principal virtud es que es totalmente gratuito, por lo que es una fuerte alternativa ante sistemas como SQL u Oracle. Aquí veremos como instalar y configurar la versión de MySQL para Windows.

Muchas empresas han decidido comenzar a utiliza MySQL como gestor de bases de datos para sus proyectos Web, y se han dado cuenta de que es realmente muy poderoso, y no tiene nada que envidiarle a sus competidores. Otra de las razones es que tiene un costo nulo y se distribuye bajo licencia GNU (General Public License).

Para proceder a la instalación es necesario descargar en el sitio oficial de MySQL (http://www.mysql.com/) la versión correspondiente al sistema operativo Windows, el archivo que nosotros descargamos es mysql-3.23.36-win.zip, la última versión al momento de comenzar a escribir este artículo.

Instalación
Descomprimimos el archivo .ZIP en cualquier carpeta, ya que posee un sistema de instalación gráfico como la mayoría de los programas de la actualidad, y ejecutamos el archivo setup.exe. Este paso es realmente sencillo, ya que solamente debemos seleccionar el directorio donde se instalará (por defecto c:\mysql) y el tipo de instalación a realizar: Típica, Completa o Personalizada.

Inicialización y cambio de password
Nos dirigimos hacia el directorio c:\mysql\bin y ejecutamos el archivo winmysqladmin.exe. Aquí aparecerá una pantalla pidiendo de un nombre de usuario y un password, el sistema por default contiene los siguientes datos:

username: root
password: password


La interfaz del MySQL

Una vez ejecutado aparecerá el icono de un semáforo en la "traybar".
Para cambiar el password hacemos lo siguiente: abrimos una ventana DOS y dentro del directorio c:\mysql\bin tipeamos:

mysqladmin -u root password nuevo4_password

Administración de MySQL
Para administrar MySQL bajo Windows es recomendable utilizar una herramienta visual, uno de los más populares para este trabajo es el DBTools (disponible en forma gratuita en http://dbtools.vila.bol.com.br/). Trabajar con Dbtools es muy similar que hacerlo desde SQL Server. Una vez creada la conexión puedes administrar las tablas y usuarios de manera sencilla. Otra de las características importantes, es que incluye un asistente de importación, que ayuda a migrar de una base de datos Access, SQL, Postgresss u otra compatible con ODBC.

Los que trabajan con PHP saben que muchos ejemplos bajados de la red incluyen un archivo con extensión .sql, este se incluye de manera fácil y automática a la base de datos Mysql. Para hacerlo escribimos en el DOS (siempre dentro de mysql\bin):

mysqladmin create nombre_de_la_tabla
mysql>mysql nombre_de_la_tabla < archivo.sql

Un ejemplo de un archivo .SQL puede ser el nuke.sql, el cual se incluye con el PHPNuke. Una parte de este archivo es:

CREATE TABLE adminblock (

title varchar(60),

content text

);

INSERT INTO adminblock VALUES ('Administration','Admins can have its own box, but just one. Who need more?<br>\r\nAdd the options you like. This box will appear only if you\r\nhas been logged like Admin. No others users can view this.<br>\r\n<li><a href=admin.php>Administration</a>\r\n<li><a href=admin.php?op=logout>Logout</a>');

otra forma de configurar apache

INSTALANDO APACHE !!!!!!!!!!!!
-----------------------------------------

1-IR A LA PAGINA http://archive.apache.org/dist/httpd/binaries/win32/
2-SELECCIONAR apache_1.3.28-win32-x86-no_src.exe

3-EJECUTAR EL INSTALADOR DE APACHE
4-PONEMOS EN
NETWORK DOMANIN: 127.0.0.1
SERVER NAME: 127.0.0.1
MAIL: CUALQUIERA

5-Y SELECCIONAMOS RUN WHEN STARTED

6-ELEGIMOS INSTALACION COMPLETA
7-DEJAMOS EL DIRECTORIO QUE FIGURA

8-PROBAMOS EL APACHE PARA ELLO BUSCAMOS START APACHE IN CONSOLE (UNA PLUMA)
9-SI TODO FUNCIONA BIEN, NOS QUEDARÀ UNA PANTALLA DOS ABIERTA DONDE CORRE EL APACHE
10-ENTRAMOS A INTERNET Y TIPEAMOS http://localhost/
11-NOS DEBERÀ APARECER UNA PÀGINA DE APACHE DICIENDO QUE FUNCIONO !!!

12-AHORA CERRAMOS EL APACHE !!! PARA ELLO CERRAMOS LA VENTANA DE DOS DONDE ESTA CORRIENDO
-----------------------------
INSTALANDO PHP !!!!!!!!!!!!
-----------------------------

13-CORROBORAR QUE ESTÀ CERRADO EL APACHE !!! PARA ELLO CERRAMOS LA VENTANA DE DOS DONDE ESTA CORRIENDO

14-IR A LA PAGINA http://uk.php.net/get/php-4.3.3-Win32.zip/from/a/mirror
15-ELEGIR ar.php.net Datahost Argentina

16-BAJAR EL ARCHIVO ZIPPEADO
17-EXTRAER TODOS LOS ARCHIVOS EN C:\
18-RENOMBRAR LA CARPETA QUE C:\php-4.3.3-Win32 COMO: C:\php

19-COPIAR EL ARCHIVO C:\php\php4ts.dll a c:\WINDOWS\system32 (EN XP) o system en Windows 9x
20-SI EL ARCHIVO EXISTE, SOBREESCRIBIRLO
21-COPIAR DE IGUAL MANERA A TODOS LOS ARCHIVOS DE LA CARPETA C:\php\dlls a C:\WINDOWS\system32
22-SI EXISTIERAN, SOBREESCRIBIRLOS A TODOS

23-RENOMBRAR EL ARCHIVO C:\php\php.ini-dist COMO php.ini
24-EDITAR EL ARCHIVO php.ini
25-BUSCAR register_globals = Off y ponerlo en On
26-BUSCAR extension_dir y poner la carpeta c:/php/extensions
27-BUSCAR ;Windows Extensions
28-SACAR ; TAL CUAL FIGURA DEBAJO:
extension=php_bz2.dll
extension=php_cpdf.dll
extension=php_crack.dll
extension=php_curl.dll
extension=php_db.dll
extension=php_dba.dll
extension=php_dbase.dll
extension=php_dbx.dll
extension=php_domxml.dll
extension=php_exif.dll
extension=php_fdf.dll
extension=php_filepro.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_hyperwave.dll
extension=php_iconv.dll
;extension=php_ifx.dll
extension=php_iisfunc.dll
extension=php_imap.dll
extension=php_interbase.dll
extension=php_java.dll
extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_msql.dll
;extension=php_oci8.dll
extension=php_openssl.dll
;extension=php_oracle.dll
extension=php_pdf.dll
extension=php_pgsql.dll
extension=php_printer.dll
extension=php_shmop.dll
;extension=php_snmp.dll
extension=php_sockets.dll
;extension=php_sybase_ct.dll
extension=php_w32api.dll
extension=php_xmlrpc.dll
extension=php_xslt.dll
extension=php_yaz.dll
extension=php_zip.dll

29-CREAMOS UNA CARPETA C:\php\uploads\
30-SEGUIMOS MODIFICANDO EL php.ini Y BUSCAMOS upload_tmp_dir y le sacamos el ;
31-DEJAMOS LA LINEA COMO upload_tmp_dir = c:/php/uploads/
32-CREAMOS UNA CARPETA C:\php\sessions
33-MODIFICAMOS EL php.ini Y BUSCAMOS session.save_path = /tmp, le sacamos
el ; QUE HAY DELANTE Y DEJAMOS LA LINEA COMO session.save_path = c:/php/sessions/
34-COPIAMOS EL php.ini EN C:\WINDOWS

35-BUSCAMOS EN C:\Archivos de programa\Apache Group\Apache\conf EL httpd.conf
36-LO EDITAMOS Y BUSCAMOS LoadModule foo_module modules/mod_foo.so
37-AÑADIMOS UNA LINEA CON LO SIGUIENTE: LoadModule php4_module c:/php/sapi/php4apache.dll
38-BUSCAMOS ClearModuleList
39-AÑADIMOS DEBAJO AddModule mod_php4.c
40-BUSCAMOS IfModule mod_dir.c
41-REEMPLAZAMOS TODA LA LINEA POR DirectoryIndex index.html index.htm index.php index.php3 index.phtml
42-AGREGAMOS EN LAS LINEAS DE ABAJO
AddType application/x-httpd-php .php .php3 .phtml
AddType application/x-httpd-php-source .phps

43-IMPORTANTE !!!!! EL DIRECTORIO PREDETERMINADO PARA GUARDAR NUESTRAS
PAGINAS ES EL C:\Archivos de programa\Apache Group\Apache\htdocs

44-PROBANDO EL SERVIDOR APACHE + PHP, PARA ELLO ARRANCAMOS EL APACHE EN START APACHE IN CONSOLE
45-CREAMOS UN ARCHIVO info.php en C:\Archivos de programa\Apache Group\Apache\htdocs
EDITANDO LA SIGUIENTE LINEA Y GUARDAMOS LOS CAMBIOS

<? phpinfo(); ?>
46-NOS DEBE APARECER LA PÀGINA DE PHP !!!!
------------------------------------
INSTALANDO MYSQL !!!!!!!!!!!!!
------------------------------------
47-ENTRAMOS A http://www.mysql.com/get/Downloads/MySQL-4.0/mysql-4.0.17-win.zip/from/pick
48-SELECCIONAMOS Argentina [MESI Hosting] HTTP
49-EXTRAER LOS ARCHIVOS EN CUALQUIER CARPETA
49-INSTALARLO EN c:\php\mysql
50-LUEGO ENTRAMOS EN c:\php\mysql\bin Y EJECUTAMOS winmysqladmin.exe
51-NOS PIDE UN USUARIO Y CONTRASEÑA.
52-SI SE PONE EL SEMÀFORO EN VERDE ABAJO DE TODO A LA DERECHA ESTÀ TODO OK !!
------------------------------------
INSTALANDO PHPMYADMIN !!!!!!!!!!!!
------------------------------------

53-ENTRAMOS A http://www.phpmyadmin.net/home_page/downloads.php
54-ELEGIMOS phpMyAdmin-2.5.4-php.zip
55-ELIJO CUALQUIERA DE LOS MIRROR'S
56-EXTRAER TODOS LOS ARCHIVOS EN LA CARPETA C:\Archivos de programa\Apache Group\Apache\htdocs
EN UNA CARPETA C:\Archivos de programa\Apache Group\Apache\htdocs\phpmyadmin

57-EDITAMOS EL ARCHIVO config.inc.php C:\Archivos de programa\Apache Group\Apache\htdocs\phpmyadmin
58-SE VÈ TODO FULERO PERO NO IMPORTA
59-BUSCAMOS $cfg['PmaAbsoluteUri'] =
60-PONEMOS http://localhost/phpmyadmin/ DENTRO DE LAS COMILLAS
61-BUSCAMOS blowfish_secret Y PONEMOS CUALQUIER COSA DENTRO DE LAS COMILLAS
62-GUARDAMOS EL ARCHIVO

63-ARRANCAMOS EL APACHE
64-ENTRAMOS A http://localhost/phpmyadmin/index.php

65-ENTRAMOS EN EL LINK PRIVILEGIOS
66-AGREGAMOS UN USUARIO, CON SU PASSWORD, ELEGIMOS CUALQUIER SERVIDOR Y ASIGNAMOS TODOS LOS PRIVILEGIOS
67-TILDAMOS TODOS LOS ATRIBUTOS
68-VOLVEMOS A LA ZOLAPA PRIVILEGIOS
69-OJO !!!!!!!! NO OLVIDAR !!!!!!!!!
70-OJO !!!!!!!! NO OLVIDAR !!!!!!!!!
71-CLICKEARRRRRRRR !!!!!!!! ------------ cargar la página de privilegios nuevamente antes de continuar.
72-NO BORRAR NINGUN USUARIO ROOT !!!!!!!!!!!!

66-AGREGAMOS OTRO USUARIO CON SU PASSWORD, PERO ELEGIMOS SERVIDOR LOCAL !!! Y ASIGNAMOS TODOS LOS PRIVILEGIOS
67-TILDAMOS TODOS LOS ATRIBUTOS
68-VOLVEMOS A LA ZOLAPA PRIVILEGIOS
70-OJO !!!!!!!! NO OLVIDAR !!!!!!!!!
71-CLICKEARRRRRRRR !!!!!!!! ------------ cargar la página de privilegios nuevamente antes de continuar.
72-NO BORRAR NINGUN USUARIO ROOT !!!!!!!!!!!!
73-CERRAMOS PHPMYADMIN
74-CERRAMOS APACHE
75-EDITAMOS EL ARCHIVO config.inc.php EN C:\Archivos de programa\Apache Group\Apache\htdocs\phpmyadmin
76-BUSCAMOS $cfg['Servers'][$i]['auth_type'] = 'config'
77-DONDE DICE root ENTRE COMILLAS PONER EL USUARIO CREADO Y LA CLAVE QUE PUSIMOS PARA DICHO USUARIO
78-CIERRO TODO Y PRUEBO

consifurar apache y mysql

Yo les recomiendo para empezar bajarse e instalar el FoxServ 3.0 de aca http://sourceforge.net/projects/foxserv/, te instala todo Apache, PHP, MySQL, Perl, etc. es muy fácil de instalar y de configurar.

 

 

 

INSTALACION DE SERVIDOR APACHE EN WINDOWS XP + PHP + MySql + PhpAdmin
      ----------- -- -------- ------ -- ---------- - --- - ----- - --------

------------------------------------------------
INSTALANDO IIS - APACHE Y PHP !!!!!!!!!!!!
------------------------------------------------

1-INSTALAR IIS DEL CD DE INSTALACION DE XP
   (OPCION INSTALAR COMPONENTES OPCIONALES DE WINDOWS)
2-IR A LA PAGINA http://archive.apache.org/dist/httpd/binaries/win32/
3-SELECCIONAR apache_1.3.28-win32-x86-no_src.exe
4-EJECUTAR EL INSTALADOR DE APACHE
5-PONEMOS EN
    NETWORK DOMANIN: 127.0.0.1
    SERVER NAME: 127.0.0.1
    MAIL: CUALQUIERA
    Y SELECCIONAMOS RUN WHEN STARTED
6-IR A LA PAGINA http://uk.php.net/get/php-4.3.3-Win32.zip/from/a/mirror
7-ELEGIR ar.php.net Datahost Argentina
8-EXTRAER TODOS LOS ARCHIVOS EN C:\
9-RENOMBRAR LA CARPETA QUE QUEDÒ COMO: C:\php
10-RENOMBRAR EL ARCHIVO C:\php\php.ini-dist COMO php.ini
11-EDITAR EL ARCHIVO php.ini
12-BUSCAR register_global y ponerlo en On
13-BUSCAR extension_dir y poner la carpeta c:/php/extensions
14-SACAR ; TAL CUAL FIGURA DEBAJO:
    extension=php_bz2.dll
    extension=php_cpdf.dll
    extension=php_crack.dll
    extension=php_curl.dll
    extension=php_db.dll
    extension=php_dba.dll
    extension=php_dbase.dll
    extension=php_dbx.dll
    extension=php_domxml.dll
    extension=php_exif.dll
    extension=php_fdf.dll
    extension=php_filepro.dll
    extension=php_gd2.dll
    extension=php_gettext.dll
    extension=php_hyperwave.dll
    extension=php_iconv.dll
    ;extension=php_ifx.dll
    extension=php_iisfunc.dll
    extension=php_imap.dll
    extension=php_interbase.dll
    extension=php_java.dll
    extension=php_ldap.dll
    extension=php_mbstring.dll
    ;extension=php_mcrypt.dll
    extension=php_mhash.dll
    extension=php_mime_magic.dll
    extension=php_ming.dll
    extension=php_mssql.dll
    extension=php_msql.dll
    ;extension=php_oci8.dll
    extension=php_openssl.dll
    ;extension=php_oracle.dll
    extension=php_pdf.dll
    extension=php_pgsql.dll
    extension=php_printer.dll
    extension=php_shmop.dll
    ;extension=php_snmp.dll
    extension=php_sockets.dll
    ;extension=php_sybase_ct.dll
    extension=php_w32api.dll
    extension=php_xmlrpc.dll
    extension=php_xslt.dll
    extension=php_yaz.dll
    extension=php_zip.dll

15-CREAMOS UNA CARPETA C:\php\uploads\
16-SEGUIMOS MODIFICANDO EL php.ini Y BUSCAMOS upload_tmp_dir y le sacamos el ;
17-DEJAMOS LA LINEA COMO upload_tmp_dir = c:/php/uploads/
18-CREAMOS UNA CARPETA C:\php\sessions
19-MODIFICAMOS EL php.ini Y BUSCAMOS session.save_path, le sacamos
   el ; QUE HAY DELANTE Y DEJAMOS LA LINEA COMO session.save_path = c:/php/sessions/
20-COPIAMOS EL php.ini EN C:\WINDOWS
21-BUSCAMOS EN C:\Archivos de programa\Apache Group\Apache\conf EL httpd.conf
22-LO EDITAMOS Y BUSCAMOS LoadModule foo_module modules/mod_foo.so
23-AÑADIMOS UNA LINEA CON LO SIGUIENTE: LoadModule php4_module c:/php/sapi/php4apache.dll
24-BUSCAMOS ClearModule
25-AÑADIMOS DEBAJO AddModule mod_php4.c
26-BUSCAMOS IfModule mod_dir.c
27-REEMPLAZAMOS TODA LA LINEA POR
   DirectoryIndex index.html index.htm index.php index.php3 index.phtml
28-AGREGAMOS EN LAS LINEAS DE ABAJO AddType application/x-httpd-php .php .php3 .phtml
         AddType application/x-httpd-php-source .phps
29-IMPORTANTE !!!!! EL DIRECTORIO PREDETERMINADO PARA GUARDAR NUESTRAS
    PAGINAS ES EL C:\Archivos de programa\Apache Group\Apache\htdocs



------------------------------------
INSTALANDO MYSQL !!!!!!!!!!!!!
------------------------------------

30-ENTRAMOS A http://www.mysql.com/get/Downloads/MySQL-4.0/mysql-4.0.17-win.zip/from/pick
31-LUEGO SELECCIONAMOS DONDE DICE
   http://www.mysql.com/get/Downloads/MySQL-4.0/mysql-4.0.17-win.zip/from/pick
32-SELECCIONAMOS Argentina [MESI Hosting] HTTP
33-INSTALARLO EN c:\php\mysql
34-LUEGO ENTRAMOS EN c:\php\mysql\bin Y EJECUTAMOS winmysqladmin.exe


------------------------------------
INSTALANDO PHPMYADMIN !!!!!!!!!!!!
------------------------------------

35-ENTRAMOS A http://www.phpmyadmin.net/home_page/downloads.php
36-ELEGIMOS phpMyAdmin-2.5.4-php.zip
37-EXTRAER TODOS LOS ARCHIVOS EN LA CARPETA
   C:\Archivos de programa\Apache Group\Apache\htdocs
38-EDITAMOS EL ARCHIVO config.inc.php
   C:\Archivos de programa\Apache Group\Apache\htdocs\phpmyadmin
39-BUSCAMOS $cfg['PmaAbsoluteUri'] =
40-PONEMOS http://localhost/phpmyadmin/ DENTRO DE LAS COMILLAS
41-BUSCAMOS blowfish_secret Y PONEMOS CUALQUIER COSA
42-GUARDAMOS EL ARCHIVO
43-ENTRAMOS A http://localhost/phpmyadmin/index.php
44-ENTRAMOS EN EL LINK PRIVILEGIOS
45-AGREGAMOS UN USUARIO Y ASIGNAMOS TODOS LOS PRIVILEGIOS
46-TILDAMOS TODOS LOS ATRIBUTOS
47-VOLVEMOS A LA ZOLAPA PRIVILEGIOS
50-CLICKEAR ------------> cargar la página de privilegios nuevamente antes de continuar.
51-NO BORRAR NINGUN USUARIO ROOT !!!!!!!!!!!!
52-EDITAMOS EL ARCHIVO config.inc.php EN
   C:\Archivos de programa\Apache Group\Apache\htdocs\phpmyadmin
53-BUSCAMOS $cfg['Servers'][$i]['auth_type'] = 'config'
54-ESTE LO DEJAMOS IGUAL Y CAMBIAMOS USUARIO Y CLAVE

 

 

 

instalación de la base de datos MySQL y ayudas basicas

Pasos a seguir para la instalación de la base de datos MySQL y algunas ayudas básicas para comenzar con buen pie.


Uno de los puntos fuertes de las páginas en PHP es la posibilidad de explotar bases de datos mediante funciones de una simplicidad y potencia muy agradecidas. Estas bases de datos pueden servir a nuestro sitio para almacenar contenidos de una forma sistemática que nos permita clasificarlos, buscarlos y editarlos rápida y fácilmente.

Una base de datos es sencillamente un conjunto de tablas en las que almacenamos distintos registros (artículos de una tienda virtual, proveedores o clientes de una empresa, películas en cartelera en el cine...). Estos registros son catalogados en función de distintos parámetros que los caracterizan y que presentan una utilidad a la hora de clasificarlos. Así, por ejemplo, los artículos de una tienda virtual podrían catalogarse a partir de distintos campos como puede ser un número de referencia, nombre del artículo, descripción, precio, proveedor...

La base de datos más difundida con el tandem UNIX-Apache es sin duda MySQL. Como para el caso de Apache, una versión para Windows está disponible y puede ser descargada gratis.

Su puesta a punto no entraña mucha dificultad. Una vez instalado el programa podemos ejecutar nuestras ordenes en modo MS-DOS. Para ello abrimos una ventana MS-DOS y nos colocamos en el directorio bin de mysql. En este directorio se encuentran los archivos ejecutables. Aquí habrá que encontrar un archivo llamado mysqld. En el caso de la versión más actual durante la redacción de este articulo este archivo es llamado mysqld-shareware. Una vez ejecutado este archivo podemos ejecutar el siguiente: mysql.

Llegados a este punto veremos cómo un mensaje de bienvenida aparece en nuestra pantalla. En estos momentos nos encontramos dentro de la base de datos. A partir de ahí podemos realizar todo tipo de operaciones por sentencias SQL.

No vamos a entrar en una explicación pormenorizada del funcionamiento de esta base de datos ya que esto nos daría para un manual entero. Daremos como referencia nuestro tutorial de SQL a partir del cual se puede tener una idea muy práctica de las sentencias necesarias para la creación y edición de las tablas. También existe una documentación extensa en inglés en el directorio Docs de MySQL. A modo de resumen, aquí os proponemos además las operaciones más básicas que, combinadas nuestro tutorial de SQL pueden dar solución a gran parte de los casos que se os presenten:

InstrucciónDescripción
Show databases;Muestra el conjunto de bases de datos presentes en el servidor
Use nombre_de_la_baseDetermina la base de datos sobre la que vamos a trabajar
Create Database nombre_de_la_base;Crea una nueva bd con el nombre especificado
Drop Database nombre_de_la_base;Elimina la base de datos del nombre especificado
Show tables;Muestra las tablas presentes en la base de datos actual
Describe nombre_de_la_tabla;Describe los campos que componen la tabla
Drop Table nombre_de_la_tabla;Borra la tabla de la base de datos
Load Data Local Infile "archivo.txt" Into Table nombre_de_la_tabla;Crea los registros de la tabla a partir de un fichero de texto en el que separamos por tabulaciones todos los campos de un mismo registro.
QuitSalir de MySQL


Para evitarnos el tener que editar nuestras tablas directamente sobre archivos de texto, puede resultar muy práctico usar cualquier otra base de datos con un editor y exportar a continuación la tabla en un archivo de texto configurado para dejar tabulaciones entre cada campo. Esto es posible en Access por ejemplo pinchando con el botón derecho sobre la tabla que queremos convertir y eligiendo la opción exportar. Una ventana de dialogo aparecerá en la que elegiremos guardar el archivo en tipo texto. El paso siguiente será elegir un formato delimitado por tabulaciones sin cualificador de texto.

Otra posibilidad que puede resultar muy práctica y que nos evita trabajar continuamente tecleando órdenes al estilo de antaño es servirse de programas en PHP o Perl ya existentes y descargables en la red. El más popular sin duda es phpMyAdmin. Este tipo de scripts son ejecutados desde un navegador y pueden ser por tanto albergados en nuestro servidor o empleados en local para, a partir de ellos, administrar MySQL de una forma menos sufrida.

Asimismo, dentro del directorio bin de MySQL, podemos encontrar una pequeña aplicación llamada MySqlManager. Se trata de una interface windows, más agradable a la vista y al uso que la que obtenemos ejecutando el archivo mysql. En este caso, las sentencias SQL deben realizarse sin el punto y coma final.

PuTTY

El paquete de PuTTY incluye:

PuTTY (El cliente Telnet y SSH)
PSCP (cliente de SCP, es decir copia de archivo segura mediante linea de comando)
PSFTP (cliente de SFTP, es decir sesiones de transferencia de archivos semejantes al ftp)
PuTTYtel (cliente Telnet solamente)
Plink (un interfaz de línea de comando al back-end de PuTTY )
Pageant (un agente de la autentificación de SSH para la PuTTY , PSCP y Plink)
PuTTYgen (una utilidad de generación de claves RSA).
PuTTY es gratuito. No dude en descargar PuTTY

Putty
Sistema Operativo: Windows 95/98/Me/NT/XP/2000
Licencia: OpenSource
 
 

Instalando Apache en Windows

http://nkieto.f2o.org/blog/archivos/000039.php

tutoriales

http://www.itlp.edu.mx/publica/tutors.htm

 

 

programacion de los tuxtlas

http://www.programacion.gt.vg/

paginas de consulta variada relacionado a informaticos

http://www.mmug.cl/baul.php

 

http://72.14.207.104/search?q=cache:hAI41JTEqcwJ:www.virtual.epm.br/material/healthcare/spanish/A0202.pdf+estandares+de+factore+y+jure&hl=es&gl=mx&ct=clnk&cd=1

 

 

http://ditec.um.es/laso/docs/tut-tcpip/3376c214.html

 

http://www.monografias.com/trabajos/soredes/soredes.shtml

 

http://www.solomanuales.org/manuales_sistemas_operativos-manuall156.htm

 

http://www.tesco.edu.mx/pdf/CentroComunitarioDigitalTESCO.pdf

 

http://fmc.axarnet.es/redes/tema_04.htm

 

http://www.monografias.com/trabajos5/sisop/sisop.shtml

 

http://www.monografias.com/trabajos/maudisist/maudisist.shtml

 

http://vbarreto.tripod.com.ve/keys/audi.html

 

http://www.linuxparatodos.net/geeklog/staticpages/index.php?page=19-0-como-squid-general

 

http://www.pello.info/filez/firewall/iptables.html

 

http://es.tldp.org/Tutoriales/doc-servir-web-escuela/doc-servir-web-escuela-html/x518.html

 

http://es.tldp.org/Tutoriales/TutorialLinux/TutorialLinux/linux_files/onlyfile.html#InstTGZ

 

http://programas.bancora.com/programas6.php

 

http://programas.bancora.com/programas6.php

 

http://www.hispamp3.com/programas/programa.php?programa=379

 

http://www.zator.com/Hardware/H12_4_2.htm

 

http://support.microsoft.com/default.aspx?scid=kb%3Bes%3B118623

 

http://correo.cablevision.net.mx:100/es/dirmac.html

 

http://www.zator.com/Hardware/H12_4W1.htm

 

http://www.adslayuda.com/Zyxel650-20.html

 

http://www.itapizaco.edu.mx/paginas/TutorialRedes/Rede196.html#intro

 

http://www.htmlweb.net/linux/manual/linux_6.html

 

http://www.infor.uva.es/~jvegas/docencia/ar/cableado.pdf

 

http://www.informatica.utp.ac.pa/cable1.htm

 

http://translate.google.com/translate?hl=es&sl=en&u=http://www.videolan.org/vlc/&prev=/search%3Fq%3Dvlc%26hl%3Des%26lr%3D

 

download apache

 http://httpd.apache.org/download.cgi

Cuando se está programando una página o aprendiendo a programar para hacer pruebas, muchos usuarios quieren que PHP funcione de una forma local, es decir, que quieren que sus scripts funcionen en su propio ordenador sin necesidad de tener que subir los archivos a un servidor (gratuito o de pago). Así pues, con éste artículo explicaré como instalar Apache y PHP en tu ordenador.


 

Para éste articulo voy a instalar la versión Apache 1.3.34 y PHP 5.0.3 (aunque también explicaré las diferencias en la instalación para PHP 4). Ya verás como no es tan dificil como parece al principio, o habrás leido por ahi. Empecemos por el principio, lo primero, descargate la versión de Apache 1.3.34 en su versión para windows. Para ello podemos acceder por la siguiente URL: http://httpd.apache.org/download.cgi

Instalación de Apache

Bien, ya tienes descargada la versión de Apache, ejecuta el .exe que te has descargado y vamos a seguir los pasos de la instalación:

Instalación de Apache

Típica pantalla de bienvenida al Asistente para la instalación de Apache 1.3.34, pulsamos 'Next >' para continuar la instalación;

Instalación de Apache

Lo mismo de siempre, leemos la licencia de Apache, y si estamos de acuerdo seleccionamos la opción 'I accept the terms in the license agreement' (Acepto los terminos de la licencia) y se activará el botón 'Next >', pulsamos sobre él y continuamos;

Instalación de Apache

Ésta pantalla es información sobre Apache, no viene de más leersela antes de continuar...

Instalación de Apache

Bien, aquí ya es lo importante de la instalación.

Network Domain : 127.0.0.1
Server Name : 127.0.0.1
Administrator's Email Address : nuestro e-mail, aunque no es totalmente necesario.
Run when started manually, only for me . Seleccionamos esta opción.

La IP 127.0.0.1 es la dirección IP asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost . Es importante decir que a la hora de probar tus scripts en modo local, da igual que pongas 127.0.0.1 o localhost. Finalmente, recordar que el Apache se instala por defecto en la carpeta: C:\Archivos de programa\Apache Group\Apache\. Continuamos con la instalación hasta llegar a la última ventana;

Instalación de Apache

Al pulsar sobre Install se terminará de instalar Apache en tu ordenador, esto puede tardar algun minuto.Bien, ahora vamos a instalar el PHP. Asegúrate ahora de tener cerrado el Apache.

Dependiendo de la versión de PHP que quieras instalar sigue una forma u otra, están las dos explicadas.

· Instalar PHP 5
· Instalar PHP 4

Instalar PHP 5
Perfecto, hasta ahora lo que hemos hecho es intalar Apache 1.3.34 en nuestro ordenador, bien, ahora la explicación para instalar PHP 5 ( y la explicación para PHP 4). Procedemos a descargar el PHP para Windows. El archivo está localizado en la sección Downloads, apartado Windows Binaries, y es el Zip Package (no el installer, aunque éste ocupe menos luego no nos servirá). Para la versión 5.0.3, que es la versión disponible a fecha de actualización de este manual, es: PHP 5.0.3 zip package [7,433Kb] .

Una vez descargado todo el ZIP, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor (PHP, MySQL...), por ejemplo nos creamos una carpeta en la raíz del disco duro y que quede así: C:\Servidor\ Dentro de esta carpeta nos creamos otra carpeta y la llamamos PHP. Luego extraemos los archivos del ZIP dendro de esa carpeta PHP, tal que los contenidos del ZIP quedarán dentro de la ruta C:\Servidor\PHP\

Y ahora hay que coger el todos los archivos DLL localizados en la carpeta principal C:\Servidor\PHP\ y copiarlos al directorio System (en Windows 9x) o System32 (NT,2000,XP,2003) de la carpeta del Windows (los archivos DLL contenidos en la carpeta EXT no hace falta copiarlos). Tan solo hace falta copiar los de la siguiente imagen rodeados con el rectángulo de color rojo:

Una vez copiados estos archivos en la correspondiente carpeta de Windows toca configurar el php.ini (está explicado un poco más abajo en éste articulo)

Instalar PHP 4
Procedemos a descargar el PHP para Windows. El archivo está localizado en la sección Downloads, apartado Windows Binaries, y es el Zip Package (no el installer, aunque éste ocupe menos luego no nos servirá). Para la versión 4.3.10, que es la versión disponible a fecha de actualización de este manual, es: PHP 4.3.10 zip package [7,405Kb] . Según vayan saliendo nuevas versiones podrás irlas encontrando en la citada sección downloads.

Una vez descargado todo el ZIP, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor (PHP, MySQL...), por ejemplo nos creamos una carpeta en la raíz del disco duro y que quede así: C:\Servidor\ Ahora extraemos los archivos del ZIP de PHP dendro de esa carpeta. En este caso se crea la carpeta C:\Servidor\php-4.3.10-Win32\ pero como no nos gusta su nombre procedemos a renombrarla a C:\Servidor\PHP\

Y ahora hay que coger el php4ts.dll (localizado en C:\Servidor\PHP\php4ts.dll ) y copiarlo al directorio System (en Windows 9x) o System32 (NT,2000,XP,2003) de la carpeta del Windows. Si hay otro archivo en System o System32 lo sobreescribimos. Igualmente coger los archivos que están en la carpeta C:\Servidor\PHP\dlls\ y copiarlos a la carpeta System o System32 igual que hicimos con el archivo php4ts.dll

 

Configuración del archivo php.ini
Al igual que antes, según la versión de PHP que quieras instalar sigue unos pasos o los otros.

· Configurar php.ini para PHP 5
· Configurar php.ini para PHP 4

Configurar php.ini para PHP 5
El siguiente paso es configurar el php.ini. Renombramos o copiamos el archivo C:\Servidor\PHP\php.ini-dist y le ponemos php.ini Ahora lo editamos con el mismo block de notas. Si lo necesitáramos (lee antes la explicación), editamos la línea register_globals = Off y la colocamos el valor: register_globals = On

¿Qué hago con register_globals? ¿ON u OFF?
Activar esta directiva nos permite asumir que las variables son globales y pueden llegar por cualquier método (POST, GET, COOKIE, SERVER, etc). Así, por ejemplo, si utilizamos una variable global de sesión o cookie se puede suplantar fácilmente mediante una variable por url, con lo cual nuestro script no es seguro. Un buen programador de PHP tendría la directiva en OFF y usaría los arrays globales ($HTTP_X_VARS) o los superglobales $_POST, $_GET, etc., que están disponibles a partir de la versión 4.1.X de PHP. ¿Y por qué? Pues por esos temas de seguridad en los script y porque debemos acostumbrarnos a no manejar variables globales ya que en un futuro el PHP tendrá la opción en OFF por defecto y no podremos cambiarla. Sin embargo, por temas de compatibilidad con script antiguos o que hagan uso de variables globales, podría interesarnos activar esta característica, pero repito que lo deseable sería tenerla en OFF y hacer uso de los arrays globales o superglobales.

A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del php.ini buscamos extension_dir y le ponemos la carpeta que contiene los archivos php_xxx.dll , que por defecto es la carpeta ext dentro de PHP. IMPORTANTE: durante toda la configuración de directorios, debes utilizar esta barra "/" y no esta "\", además de ponerlo entre comillas. O sea, que debe quedar así:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/Servidor/PHP/ext/"

Además podemos activar las extensiones que queramos o necesitemos, para lo cual buscamos Windows Extensions y para cargar las extensiones les quitamos el ; de delante. Por ejemplo, si quisiéramos cargar la extensión gd2.dll (para manejar las funciones PHP relativas a imágenes) deberíamos cambiar ;extension=php_gd2.dll por extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el Manual oficial de PHP . Como nota adicional, resaltar que hay algunas extensiones que requieren de librerías extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscar dichas librerías. No actives todas las librerías a diestro y siniestro porque luego saldrán errores de que no se encuentra tal archivo; antes de instalar una librería, comprueba que en la carpeta de PHP tienes los archivos DLL correspondientes.

IMPORTANTE : la librería php_mysql.dll es la que permite manejar las funciones relacionadas con MySQL, y por defecto en PHP5 viene desactivada, por tanto vamos a activarla de la forma que indicamos antes: buscamos ;extension=php_mysql.dll y le quitamos el ; de delante.

Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos indicar el directorio donde los archivos se almacenarán temporalmente. Para ello buscamos upload_tmp_dir y le damos el valor de una carpeta que exista. Por ejemplo, en nuestro directorio C:\Servidor\PHP\ creamos una carpeta uploads, por lo que quedará algo así:

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "C:/Servidor/PHP/uploads/"

Si queremos cambiar el tamaño máximo de los archivo que pueden subirse via HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Para trabajar con sesiones, debemos especificar un directorio donde se guarden los archivos temporales. Al igual que 2 pasos antes, buscamos session.save_path y le damos el valor de un directorio que exista (o lo creamos):

session.save_path = "C:/Servidor/PHP/sessions/"

A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.

¡Ahora vamos a decirle al Apache que tenemos el PHP! - Configurar httpd.conf

 

Configurar el php.ini para PHP 4
El siguiente paso es configurar el php.ini. Renombramos o copiamos el archivo C:\Servidor\PHP\php.ini-dist y le ponemos php.ini Ahora lo editamos con el mismo block de notas. Si lo necesitáramos (lee antes la explicación), editamos la línea register_globals = Off y la colocamos el valor: register_globals = On

¿Qué hago con register_globals? ¿ON u OFF?
Activar esta directiva nos permite asumir que las variables son globales y pueden llegar por cualquier método (POST, GET, COOKIE, SERVER, etc). Así, por ejemplo, si utilizamos una variable global de sesión o cookie se puede suplantar fácilmente mediante una variable por url, con lo cual nuestro script no es seguro. Un buen programador de PHP tendría la directiva en OFF y usaría los arrays globales ($HTTP_X_VARS) o los superglobales $_POST, $_GET, etc., que están disponibles a partir de la versión 4.1.X de PHP. ¿Y por qué? Pues por esos temas de seguridad en los script y porque debemos acostumbrarnos a no manejar variables globales ya que en un futuro el PHP tendrá la opción en OFF por defecto y no podremos cambiarla. Sin embargo, por temas de compatibilidad con script antiguos o que hagan uso de variables globales, podría interesarnos activar esta característica, pero repito que lo deseable sería tenerla en OFF y hacer uso de los arrays globales o superglobales.

A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del php.ini buscamos extension_dir y le ponemos la carpeta que contiene los archivos php_xxx.dll , que por defecto es la carpeta extensions dentro de PHP. IMPORTANTE: durante toda la configuración de directorios, debes utilizar esta barra "/" y no esta "\", además de ponerlo entre comillas. O sea, que debe quedar así:

; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/Servidor/PHP/extensions/"

Además podemos activar las extensiones que queramos o necesitemos, para lo cual buscamos Windows Extensions y para cargar las extensiones les quitamos el ; de delante. Por ejemplo, si quisiéramos cargar la extensión gd2.dll (para manejar las funciones PHP relativas a imágenes) deberíamos cambiar ;extension=php_gd2.dll por extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el Manual oficial de PHP . Como nota adicional, resaltar que hay algunas extensiones que requieren de librerías extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscar dichas librerías. No actives todas las librerías a diestro y siniestro porque luego saldrán errores de que no se encuentra tal archivo; antes de instalar una librería, comprueba que en la carpeta de PHP tienes los archivos DLL correspondientes.

Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos indicar el directorio donde los archivos se almacenarán temporalmente. Para ello buscamos upload_tmp_dir y le damos el valor de una carpeta que exista. Por ejemplo, en nuestro directorio C:\Servidor\PHP\ creamos una carpeta uploads, por lo que quedará algo así:

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir = "C:/Servidor/PHP/uploads/"

Si queremos cambiar el tamaño máximo de los archivo que pueden subirse via HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M

Para trabajar con sesiones, debemos especificar un directorio donde se guarden los archivos temporales. Al igual que 2 pasos antes, buscamos session.save_path y le damos el valor de un directorio que exista (o lo creamos):

session.save_path = "C:/Servidor/PHP/sessions/"

A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.

¡Ahora vamos a decirle al Apache que tenemos el PHP! - Configurar httpd.conf

Configuración del archivo httpd.conf de Apache
Como he hecho antes, os explicaré la forma de configurar el httpd.conf de Apache 1.3.X tanto para PHP 4 como para PHP 5. Empecemos. Hay que editar el archivo httpd.conf que encontramos en la carpeta Conf dentro del directorio del Apache. Abrelo con el bloc de notas o con un editor de texto cualquiera.

Buscamos en el archivo la cadena de texto Dynamic Shared Object (DSO) Support que es donde se cargan los módulos. Ahí vamos a cargar el módulo de PHP para Apache, dando la dirección del archivo php4apache.dll (PHP4) o php5apache.dll (PHP5) que lo contiene. Encontramos hasta un ejemplo:

# Example:
# LoadModule foo_module modules/mod_foo.so
#

Y ahora añadimos justo debajo de esas lineas lo siguiente:

- Si estamos instalando PHP4 :

LoadModule php4_module C:/Servidor/PHP/sapi/php4apache.dll

- Si estamos instalando PHP5 :

LoadModule php5_module C:/Servidor/PHP/php5apache.dll

De tal manera que para PHP4 tiene que quedar así:

# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php4_module C:/Servidor/PHP/sapi/php4apache.dll

Y para PHP5 tiene que quedar así:

# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule php5_module C:/Servidor/PHP/php5apache.dll

Ahora bajamos un poco por el httpd.conf y llamamos al módulo mod_php4.c (busca la esa cadena de texto con el buscador del editor, es más rápido) en caso de que estemos instalando PHP4 o al módulo mod_php5.c si estamos instalando PHP5 , de tal manera que para PHP4 quede así:

ClearModuleList
AddModule mod_php4.c
#AddModule mod_vhost_alias.c

Y para PHP5 debe quedar así:

ClearModuleList
AddModule mod_php5.c
#AddModule mod_vhost_alias.c

Vale, ahora buscamos en el httpd.conf el modulo mod_dir.c y nos sale esto:

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>

Modificamos la línea central para que si entramos en un directorio tipo http://127.0.0.1/directorio/ nos autoejecute el index predeterminado (si existe) y no nos salga un mensaje de error. Puedes usar más nombres si lo prefieres. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. En la siguiente línea, si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.

DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml

Ahora le añadimos debajo estas líneas (en la primera de ellas, si estamos instalando PHP5 también podemos añadir la extensión .php5 además de las que aparecen):

AddType application/x-httpd-php .php .php3 .php4 .phtml
AddType application/x-httpd-php-source .phps

La primera indica las extensiones que serán interpretadas por el Apache. Por ejemplo podemos añadir la extensión .htm o .html para que el Apache ejecute el código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado exclusivamente a archivos *.PHP). La segunda sirve para que si entras en una página loquesea.phps entonces se muestra el código PHP a color, muy útil si queremos por ejemplo mostrar el código fuente a color en una página. De tal forma que al final todo queda así:

<IfModule mod_dir.c>
DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml
AddType application/x-httpd-php .php .php3 .php4 .phtml
AddType application/x-httpd-php-source .phps
</IfModule>

El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
C:\Archivos de programa\Apache Group\Apache\htdocs\

Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:

DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"

Nosotros sustituimos la carpeta htdocs del Apache por la que queramos. Todos los archivos que vayas a probar con el Apache deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta WEB dentro del directorio del servidor:

DocumentRoot "C:/Servidor/web/"

Y ya podemos guardar el archivo httpd.conf (que no se te olvide).

Bueno, ya tenemos todo. Ahora tan sólo queda comprobar que todo funciona correctamente.

Primera prueba de nuestro servidor Apache
Ahora vamos a probar el Apache y PHP, para lo cual deberemos arrancar el Apache. Sólo tenemos que arrancar el apache.exe de la carpeta del Apache para iniciar el servidor, con lo cual nos sale una ventanita de MS-Dos donde nos indicará que está activo (running) o no. Basta cerrar la ventanita de MS-Dos para desactivar el Apache. Como la siguiente imagen:

En estos momento nuestro Apache está funcionando. Ahora la prueba. Create un archivo php, a la que llamaremos info.php, en ella pon lo siguiente:

<?php
   phpinfo();
?>

Recuerda guardarla dentro de la carpeta 'web' que creamos en C:\Servidor\web\, sinó no funcionará. Vale, ahora la prueba de fuego. Abre el navegador que utilices y escribe en la barra de dirección: http://127.0.0.1/info.php o http://localhost/info.php (recuerda que 127.0.0.1 = localhost) con el Apache activo deberemos visualizar una página de información de PHP. Si no sale, algo ha fallado, revisa los pasos. La página que deberiamos ver es como la siguiente imagen:

Como has podido observar, para acceder a nuestro servidor local y así poder probar nuestros script y las páginas de nuestra web, siempre accederemos con la dirección 127.0.0.1 o localhost (sin WWW) en el navegador pues esta es la dirección del host local de nuestro ordenador. En general, para visualizar o acceder a cualquier archivo (PHP, HTML, TXT, ZIP, GIF, JPG, etc.) que tengamos en nuestra carpeta de la web, lo haremos de la siguiente forma:

http://localhost/CARPETA/ARCHIVO.EXT

Donde CARPETA es la carpeta (o serie de carpetas) relativas a la raiz en que se encuentra el ARCHIVO.EXT

Por tanto resaltar que no sólo podemos hacer llamadas a script PHP, sino también a páginas HTML, descarga de archivos, imágenes, etc., tan solo poniendo la dirección correcta en el navegador. Es simplemente un servidor. De esta forma, podemos tener nuestra web funcionando en nuestro propio ordenador para construirla desde cero o bien hacer las pruebas que necesitemos sin tener que estar conectados a Internet.

Si tienes alguna duda sobre la instalación puedes exponerla en nuestro foro de PHP.

Para hacer éste parte de este articulo he tomado como fuente original: http://www.maestrosdelweb.com/editorial/phpmysqlap/#2

 

configuracion de apache en windows

http://www.internet-actu.com/manual/es/platform/windows.html

 

 

Usar Apache con Microsoft Windows

Idiomas Disponibles:  en  |   ko 

Este documento explica cómo instalar, configurar y funcionar Apache 2.0 debajo de Microsoft Windows. Si usted encuentra cualesquiera insectos, o desea contribuir de otras maneras, utilice por favor nuestro insecto que divulga la página.

Este documento asume que usted está instalando una distribución binaria de Apache. Si usted desea compilar Apache usted mismo (posiblemente ayudar con el desarrollo o seguir abajo de insectos), vea Apache de compilación para Microsoft Windows.

Debido a las políticas versioning actuales en las familias del sistema operativo de Microsoft Windows, este documento asume el siguiente:

  • Windows NT: Esto significa todas las versiones de Windows que se basen en el núcleo de Windows NT. Incluye Windows NT, Windows 2000, Windows.xp y el servidor 2003 del Net de Windows.
  • Windows 9x: Esto significa más viejas, orientadas para el consumidor versiones de Windows. Incluye Windows 95 (también OSR2), Windows 98 y Windows YO.

 

Requisitos Del Sistema Operativo

La plataforma primaria de Windows para funcionar Apache 2.0 es Windows NT. El instalador binario trabaja solamente con la familia x86 de procesadores, tales como Intel y procesadores de AMD. El funcionamiento de Apache en Windows 9x no se prueba a fondo, y nunca se recomienda en sistemas de producción.

En todos los sistemas operativos, el establecimiento de una red de TCP/IP se debe instalar y trabajo. Si funciona en Windows 95, la mejora del Winsock 2 debe ser instalada. El Winsock 2 para Windows 95 se puede descargar de aquí.

En Windows NT 4.0, instalando servicio embale 6 se recomienda fuertemente, como ediciones sabidas creadas del paquete 4 del servicio con integridad de TCP/IP y del Winsock que fueron resueltas en paquetes más últimos del servicio.

tapa

Descargar Apache para Windows

La información sobre las versiones más últimas de Apache se puede encontrar en el Web site del web server de Apache en http://httpd.apache.org/download.cgi. Allí usted encontrará el lanzamiento actual, así como versiones de una alfa más reciente o de la prueba beta, y una lista de los espejos del HTTP y del ftp de los cuales usted puede descargar el web server de Apache. Utilice por favor un espejo cerca a usted para una transferencia directa rápida y confiable.

Para las instalaciones de Windows usted debe descargar la versión de Apache para Windows con .msi la extensión. Éste es un solo archivo del instalador de Microsoft, que contiene una versión ready-to-run de Apache. Hay un archivo .zip separado, que contiene solamente el código de fuente. Usted puede compilar Apache usted mismo con las herramientas visuales de Microsoft C++ (estudio visual).

tapa

Instalación de Apache para Windows

Usted necesita a instalador 1.2 de Microsoft o arriba para que la instalación trabaje. En Windows 9x usted puede poner al día su instalador de Microsoft a la versión 2.0 aquí y en Windows NT 4.0 y 2000 la actualización de la versión 2.0 se puede encontrar aquí. Windows.xp no necesita esta actualización.

Observe que usted no puede instalar dos versiones de Apache 2.0 en la misma computadora con el instalador binario. Usted puede, sin embargo, instalar una versión de las 1.3 series y una versión de las 2.0 series en la misma computadora sin problemas. Si usted necesita tener dos diversas 2.0 versiones en la misma computadora, usted tiene que compilar e instalar Apache de la fuente.

Funcione el archivo .msi de Apache que usted descargó arriba. La instalación le pedirá estas cosas:

  1. Dominio De la Red. Incorpore el dominio del DNS en el cual su servidor está o será colocado adentro. Por ejemplo, si es el nombre completo del DNS de su servidor server.mydomain.net, usted mecanografiaría mydomain.net aquí.

  2. Nombre Del Servidor. Nombre completo del DNS de su servidor. Del ejemplo arriba, usted mecanografiaría server.mydomain.net aquí.

  3. Email address Del Administrador. Incorpore el email address del administrador o de los webmaster del servidor aquí. Esta dirección será exhibida junto con mensajes de error al cliente por el defecto.

  4. Para quién para instalar Apache seleccione for All Users, on Port 80, as a Service - Recommended si usted quisiera que su nuevo Apache escuchara en el puerto 80 tráfico entrante. Funcionará como un servicio (es decir, Apache funcionará incluso si nadie se entra en el servidor en el momento) selecciona only for the Current User, on Port 8080, when started Manually si usted quisiera instalar Apache para su experimentación personal o si usted tiene ya otro servidor de WWW el funcionar en el puerto 80.

  5. El tipo de la instalación. Seleccione Typical para todo excepto el código de fuente y las bibliotecas para el desarrollo del módulo. Con Custom usted puede especificar qué instalar. Un lleno instala requerirá cerca de 13 megabytes de espacio de disco libre. Esto no incluye el tamaño de su site(s) de la tela.

  6. Adonde instalar. La trayectoria del defecto está C:\Program Files\Apache Group debajo de cuál será creado un directorio Apache2 llamado por el defecto.

Durante la instalación, Apache configurará los archivos en conf el subdirectory para reflejar el directorio elegido de la instalación. Sin embargo, si cualquiera de la configuración archiva en este directorio ya existe, él no será sobreescrita. En lugar, la nueva copia del archivo correspondiente será dejada con la extensión .default. Así pues, por ejemplo, si conf\httpd.conf existe ya, será retitulada como conf\httpd.conf.default. Después de que la instalación que usted debe comprobar manualmente para ver qué nuevos ajustes están en .default el archivo, y en caso de necesidad, ponga al día su archivo existente de la configuración.

También, si usted hace ya un archivo llamar htdocs\index.html, no será sobreescrito (y no se instale index.html.default ninguna voluntad tampoco). Esto significa que debe ser seguro instalar Apache sobre una instalación existente, aunque usted tendría que parar el servidor corriente existente antes de hacer la instalación, y después que comienza el nuevo después de que se acabe la instalación.

Después de instalar Apache, usted debe corregir los archivos de la configuración en conf el subdirectory según lo requerido. Estos archivos serán configurados durante la instalación de modo que Apache sea listo ser funcionado del directorio que fue instalada en, con el servidor de los documentos del subdirectory htdocs. Hay porciones de otras opciones que usted deba fijar antes de que usted realmente comience a usar Apache. Sin embargo, para conseguir comenzados rápidamente, los archivos deben trabajar según lo instalado.

tapa

Modificar Apache para requisitos particulares para Windows

Apache es configurado por los archivos en conf el subdirectory. Éstos son los mismos archivos usados para configurar la versión de Unix, pero hay algunos diversos directorios para Apache en Windows. Vea el índice directivo para todos los directorios disponibles.

Las diferencias principales en Apache para Windows son:

  • Porque es Apache para Windows multithreaded, él no utiliza un proceso separado para cada petición, como Apache hace en Unix. En lugar hay generalmente funcionamiento de solamente dos procesos de Apache: un proceso de padre, y un niño que maneja las peticiones. Dentro del proceso del niño cada petición es manejada por un hilo de rosca separado.

    Los directorios de la gerencia de proceso son también diferentes:

    MaxRequestsPerChild: Como el directorio de Unix, esto controla cuántas peticiones servirá un solo proceso del niño antes de salir. Sin embargo, desemejante en de Unix, un solo proceso sirve todas las peticiones inmediatamente, no apenas una. Si se fija esto, se recomienda que un número muy alto está utilizado. El defecto recomendado MaxRequestsPerChild 0, causas el proceso del niño nunca a la salida.

    Advertencia: Se relee el archivo de la configuración del servidor cuando se comienza un nuevo proceso del niño. Si usted se ha modificado httpd.conf, el nuevo niño puede no comenzar o usted puede recibir resultados inesperados.

    ThreadsPerChild: Este directorio es nuevo. Dice a servidor cuántos hilos de rosca debe utilizar. Éste es el número máximo de conexiones que el servidor puede dirigir inmediatamente, así que sea seguro fijar este número arriba bastante para su sitio si usted consigue muchos de golpes. El defecto recomendado es ThreadsPerChild 50.

  • Los directorios que aceptan nombres de fichero mientras que las discusiones deben utilizar los nombres de fichero de Windows en vez de Unix unos. Sin embargo, porque Apache utiliza nombres del Unix-estilo internamente, usted debe utilizar las rayas verticales delanteras, no backslashes. Las letras de impulsión pueden ser utilizadas; si está omitida, la impulsión con el Apache ejecutable será asumida.

  • Apache para Windows contiene la capacidad a los módulos cargables en el tiempo de pasada, sin recompiling el servidor. Si Apache se compila normalmente, instalará un número de módulos opcionales en \Apache2\modules el directorio. Para activar éstos u otros módulos, el nuevo LoadModule directorio debe ser utilizado. Por ejemplo, para activar el módulo del estado, utilice el siguiente (además de los directorios estado-que activan adentro access.conf):

    LoadModule status_module modules/mod_status.so

    La información sobre crear los módulos loadable está también disponible.

  • Apache puede también cargar las extensiones de ISAPI (interfaz de programación de uso del servidor del Internet) (es decir usos del servidor del Internet), por ejemplo ésos usados por Microsoft IIS y otros servidores de Windows. Más información está disponible. Observe que Apache no puede cargar los filtros de ISAPI.

  • Al funcionar las escrituras del cgi, las aplicaciones de Apache del método de encontrar al intérprete para la escritura son configurables con ScriptInterpreterSource el directorio.

  • Puesto que es a menudo difícil manejar archivos con nombres como .htaccess en Windows, usted puede encontrarlo útil para cambiar el nombre de este archivo de la configuración del por-directorio usando AccessFilename el directorio.

  • Cualquier error durante el arranque de Apache se registra en el registro del acontecimiento de Windows al funcionar en Windows NT. Este mecanismo actúa como reserva para esas situaciones donde Apache no puede incluso tener acceso al archivo normalmente error.log usado. Usted puede visión el registro del acontecimiento de Windows usando el uso del espectador del acontecimiento en Windows NT 4.0, y el espectador MMC del acontecimiento snap-in en más nuevas versiones de Windows.

    Observe que no hay error de lanzamiento que entra Windows 9x porque ningún registro del acontecimiento de Windows existe en esos sistemas operativos.
tapa

Apache de funcionamiento como servicio

Apache se puede funcionar como servicio en Windows NT. Hay una cierta ayuda altamente experimental para el comportamiento similar en Windows 9x.

Usted puede instalar Apache como servicio automáticamente durante la instalación. Si usted eligió instalar para todos los usuarios, la instalación creará un servicio de Apache para usted. Si usted especifica para instalar para se solamente, usted puede colocar manualmente Apache como servicio después de la instalación. Usted tiene que ser un miembro del grupo de los administradores para que la instalación del servicio tenga éxito.

Apache viene con una utilidad llamada el monitor del servicio de Apache. Con él usted puede ver y manejar el estado de todos los servicios instalados de Apache en cualquier máquina en su red. Para poder manejar un servicio de Apache con el monitor, usted tiene que primero instalar el servicio (o automáticamente vía la instalación o manualmente).

Usted puede instalar Apache como servicio de Windows NT como sigue del aviso de comando en el subdirectory bin de Apache:

apache -k install

Si usted necesita especificar el nombre del servicio que usted desea instalar, utilice el comando siguiente. Usted tiene que hacer esto si usted tiene varias diversas instalaciones del servicio de Apache en su computadora.

apache -k install -n "MyServiceName"

Si usted necesita haber nombrado específicamente la configuración archiva para diversos servicios, usted debe utilizar esto:

apache -k install -n "MyServiceName" -f "c:\files\my.conf"

Si usted utiliza el primer comando sin ningunos parámetros especiales a menos que -k install, el servicio sea llamado Apache2 y la configuración será asumida para ser conf\httpd.conf.

Quitar un servicio de Apache es fácil. Uso justo:

apache -k uninstall

El Apache específico que el servicio a ser uninstalled puede ser especificado usando:

apache -k uninstall -n "MyServiceName"

El comenzar normal, el recomienzo y el cerrar abajo de un servicio de Apache es hecho generalmente vía el monitor del servicio de Apache, usando comandos como NET START Apache2 y NET STOP Apache2 o vía la gerencia normal del servicio de Windows. Antes de comenzar Apache como servicio por cualquier medio, usted debe probar el archivo de la configuración del servicio usando:

apache -n "MyServiceName" -t

Usted puede controlar un servicio de Apache por su línea de comando interruptores, también. Para comenzar un servicio instalado de Apache usted utilizará esto:

apache -k start

Para parar un servicio de Apache vía la línea de comando interruptores, utilice esto:

apache -k stop

o

apache -k shutdown

Usted puede también recomenzar un servicio corriente y forzarlo para releer su archivo de la configuración usando:

apache -k restart

Por defecto, todos los servicios de Apache se colocan para funcionar como el usuario del sistema ( LocalSystem la cuenta). LocalSystem La cuenta no tiene ningún privilegio a su red vía ningún mecanismo Windows-asegurado, incluyendo el sistema de ficheros, nombrado las pipas, DCOM, o el RPC seguro. Tiene, sin embargo, privilegios amplios localmente.

¡Nunca conceda cualquier privilegio de la red LocalSystem a la cuenta! Si usted necesita a Apache poder a los recursos de la red de acceso, cree un separado explican Apache según lo observado abajo.

Usted puede desear crear un separado explica el service(s) corriente de Apache. Especialmente, si usted tiene que los recursos de la red de acceso vía Apache, esto se recomienda fuertemente.

  1. Cree una cuenta normal del usuario del dominio, y sea seguro memorizar su contraseña.
  2. Grant el usuario creado recientemente un privilegio de Log on as a service y Act as part of the operating system. En Windows NT 4.0 estos privilegios se conceden vía el encargado del usuario para los dominios, pero en Windows 2000 y XP usted desea probablemente utilizar la política del grupo para propagar estos ajustes. Usted puede también manualmente fijar éstos vía la política local MMC de la seguridad snap-in.
  3. Confirme que la cuenta creada es un miembro del grupo de usuarios.
  4. Grant que la cuenta leyó y que ejecuta las derechas (RX) a todas las carpetas del documento y de la escritura (htdocs y cgi-bin por ejemplo).
  5. Grant el cambio de la cuenta (RWXD) endereza a Apache logs el directorio.
  6. Grant que la cuenta leyó y que ejecuta las derechas (RX) Apache.exe al ejecutable binario.
Es generalmente una buena práctica conceder al usuario los funcionamientos del servicio de Apache según lo leído y ejecutar el acceso (RX) al directorio entero Apache2, excepto logs el subdirectory, donde el usuario tiene que tener por lo menos derechas del cambio (RWXD).

Si usted permite que la cuenta se abra una sesión como usuario y como servicio, después usted puede entrar con esa cuenta y probar que la cuenta tiene los privilegios de ejecutar las escrituras, lee los Web pages, y que usted puede comenzar Apache en una ventana de la consola. Si esto trabaja, y usted ha seguido los pasos arriba, Apache debe ejecutarse como servicio sin problemas.

El código de error 2186 es una buena indicación que usted necesita para repasar "entra como" configuración para el servicio, puesto que Apache no puede tener acceso a un recurso requerido de la red. También, la atención cercana de la paga a los privilegios del usuario Apache se configura para funcionar como.

Al comenzar Apache como servicio usted puede encontrar un mensaje de error del encargado del control del servicio de Windows. Por ejemplo, si usted intenta comenzar Apache usando el applet de los servicios en el panel de control de Windows, usted puede conseguir el mensaje siguiente:

Could not start the Apache2 service on \\COMPUTER
Error 1067; The process terminated unexpectedly.

Usted conseguirá este error genérico si hay cualquier problema con comenzar el servicio de Apache. Para verle qué realmente está causando el problema debe seguir las instrucciones para funcionar Apache para Windows del aviso de comando.

Hay una cierta ayuda para Apache en Windows 9x a comportarse de una manera similar como servicio en Windows NT. Es altamente experimental. No está de confiabilidad de la produccio'n-clase, y su futuro no está garantizado. ¡Puede ser mirado sobre todo como una cosa aventurada para jugar con - proceda con la precaución!

Hay algunas diferencias entre las dos clases de servicios que usted debe estar enterado de:

  • Apache procurará comenzar y si es acertado funciona en el fondo. Si usted funciona el comando

    apache -n "MyServiceName" -k start

    vía un atajo en su tablero del escritorio, por ejemplo, entonces si el servicio comienza con éxito, una ventana de la consola destellará encima de pero desaparece inmediatamente. Si Apache detecta cualquier error en arranque tal como entradas incorrectas en la configuración de httpd.conf archiva, la ventana de la consola seguirá siendo visible. Esto exhibirá un mensaje de error que sea útil en seguir abajo de la causa del problema.

  • Windows 9x no apoya NET START u NET STOP ordena. Usted debe controlar el servicio de Apache en el aviso de comando vía -k los interruptores.

  • Apache y Windows 9x no ofrecen ninguna ayuda para funcionar Apache como usuario específico con privilegios de la red. En hecho, Windows 9x no ofrece ninguna seguridad en la máquina local, cualquiera. Ésta es la razón simple debido a la cual la fundación del software de Apache nunca endosa uso de Windows 9x - sistema basado como servidor público de Apache. La ayuda primitiva para Windows 9x existe para asistir solamente al usuario en contenido y aprender de la tela que se convierte el servidor de Apache, y quizás como servidor del Intranet en una red asegurada, privada.

Una vez que usted haya confirmado que Apache funciona correctamente como un uso de la consola que usted puede instalar, controle y uninstall el pseudo-servicio con los mismos comandos que en Windows NT. Usted puede también utilizar el monitor del servicio de Apache para manejar los pseudo-servicios de Windows 9x.

tapa

Apache de funcionamiento como uso de la consola

El funcionamiento de Apache como servicio es generalmente la manera recomendada de utilizarla, pero es a veces más fácil trabajar de la línea de comando (en Windows 9x que funciona Apache de la línea de comando es la manera recomendada debido a la carencia de la ayuda de servicio confiable.)

Para funcionar Apache de la línea de comando como uso de la consola, utilice el comando siguiente:

apache

Apache se ejecutará, y seguirá siendo de funcionamiento hasta que es parado por Control-C acuciante.

Usted puede también funcionar Apache vía el comienzo Apache del atajo en la consola colocada Start Menu --> Programs --> Apache HTTP Server 2.0.xx --> Control Apache Server durante a la instalación. Esto abrirá una ventana de la consola y comenzará Apache dentro de él. Si usted no tiene Apache instalado como servicio, la ventana seguirá siendo visible hasta que usted para Apache por Control-C acuciante en la ventana de la consola adonde Apache está funcionando adentro. El servidor saldrá en algunos segundos. Sin embargo, si usted tiene Apache instalado como servicio, el atajo comienza el servicio. Si el servicio de Apache está funcionando ya, el atajo no hace cualquier cosa.

Usted puede decir un funcionamiento Apache parar abriendo otra ventana de la consola y entrando:

apache -k shutdown

Esto se debe preferir sobre Control-C acuciante porque éste deja a Apache terminar cualquier operación actual y limpiar para arriba agraciado.

Usted puede también decir a Apache recomenzar. Esto lo fuerza para releer el archivo de la configuración. Cualquier operación en marcha se permite terminar sin la interrupción. Recomenzar Apache, utilice:

apache -k restart

Observe para el familiar de la gente con la versión de Unix de Apache: estos comandos proporcionan Windows equivalente a kill -TERM pid y kill -USR1 pid. La línea de comando opción usada -k, fue elegida como un recordatorio kill del comando usado en Unix.

Si la ventana de la consola de Apache se cierra inmediatamente o inesperado después de arranque, abra el aviso de comando de los programas del --> del menú del comienzo. Cambie a la carpeta a la cual usted instaló Apache, mecanografía el comando apache, y lee el mensaje de error. Entonces cambie a los registros la carpeta, y repase error.log el archivo para los errores de la configuración. Si usted aceptara los defectos cuando usted instaló Apache, los comandos serían:

c:
cd "\Program Files\Apache Group\Apache2\bin"
apache

Entonces espere Apache para parar, o presione el Control-C. Entonces entre en el siguiente:

cd ..\logs
more < error.log

Al trabajar con Apache es importante saber encontrará el archivo de la configuración. Usted puede especificar un archivo de la configuración en la línea de comando en dos maneras:

  • -f especifica una trayectoria absoluta o relativa a un archivo particular de la configuración:

    apache -f "c:\my server files\anotherconfig.conf"

    o

    apache -f files\anotherconfig.conf

  • -n especifica el servicio instalado de Apache que archivo de la configuración debe ser utilizado:

    apache -n "MyServiceName"

En both.of.these casos, el apropiado ServerRoot se debe fijar en el archivo de la configuración.

Si usted no especifica un archivo de la configuración con -f o -n, Apache utilizará el nombre del archivo compilado en el servidor, por ejemplo conf\httpd.conf. Esta trayectoria incorporada está concerniente al directorio de la instalación. Usted puede verificar el nombre del archivo compilado de un valor etiquetado como SERVER_CONFIG_FILE al invocar Apache con -V el interruptor, como esto:

apache -V

La voluntad de Apache entonces intenta determinar su ServerRoot cerca intentar el siguiente, en esta orden:

  1. ServerRoot Un directorio vía -C la línea de comando interruptor.
  2. -d El interruptor en la línea de comando.
  3. Directorio de trabajo actual.
  4. Una entrada del registro que fue creada si usted hizo una instalación binaria.
  5. La raíz del servidor compilada en el servidor. Esto está /apache por defecto, usted puede verificarlo usando apache -V y buscando un valor etiquetado como HTTPD_ROOT.

Durante la instalación, una llave versio'n-especi'fica del registro se crea en el registro de Windows. La localización de esta llave depende del tipo de la instalación. Si usted eligió instalar Apache para todos los usuarios, la llave está situada debajo HKEY_LOCAL_MACHINE de la colmena, como esto (los números de versión por supuesto variarán entre diversas versiones de Apache:

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43

Correspondientemente, si usted eligió instalar Apache para el usuario actual solamente, la llave está situada debajo HKEY_CURRENT_USER de la colmena, es el contenido de la cual dependiente del usuario entrado actualmente:

HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43

Esta llave se compila en el servidor y puede permitirle probar nuevas versiones sin afectar la versión actual. Por supuesto, usted debe tomar cuidado para no instalar la nueva versión en el mismo directorio que otra versión.

Si usted no hizo un binario instale, Apache quieren en algunos panoramas se quejan por la llave que falta del registro. Esta advertencia puede ser no hecha caso si el servidor podía de otra manera encontrar su archivo de la configuración.

El valor de esta llave es ServerRoot el directorio que contiene conf el subdirectory. Cuando el comienzo de Apache él lee httpd.conf el archivo de ese directorio. Si este archivo contiene ServerRoot un directorio que contenga un diverso directorio de el que esta' obtenido de la llave del registro arriba, Apache se olvidará de la llave del registro y utilizará el directorio del archivo de la configuración. Si usted copia los archivos del directorio o de la configuración de Apache a una nueva localización es vital que usted pone al día ServerRoot el directorio en httpd.conf el archivo para reflejar la nueva localización.

tapa

Prueba de la instalación

Después de comenzar Apache (en una ventana de la consola o como servicio) escuchará en el puerto 80 (a menos que usted cambió Listen el directorio en los archivos de la configuración o instaló Apache solamente para el usuario actual). Para conectar con el servidor y para tener acceso a la página del defecto, lance un browser e incorpore este URL:

http://localhost/

Apache debe responder con una página de recibimiento y un acoplamiento al manual de Apache. Si sucede nada o usted consigue un error, mire en error.log el archivo en logs el subdirectory. Si su anfitrión no está conectado con la red, o si usted tiene problemas serios con su configuración del DNS (servicio del Domain Name), usted puede tener que utilizar este URL:

http://127.0.0.1/

Si usted sucede funcionar Apache en un puerto alterno, usted necesita poner explícitamente eso en el URL:

http://127.0.0.1:8080/

Una vez que su instalación básica esté trabajando, usted debe configurarla correctamente corrigiendo los archivos en conf el subdirectory. Una vez más si usted cambia la configuración del servicio de Windows NT para Apache, primera tentativa de comenzarla de la línea de comando para cerciorarse de que el servicio comienza sin errores.

Porque Apache no puede compartir el mismo puerto con otro uso de TCP/IP, usted puede necesitar parar, uninstall o configurar de nuevo ciertos otros servicios antes de funcionar Apache. Estos servicios que están en conflicto incluyen otros servidores de WWW y algunas puestas en práctica del cortafuego

instalar apache y PHP

http://www.manualphp.es/articulo-instalar-apache-y-php-5.html

cocteles

Ingredientes
 Preparación
Banana Frozen
1/2 cambur
1/4 jugo de limón
3/4 ron blanco
Azúcar
Hielo Molido
Guindas rojas

Mezcle todos los ingredientes en la batidora. La mezcla debe tener consistencia de helado. Adorne con una guinda y coloque un pitillo Sírvase bien Frío.

Batido de Guayaba y Cambur

3 Cambures maduros pelados
y cortados en trozos
5 Guayabas grandes, peladas
y cortadas en cuadros
3 Cda. de azúcar
3 Tazas de agua
2 Cda. de jugo de limón hielo

Coloque todos los ingredientes en el vaso de la licuadora. Lícuelo durante 3 minutos.

Pruebe para verificar el sabor y la textura y, si es necesario, agregue azúcar y/o agua.

Cuélelo y sírvalo de inmediato.

Blody Bull 

1/3 de vodka
1/3 de jugo de tomate
1/3 de consomé concentrado de res
Unas gotas de salsa inglesa
Unas gotas de salsa tabasco
El jugo de medio limón
Sal al gusto
Pimienta al gusto
Mezclar todos los ingredientes, colar y servir con un cubo de hielo

Si lo desea puede preparar algunas variaciones. Eliminando el jugo de tomate y aumentando la cantidad de consomé a 2/3 se prepara el Bull Shot. Eliminando el consomé y con 2/3 de jugo de tomate se prepara el Bloody Mary

Carato de Guanábana

1 Guanábana grande madura
Azúcar al gusto
2 tazas de agua
Extraiga las semillas de la guanábana. Coloque la pulpa en una jarra con agua en la nevera durante la noche.
Al día siguiente colóquela en la licuadora y licue a baja velocidad.
Añada azúcar al gusto, pruebe y agregue más si es necesario.
Cuele y mantenga refrigerado hasta el momento de servir.

Coctel Parchita

(Para 20 Personas)
12 parchitas
1/2 litro de granadina
1 litro de miche o ron
10 Cda. de azúcar blanca
1 Cdita. de sal
Hielo en cubitos
Se colocan las parchitas a hervir en una olla con suficiente agua durante 10 minutos o hasta que estén blanditas.
Prepare un jugo con la concha y la pulpa de las parchitas, todo junto.
Después de haberlo licuado un rato, cuélelo y mezcle con la granadina, el licor, el azúcar y la sal hasta que la mezcla esté homogénea.
Se debe servir con hielo y si lo desea adorne el vaso con una sombrillita o una rueda de naranja con una cereza.
El coctel de parchita es apropiado para una reunión informal.

Coctel El Gordo

4 Onz. de tequila
4 Onz. de Ron
Naranjas de jugo
1/2 onza de granadina
Se colocan la tequila y el ron en un vaso para Coctel. Se agrega jugo de naranjas exprimiéndolas directamente sobre el vaso hasta que esté lleno a tres cuartos, mas o menos y luego agregue la granadina.
Sirva bien frío con pitillo, y si quiere adorne con una rodaja de naranja.

Coctel Mojito

Ron Blanco
Cointreau
Jugo de limón
Jarabe de Goma
Hojitas de Yerbabuena
Azúcar
Vierta todos los ingredientes en una coctelera, agite y filtre. Sirva en una Copa tipo Balón y decorar con yerbabuena impregnada de azúcar

Coctel Moradito

Vodka
Jugo de uva
Mezcle los ingredientes en cantidades al gusto.
Es delicioso.

Coctel Orgasmo

Kahlúa (Licor Café)
Amaretto (Licor Avellanas)
Vodka
Gotas de Ponche Crema
Menta blanca
Hielo
Vierta el Kahlúa, Amaretto y Vodka al gusto en un vaso Old fashioned sobre el hielo. Añada unas gotas de Ponche Crema al final y saboreé uno de los Cocteles más deliciosos de esta sección.

Coctel Russo Blanco

1oz. Vodka
1/4 oz. Kahlúa
1/2 oz. Leche
Verter la vodka y la leche sobre hielo y complete sin revolver, y hasta llenar el vaso Old Fashioned, con Kahlúa. Sirva con un pitillo corto

Coctel Russo Negro

Vodka
Kahlúa
Hielo
Prepare un vaso Old Fashioned con hielo, vierta la vodka y luego la Kahlúa sin revolver. Decore con una guinda y sirva con un pitillo corto.

Coctel Sexo Oral

1oz. tequila
Licor de melón
Crema Chantilly
Mezcle la onza de tequila con el licor de melón al gusto, complete con la crema chantilly.
Debe servirse en un vaso tipo Shot, similar a un tubo de ensayo. El trago no debe ser agarrado con la mano, debe ser con la boca

Coctel Shirley Temple

Chinotto (Refresco de Limon)
Granadina
Se llena un vaso V-10 con Chinotto y agregue un toque de granadina, decore con una guinda

Coctel Splash

Licor de Amaretto
Jugo de naranja
Hielo granizado
Prepare el vaso con hielo, agregue el Amaretto al gusto y llene el vaso con el jugo de naranja.

Sirva en en un vaso V-10 y decore con una rodaja de naranja.

Coctel Tetero

1/4 Ponche Crema
3/4 Brandy
Toque de Granadina al gusto.
Hielo al gusto
Mezcle todos los ingredientes en una coctelera. Sirva es un vaso old fashianed con pitillo corto y decore con una guinda


Vermouth Preparado

1/5 Ginebra
Unas gotas de Amargo de Angostura
Unas gotas de Granadina
Unas gotas de limón
4/5 Vermouth Rojo
Un chorrito de soda
Vierta todos los ingredientes en un vaso tipo V-10 con hielo. Y decore con rodajas de limón

Daiquirí

Azúcar al gusto
1/4 jugo de limón
Unas gotas marrasquino (licor)
3/4 ron blanco
Hielo picado o molido
Guindas rojas
Licue todos los ingredientes. Primero sin hielo y luego con el hielo. Adorne el vaso con las guindas y coloque pitillo (pajilla).

María Félix Frozen

1/3 jugo de piña
2/3 ron blanco
Azúcar al gusto
Hielo picado o  molido
4 guindas rojas de adorno
Mezcle el jugo de piña, el ron blanco y el azúcar en la licuadora. Luego añada el hielo y mezcle nuevamente.


Piña Colada

4 trozos de piña
Crema o jarabe de coco al gusto
1/4 de taza de jugo de piña
3/4 de taza de ron blanco
Azúcar al gusto
Hielo picado o molido
Guindas rojas
Licue todos los ingredientes. Primero sin hielo y luego con el hielo. Adorne con las guindas o trocitos de piña. Y sirva en piñas huecas, conchas de coco o vasos largos con pitillo (pajilla).

Ponche Zuliano

4 huevos enteros
2 yemas de huevo
2 latas de leche condensada
1 cda. de vainilla
1/4 litro de ron
1 cerveza negra fría
Nuez moscada en polvo
Bata los huevos y las yemas. Agregue poco a poco la leche condensada, la vainilla y el ron.

Sirva mitad ponche, mitad cerveza. Revuelva y  espolvoree con nuez moscada.

Sangría Colonial

2 litros de agua helada azucarada
2 botellas de vino tinto  frío
1 piña fresca o de lata picadita
Nuez moscada en polvo, al gusto
2 refresco sabor a limón
El zumo y la corteza de 2 limones
1 manzana verde en pedacitos
1/2 taza de cereza marrasquino
Mezcle bien todos los ingredientes menos el vino y los refrescos, que se agregan sólo al final.

Sorbete de Mango

2 tazas de pulpa de mango
2 cditas. de jugo de limón
1 copa de vino blanco (opcional)
4 tazas de agua fría
1 clara de huevo
4 cdas. de azúcar
 En la licuadora coloque la pulpa de mango, el jugo de limón, el vino y el agua. Licue a alta velocidad durante 3 minutos.
 Entretanto, con una batidora de mano, bata la clara de huevo a punto de nieve y, gradualmente, agregue el azúcar. Continúe batiendo hasta lograr una consistencia homogénea.
 Mezcle con el jugo de mango y a la velocidad mínima, licue durante 2 minutos. Enfríe y sirva de inmediato.

Sorbete de Naranja y Cambur

4 tazas de jugo de naranja
3 cambures maduros
1 Cucharadita de jugo de limón
1 Cucharadita de esencia de vainilla
Azúcar
  Coloque en la licuadora el jugo de naranja, los cambures cortados en trozos y licue a alta velocidad durante 4 minutos.
  Agregue el jugo de limón y la esencia de vainilla y continúe licuando a baja velocidad.
  Verifique el sabor y si es necesario agregue más azúcar.
  Licue nuevamente a alta velocidad durante 3 minutos. Refrigere y sirva bien frío

reflexion para todos los conductores

SALI DE FIESTA...MAMITA > > 
Fui a una fiesta y me acordé de lo que me dijiste. Me pediste que no bebiera alcohol mamá. Por eso, bebí un Sprite. 
Sentí orgullo de mi misma, y del modo como me dijiste que me sentiría y que no debería beber y conducir, al contrario de lo que algunos amigos me dijeron. Hice una elección saludable y tu consejo fue correcto. Y cuando la fiesta finalmente acabó la gente empezó a conducir sin estar en condiciones... 
Fui a mi coche con la certeza de que iría a casa en paz. 
Nunca podría imaginar lo que me esperaba mamá... algo que no podría esperarme. Ahora estoy tirada en la calle y oí a un policía decir: "El chico que provocó este accidente iba borracho". Mamá, su voz parecía tan distante... 
Mi sangre está derramada por todos lados y estoy intentando con todas mis fuerzas no llorar. 
Puedo oír a los médicos diciendo: "Esta chica va a morir". Tengo la certeza de que el chico no tenía la menor idea mientras iba a toda velocidad. Al final, el decidió beber y conducir y ahora tengo que morir.. ¿Por qué las personas hacen esto mamá? Sabiendo que esto va a arruinar vidas... El dolor me está cortando como un centenar de cuchillos afilados. Di a mi hermana que no se asuste, mamá, dile a papá que sea fuerte. 
Alguien debería haber dicho a aquel chico que está mal beber y conducir.... Tal vez si sus padres se lo hubieran dicho, yo ahora estaría viva... Mi respiración se está debilitando, mamá, y empiezo a tener realmente miedo... Estos son mis últimos 
momentos y me siento tan desesperada. Mamá, me gustaría que me pudieras abrazar mientras estoy tirada, aquí, muriendo. Me gustaría poder decirte que te quiero, mamá... "Te quiero, y adiós..." 

Estas palabras fueron escritas por un reportero que presenció el accidente. La joven, mientras moría, iba diciendo estas palabras y el periodista anotaba... muy 
afectado. Este periodista empezó una campaña.
Si este correo llegó hasta ti y lo borras, puedes estar perdiendo la oportunidad de concientizar a más personas y salvarles de un accidente de tráfico. Y este pequeño gesto puede hacer mucho más de lo que crees. Qué te cuesta? un click? dos? A muchos les
puede salvar LA VIDA.

TRUCOS DE MARVEL

Jugar como SHADOW LADY:En la pantalla de selección de personaje ponte encima de Morrigan , y luego Presiona Arriba, Derecha, Derecha, Abajo, Abajo, Abajo, Abajo, Izquierda, Izquierda, Arriba, Arriba, Arriba, Arriba, Derecha, Derecha, Izquierda, Izquierda, Abajo, Abajo, Derecha, Derecha, Abajo, Abajo, Izquierda, Izquierda, Arriba, Arriba, Derecha, Derecha, Arriba, Arriba, Izquierda, Izquierda, Abajo, Abajo, Abajo, Abajo, Abajo, Shadow Lady aparecerá debajo de Gambit.

Jugar con GOLD WAR MACHINE:
En la pantalla de selección de personaje ponte encima de ZANGIEF, y luego presiona Izquierda, Izquierda, Abajo, Abajo, Derecha, Derecha, Abajo, Abajo, Izquierda, Izquierda, Arriba, Arriba, Arriba, Arriba, Derecha, Derecha, Izquierda, Izquierda, Abajo, Abajo, Abajo, Abajo, Derecha, Derecha, Arriba, Arriba, Izquierda, Izquierda, Abajo, Abajo, Derecha, Derecha, Arriba, Arriba, Arriba, Arriba, Arriba, Gold War Machine aparecerá Arriba de ZANGIEF.

Jugar con ORANGE HULK:
En la pantalla de selección de personaje ponte encima de CHUN-LI y luego presiona Derecha, Derecha, Abajo, Abajo, Izquierda, Izquierda, Derecha, Derecha, Abajo, Abajo, Izquierda, Izquierda, Arriba, Arriba, Arriba, Arriba, Arriba, Abajo, Derecha, Derecha, Arriba, Arriba, Abajo, Abajo, Abajo, Abajo, Arriba, Arriba, Arriba, Arriba, Izquierda, Arriba, Orange Hulk aparecerá Arriba de RYU.

Jugar con LILITH:
En la pantalla de selección de personaje ponte encima de ZANGIEF y presiona Izquierda, Izquierda, Abajo, Abajo, Derecha, Derecha, Arriba, Arriba, Abajo, Abajo, Abajo, Abajo, Abajo, Izquierda, Izquierda, Arriba, Arriba, Arriba, Arriba, Derecha, Izquierda, Abajo, Abajo, Abajo, Abajo, Derecha, Derecha, Arriba, Arriba, Arriba, Arriba, Izquierda, Izquierda, Abajo, Abajo, Abajo, Abajo, Derecha, Abajo, Lilith aparecerá Abajo de WAR MACHINE.

Jugar con RED VENOM:
En la pantalla de selección de personaje ponte encima de CHUN-LI y presiona Derecha, Abajo, Abajo, Abajo, Abajo, Izquierda, Arriba, Arriba, Arriba, Arriba, Derecha, Derecha, Abajo, Abajo, Derecha, Derecha, Arriba, Arriba, Arriba, Arriba, Izquierda, Izquierda, Arriba, Red Venom aparecerá Arriba de CHUN-LI.

Jugar con ROLL:
En la pantalla de selección de personaje ponte encima de ZANGIEF y presiona Izquierda, Izquierda, Abajo, Abajo, Derecha, Derecha, Abajo, Abajo, Izquierda, Izquierda, Arriba, Derecha, Arriba, Arriba, Derecha, Derecha, Roll aparecerá a la Derecha de MEGAMAN.

Tipos de preservativos

Preservativos Nike: "Just do it.&qu...
 
  • Preservativos Nike: "Just do it."
  • Preservativos Pringles: ¡Cuando haces pop, ya no hay stop!
  • Preservativos Pepsi: ¿Generación Next?
  • Preservativos M&M\\\\\\\'s: Se deshacen en tu boca, no en tu mano.
  • Preservativos VISA: No salga de casa sin ellos
  • Preservativos Yahoo: "Do you yahoo?."
  • Preservativos Duracell: ... y duran, duran, duran, duran....
  • Preservativos Microsoft: ¿Hasta donde quieres "llegar" hoy?
  • Preservativos Telefónica: ¿Quien si no?
  • Preservativos Lays: ¿A que no puedes usar solo uno?
  • Preservativos Evax: Ni se mueve, ni se nota, ni traspasa...
  • Preservativos UEFA: The Chaaaaaampioooooooonnnnnnssss...
  • Preservativos Petit Suise: A mi de pequeño me daban dos
  • Preservativos Coca Cola: La Chispa de la vida
  • Preservativos RedBull: te dan Aaaaalaaaasss...
  • Preservativos Pescanova: Lo bueno "sale" bien
  • Preservativos Rianxeira: Solo hay que "abrir" y triunfar
  • Preservativos San Miguel: Donde va, Triunfa
  • Preservativos McDonald\\\\\\\'s: Oferta, 2x500
  • Preservativos Nokia "Conectando personas"

NUEVOS TRUCOS para marvel comics

  • Opciones Secretas: Ilumina la palabra Options y presiona Select + Start.
  • Jugar con los Personajes Ocultos: Selecciona el menú de opciones secretas y luego completa el juego en cualquier nivel con los siguientes personajes:
    - CON CHUN LI OBTENDRAS A SHADOW LADY.
    - CON MORRIGAN OBTENDRAS A MORRIGAN 2.
    - CON MEGAMAN OBTENDRAS A ROLL.
    - CON VENOM OBTENDRAS A VENOM 2.
    - CON HULK OBTENDRAS A HULK 2.
    - CON WAR MACHINE OBTENDRAS A WAR MACHINE 2.
    - PARA OBTENER A ONSLAUGHT COMPLETA EL JUEGO CON CUALQUIER PELEADOR.
    Nota: para elegirlos tenes que buscarlos por afuera de los bordes de la seleccion de pantalla, por ejemplo, para elegir a War Machine 2, seleccionando a Zangief apreta arriba, y veras que aparecera.
  • Jugar como Mech Zangief: En la pantalla de selección de personajes, señala a Zangief, luego pulsa y mantene pulsado cualquier botón. No sueltes hasta que empiece la lucha.
  • Transformaciones de Ryu: Durante la pelea, usando a Ryu como personaje principal, hace una U hacia atras (ad,ab,at) y puño medio para usar los poderes y atuendo de Ken, y una U hacia atras y puño alto para usar los poderes y atuendo de Akuma (Gouki); para volver a Ryu, hace una U para atras y puño bajo. Autor : Federico Ireneo Molina - Email : fedegameboy@yahoo.com.ar
  • Especiales ilimitados: En el menu de opcion apretas select y start a mismo tiempo y podras escoger especiales ilimitados. Autor : Evil_shadow_14 - Email : Evil_shadow_14@hotmail.com
  • Etapa secreta en Honda's Bathouse: Elige a Spider-Man o a Venom como tu personaje. Haz un wev throw y haz que golpee la pared de la derecha 2 veces. Despues de la segunda vez la pared se rompera y apareceras en una etapa E.Honda antigua
  • 100 ventajas de ser hombre

     
    Las conversaciones telefónicas con tus a...
     
    • Las conversaciones telefónicas con tus amigos duran 30 segundos. 
    • En las películas los desnudos son casi siempre femeninos. 
    • Sabes cosas sobre autos. 
    • Para vacaciones de 5 días solo se requiere una maleta. 
    • El fútbol de los domingos. 
    • No tienes que monitorear la vida sexual de tus amigos. 
    • Las colas al baño son un 80% menores. 
    • A los viejos amigos no les importa si subiste o bajaste de peso. 
    • En las peluquerías no te roban. 
    • Mientras haces zapping, no tienes que parar cada vez que ves a alguien llorando. 
    • Tu culo no es un factor en entrevistas de trabajo. 
    • Todos tus orgasmos son reales. 
    • Una panza de cerveza no te hace invisible al otro sexo. 
    • Ahorras miles de dólares en cosméticos y medias a lo largo de tu vida. 
    • No tienes que llevar contigo una cartera llena de pendejadas a todos lados. 
    • No tienes que agarrarte la falda cada vez que subes una escalera en un lugar publico. 
    • Puedes ir al baño sin ir en grupo. 
    • Tu apellido no se pierde. 
    • Puedes dejar la cama de un hotel sin hacer. 
    • Cuando tu trabajo es criticado, no tienes que pensar que todos secretamente te odian. 
    • En caso de necesidad puedes cazar o pescar tu propia comida. 
    • La caja de herramientas es toda tuya. 
    • Te dan mas crédito por el menor acto de inteligencia. 
    • Ves el humor en los términos de matrimonio. 
    • El mundo está pensado por y para ti. 
    • Nunca tienes que limpiar el inodoro. 
    • Puedes estar bañado y listo para lo que sea en 10 minutos. 
    • En el sexo nunca tienes que preocuparte por tu reputación. 
    • Los planes de la boda se arreglan solos. 
    • Si alguien se olvida de invitarte a algún lado todavía puede ser tu amigo/a. 
    • Tu ropa interior cuesta U$S 10.- por un pack de tres. 
    • Las promotoras. 
    • Ninguno de tus colegas de trabajo tiene la capacidad de hacerte llorar. 
    • No tienes que afeitarte del cuello para abajo. 
    • No tienes que acurrucarte frente a un culo peludo todas las noches. 
    • Si tienes 34 y eres soltero a nadie le importa. 
    • Puedes escribir tu nombre en la nieva (meando). 
    • Puedes meterte en un campeonato de mear. 
    • Todo de tu cara se queda del mismo color. 
    • El chocolate es simplemente otro snack. 
    • Puedes ser presidente. 
    • Puedes disfrutar silenciosamente de un paseo en auto. 
    • Un buen ramo de flores arregla todo. 
    • Nunca tienes que preocuparte de los sentimientos de otras personas. 
    • Piensas sobre sexo el 90% de veces cuando te despiertas. 
    • Puedes llevar una franela blanca a un lugar con mucha agua que salpique. 
    • Nunca te sientes obligado de parar a un amigo que está por encamarse a alguien. 
    • Los mecánicos no te mienten. 
    • Te importa un carajo si alguien se da cuenta o no de tu nuevo corte de pelo. 
    • Puedes ver televisión con un amigo, en total silencio por horas sin pensar *Debe estar enojado conmigo*. 
    • Puedes saltar sin que nadie te mire el pecho y puedes pegarle por la calle a cosas (latas, paredes, etc). 
    • La cera caliente nunca se acerca a tu zona púbica.
    • Puedes mantener un mismo estado de animo todo el tiempo. 
    • Puedes admirar a Clint Eastwood sin matarte de hambre tratando de parecerte a el. 
    • No tienes que manejar a otra estación de servicio porque a la que fuiste estaba sucia. 
    • Sabes por lo menos 20 formas de abrir una cerveza. 
    • Puedes sentarte con las piernas abiertas sin importar que estés usando. 
    • Mismo trabajo... más paga. 
    • El pelo gris y las arrugas quedan sabias, hasta sexys. 
    • No tienes que moverte del cuarto para hacer una *acomodada de bulto de emergencia. 
    • Vestido de bodas U$S 2.000.-; traje alquilado U$S 100.- 
    • No te importa si alguien habla a tus espaldas. 
    • Siempre hay algún partido o algo de violencia en la televisión. 
    • No sacas pedacitos de los postres de otros. 
    • Si retienes agua, es en una cantimplora. 
    • El control remoto es solo tuyo. 
    • La gente nunca hecha miraditas a tu pecho cuando le hablas. 
    • Las casas de deportes te halan a ti. 
    • Puedes pasar a visitar a amigos sin tener que llevarles un regalo. 
    • Las despedidas de soltero le rompen el culo a las de soltera. 
    • Tienes una buena y sana relación con tu madre. 
      Puedes comprar profilácticos sin que el cajero te imagine desnudo. 
    • No tienes que pretender que *te vas a refrescar un poco*, para ir al baño a cagar. 
    • Si no llamas un amigo cuando dijiste que lo ibas a hacer, no le va a decir al resto que cambiaste. 
    • Algún día puedes llegar a ser un atorrante viejo verde. 
    • Puedes racionalizar cualquier cosa con la frase *Y a la mierda*. 
    • Si alguien aparece en una fiesta con tu misma ropa, puedes llegar a hacerte amigo. 
    • La muerte de Lady Di fue tan solo otra muerte. 
    • Un buen eructo es casi predecible. 
    • Nunca te pierdes una experiencia sexual porque no quieres. 
    • Piensas que la idea de patear a un perrito es graciosa. 
    • Si algo mecánico no funciona, le puedes pegar con un martillo y tirarlo por el cuarto. 
    • Los zapatos no le hacen daño a tus pies. 
    • Las películas porno están diseñadas para ti. 
    • No tienes que recordar fechas de cumpleaños y aniversarios. 
    • Que no te caiga bien una persona no quita tener buen sexo con ella. 
    • Tus amigos no te pueden atrapar preguntándote *y... notas algo diferente*. 
    • Baywatch 
    • Con 400 millones de espermatozoides por tiro, podrías duplicar la población de la tierra. 
    • Tres pares de zapatos son mas que suficiente. 
      Puedes comer una banana o un helado en lugares públicos tranquilamente. 
    • Puedes decir cualquier cosa y no preocuparte por lo que piensa la gente. 
    • *Jugar* antes del sexo es opcional. 
    • Luis Miguel, Diego Torres, Ricky Martin y otros no existen en tu universo. 
    • Nadie deja de contar un buen chiste verde cuando entras a un cuarto. 
    • Te puedes sacar la franela cuando hace calor. 
      No tienes que limpiar tu departamento cada vez que entre alguien.
    • No te preocupan las repentinas ganas de mear. 
      No tienes que inventar razones por las cuales tu amor te dejó. 
    • ...y bueno... ser hombre.

    cockteles

    La fórmula de un margarita perfecto
    De entre todas las maneras de consumir el tequila, destaca el margarita dorada. Su preparación es muy sencilla, pero requiere algunos detalles de vital importancia. Para empezar, la copa escogida debe ser cónica. Enfríela media hora antes en el congelador. Justo antes, humedezca el borde con un gajo de limón e imprégnelo en una capa de sal. Eche en la coctelera unos cuantos cubitos de hielo (hasta que cubra una cuarta parte de la misma), 50 mililitros de buen tequila, 25 ml. de Grand Marnier y unas gotas de zumo de limón. Agite con fuerza y vierta sobre la copa ya preparada. Para finalizar, decore la bebida con una corteza de limón.

     

     

    Cócteles, bebidas con glamour en la Red

    http://www.ociototal.com/recopila2/r_aficiones/cocteles.html

    paginas visitadas de todo un poco

     trucos de windos xp

     

    http://www.trucoswindows.net/

     

    preparacion de bebidas

     

    http://www.mundogar.com/ideas/trucos/Categoria.asp?Cat=34&MEN_ID=8&CatDes=Preparar+bebidas&app_id=21

     

    trucos de visual basic

     

    Como crear un grupo de programas:

    Muy útil para crear instalaciones por ejemplo:

    Añadir un textbox y hacerlo oculto.
    Una vez oculto, escribir estas líneas sustituyendo "Nombre del Grupo" por que que se desea crear,
    y que lo colocamos en Inicio -> Programas.
    Private Sub Command1_Click()    Text1.LinkTopic = "Progman|Progman"    Text1.LinkMode = 2    Text1.LinkExecute "[CreateGroup(" + "Nombre del Grupo" + ")]"End Sub

    Vaciar la carpeta de Documentos de Windows:


    Inicie un nuevo proyecto y añada el siguiente código:

    Private Declare Function SHAddToRecentDocs Lib "Shell32" (ByVal lFlags As Long, ByVal lPv As Long) As LongPrivate Sub Form_Load()    SHAddToRecentDocs 0, 0End Sub

    Abrir la ventana de Propiedades de agregar o quitar aplicaciones:

    Añada el siguiente código:

    Private Sub Command1_Click()
    X = Shell("Rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl @0")
    End Sub


    Uso de Random:

    La función Rnd o Random posee la virtud de obtener números aleatorios entre 0 y 1:

    El único inconveniente a la hora de usar Rnd, es que hay que inicializarlo, en otro caso,
    el resultado de la función Rnd, será siempre el mismo dentro de un determinado ordenador.
    Por ejemplo, el código:

    Private Sub Form_Load()  Dim Num As Double  Num = Rnd  MsgBox NumEnd Sub

    Nos daría como resultado siempre el mismo número.

    Para solucionar este problema, debemos escribir la sentencia Randomize antes de llamar
    a la función Rnd. De esta manera, la función Rnd actuará correctamente.

    El código quedaría así:

    Private Sub Form_Load()  Dim Num As Double  Randomize  Num = Rnd  MsgBox NumEnd Sub

    Calcular la etiqueta o label de un disco duro:

    Hallar la etiqueta o label del mismo disco duro:

    Escribir el siguiente código:

    Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)Private Sub Form_Load()  Dim cad1 As String * 256  Dim cad2 As String * 256  Dim numSerie As Long  Dim longitud As Long  Dim flag As Long  unidad = "D:\"  Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud,   flag, cad2, 256)  MsgBox "Label de la unidad " & unidad & " = " & cad1End Sub

    Imprimir un RichTextBox tal y como se ve:

    Imprimir un RichTextBox con su formato original.

    Private Sub Command1_Click()
    On Error GoTo ErrorDeImpresion
    Printer.Print ""
    RichTextBox1.SelPrint Printer.hDC
    Printer.EndDoc
    Exit Sub
    ErrorDeImpresion:
    Exit Sub
    End Sub

    Otra forma:

    En el Formulario [Form1 por defecto] :Private Sub Form_Load()      Dim LineWidth As Long     Me.Caption = "Rich Text Box Ejemplo de Impresion"     Command1.Move 10, 10, 600, 380     Command1.Caption = "&Imprimir"     RichTextBox1.SelFontName = "Verdana, Tahoma, Arial"     RichTextBox1.SelFontSize = 10     LineWidth = WYSIWYG_RTF(RichTextBox1, 1440, 1440)     Me.Width = LineWidth + 200End Sub Private Sub Form_Resize()      RichTextBox1.Move 100, 500, Me.ScaleWidth - 200, Me.ScaleHeight - 600End Sub Private Sub Command1_Click()      PrintRTF RichTextBox1, 1440, 1440, 1440, 1440End Sub 

    Crear un módulo y escribir:

    Private Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
    End Type

    Private Type CharRange
    cpMin As Long
    cpMax As Long
    End Type

    Private Type FormatRange
    hdc As Long
    hdcTarget As Long
    rc As Rect
    rcPage As Rect
    chrg As CharRange
    End Type

    Private Const WM_USER As Long = &H400
    Private Const EM_FORMATRANGE As Long = WM_USER + 57
    Private Const EM_SETTARGETDEVICE As Long = WM_USER + 72
    Private Const PHYSICALOFFSETX As Long = 112
    Private Const PHYSICALOFFSETY As Long = 113
    Private Declare Function GetDeviceCaps Lib "gdi32" ( _
    ByVal hdc As Long, ByVal nIndex As Long) As Long
    Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" _
    (ByVal hWnd As Long, ByVal msg As Long, ByVal wp As Long, lp As Any) As Long
    Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" _
    (ByVal lpDriverName As String, ByVal lpDeviceName As String, _
    ByVal lpOutput As Long, ByVal lpInitData As Long) As Long

    Public Function WYSIWYG_RTF(RTF As RichTextBox, LeftMarginWidth As Long, _
    RightMarginWidth As Long) As Long
    Dim LeftOffset As Long, LeftMargin As Long, RightMargin As Long
    Dim LineWidth As Long
    Dim PrinterhDC As Long
    Dim r As Long
    Printer.Print Space(1)
    Printer.ScaleMode = vbTwips
    LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
    PHYSICALOFFSETX), vbPixels, vbTwips)
    LeftMargin = LeftMarginWidth - LeftOffset
    RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
    LineWidth = RightMargin - LeftMargin
    PrinterhDC = CreateDC(Printer.DriverName, Printer.DeviceName, 0, 0)
    r = SendMessage(RTF.hWnd, EM_SETTARGETDEVICE, PrinterhDC, _
    ByVal LineWidth)
    Printer.KillDoc
    WYSIWYG_RTF = LineWidth
    End Function

    Public Sub PrintRTF(RTF As RichTextBox, LeftMarginWidth As Long, _
    TopMarginHeight, RightMarginWidth, BottomMarginHeight)
    Dim LeftOffset As Long, TopOffset As Long
    Dim LeftMargin As Long, TopMargin As Long
    Dim RightMargin As Long, BottomMargin As Long
    Dim fr As FormatRange
    Dim rcDrawTo As Rect
    Dim rcPage As Rect
    Dim TextLength As Long
    Dim NextCharPosition As Long
    Dim r As Long
    Printer.Print Space(1)
    Printer.ScaleMode = vbTwips
    LeftOffset = Printer.ScaleX(GetDeviceCaps(Printer.hdc, _
    PHYSICALOFFSETX), vbPixels, vbTwips)
    TopOffset = Printer.ScaleY(GetDeviceCaps(Printer.hdc, _
    PHYSICALOFFSETY), vbPixels, vbTwips)
    LeftMargin = LeftMarginWidth - LeftOffset
    TopMargin = TopMarginHeight - TopOffset
    RightMargin = (Printer.Width - RightMarginWidth) - LeftOffset
    BottomMargin = (Printer.Height - BottomMarginHeight) - TopOffset
    rcPage.Left = 0
    rcPage.Top = 0
    rcPage.Right = Printer.ScaleWidth
    rcPage.Bottom = Printer.ScaleHeight
    rcDrawTo.Left = LeftMargin
    rcDrawTo.Top = TopMargin
    rcDrawTo.Right = RightMargin
    rcDrawTo.Bottom = BottomMargin
    fr.hdc = Printer.hdc
    fr.hdcTarget = Printer.hdc
    fr.rc = rcDrawTo
    fr.rcPage = rcPage
    fr.chrg.cpMin = 0
    fr.chrg.cpMax = -1
    TextLength = Len(RTF.Text)
    Do
    NextCharPosition = SendMessage(RTF.hWnd, EM_FORMATRANGE, True, fr)
    If NextCharPosition >= TextLength Then Exit Do
    fr.chrg.cpMin = NextCharPosition
    Printer.NewPage
    Printer.Print Space(1)
    fr.hDC = Printer.hDC
    fr.hDCTarget = Printer.hDC
    Loop
    Printer.EndDoc
    r = SendMessage(RTF.hWnd, EM_FORMATRANGE, False, ByVal CLng(0))
    End Sub


    Como obtener el directorio desde donde estamos ejecutando nuestro programa:

    Escribir el siguiente código:

    Private Sub Form_Load()
    Dim Directorio as String
    ChDir App.Path
    ChDrive App.Path
    Directorio = App.Path
    If Len(Directorio) > 3 Then
    Directorio = Directorio & "\"
    End If
    End Sub


    Determinar si un fichero existe o no:

    Escriba el siguiente código: (una de tanta maneras aparte de Dir$())

    Private Sub Form_Load()
    On Error GoTo Fallo
    x = GetAttr("C:\Autoexec.bat")
    MsgBox "El fichero existe."
    Exit Sub
    Fallo:
    MsgBox "El fichero no existe."
    End Sub


    Capturar la pantalla entera o la ventana activa:

    Añadir dos botones y escribir el siguiente código:

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte,
    ByVal bScan As Byte, ByVal dwFlags As Long,
    ByVal dwExtraInfo As Long)

    Private Sub Command1_Click()
    'Captura la ventana activa
    keybd_event 44, 0, 0&, 0&
    End Sub

    Private Sub Command2_Click()
    'Captura toda la pantalla
    keybd_event 44, 1, 0&, 0&
    End Sub


    Salvar el contenido de un TextBox a un fichero en disco:

    Añada el siguiente código:

    Private Sub Command1_Click()
    Dim canalLibre As Integer
    'Obtenemos un canal libre que nos dará
    'el sistema oparativo para poder operar
    canalLibre = FreeFile
    'Abrimos el fichero en el canal dado
    Open "C:\fichero.txt" For Output As #canalLibre
    'Escribimos el contenido del TextBox al fichero
    Print #canalLibre, Text1
    Close #canalLibre
    End Sub


    Como desplegar la lista de un ComboBox automáticamente:

    Insertar un ComboBox y un Botón en un nuevo proyecto y escribir el siguiente código:

    Private Declare Function SendMessageLong Lib "user32" Alias
    "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
    ByVal wParam As Long, ByVal lParam As Long) As Long

    Private Sub Form_Load()
    Combo1.Clear
    Combo1.AddItem "Objeto 1"
    Combo1.AddItem "Objeto 2"
    Combo1.AddItem "Objeto 3"
    Combo1.AddItem "Objeto 4"
    Combo1.AddItem "Objeto 5"
    Combo1.AddItem "Objeto 6"
    Combo1.AddItem "Objeto 7"
    Combo1.Text = "Objeto 1"
    End Sub

    Private Sub Command1_Click()
    'ComboBox desplegado
    Dim Resp As Long
    Resp = SendMessageLong(Combo1.hwnd, &H14F, True, 0)
    End Sub

    Nota: Resp = SendMessageLong(Combo1.hwnd, &H14F, False, 0) oculta la lista desplegada
    de un ComboBox, aunque esto sucede también cuando cambiamos el focus a otro control o al formulario.


    Selección y eliminación de todos los elementos de un ListBox:

    Insertar un ListBox y dos Botón en un nuevo proyecto. Poner la propiedad MultiSelect del ListBox
    a "1 - Simple" y escriba el siguiente código:

    Private Declare Function SendMessageLong Lib "user32" Alias
    "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
    ByVal wParam As Long, ByVal lParam As Long) As Long

    Private Sub Form_Load()
    List1.AddItem "Texto 1"
    List1.AddItem "Texto 2"
    List1.AddItem "Texto 3"
    List1.AddItem "Texto 4"
    List1.AddItem "Texto 5"
    List1.AddItem "Texto 6"
    List1.AddItem "Texto 7"
    End Sub

    Private Sub Command1_Click()
    'Seleccion de todo el contenido
    Dim Resp As Long
    Resp = SendMessageLong(List1.hwnd, &H185&, True, -1)
    End Sub

    Private Sub Command2_Click()
    'Eliminacion de todos los elementos seleccionados
    Dim Resp As Long
    Resp = SendMessageLong(List1.hwnd, &H185&, False, -1)
    End Sub


    Calcular el tamaño de fuentes de letra:

    Es útil para utilizar con la propiedad Resize sobre los controles al cambiar de resolución de pantalla.
    Escribir el siguiente código:

    Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal
    hdc As Long, ByVal nIndex As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd
    As Long) As Long
    Private Declare Function GetDesktopWindow Lib "user32" ()
    As Long

    Private Sub Form_Load()
    Dim ObCaps As Long
    Dim ObDC As Long
    Dim ObDesktop As Long
    Dim Cad As String
    ObDesktop = GetDesktopWindow()
    ObDC = GetDC(ObDesktop)
    ObCaps = GetDeviceCaps(ObDC, 88)
    If ObCaps = 96 Then Cad = "Pequeñas
    If ObCaps = 120 Then Cad = "Grandes"
    MsgBox "Fuentes de letra " & Cad
    End Sub

    *) Esta función ha sido corregida por un error en las etiquetas, 96 corresponde a pequeñas
    y 120 a Grandes, agradecimientos a Andrés Moral Gutiérrez por su correción (01/06/1998)


    Provocar la trasparencia de un formulario:

    Escribir el siguiente código:

    Private Declare Function SetWindowLong Lib "user32" Alias
    "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long,
    ByVal dwNewLong As Long) As Long

    Private Sub Form_Load()
    Dim Resp As Long
    Resp = SetWindowLong(Me.hwnd, -20, &H20&)
    Form1.Refresh
    End Sub


    Pasar de un TextBox a otro al pulsar Enter:

    Insertar tres TextBox y escribir el siguiente código:

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    SendKeys "{tab}"
    KeyAscii = 0
    End If
    End Sub

    Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    SendKeys "{tab}"
    KeyAscii = 0
    End If
    End Sub

    Private Sub Text3_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    SendKeys "{tab}"
    KeyAscii = 0
    End If
    End Sub

    otra forma:

    Insertar tres TextBox, cambiar la propiedad KeyPreview del formulario a True y escribir el siguiente código:

    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    SendKeys "{tab}"
    KeyAscii = 0
    End If
    End Sub


    Usar IF THEN ELSE ENDIF en una misma línea:


    Insertar un CommandButton y un TextBox y escribir el siguiente código:

    Private Sub Command1_Click()
    Dim I As Integer
    Dim A As String
    I = 3
    A = IIf(I <> 1, "True", "False")
    Text1.Text = A
    End Sub


    Convertir un texto a mayúsculas o minúsculas:

    Crear un formulario y situar un TextBox. Escribir:

    Private Sub Text1_Change()
    Dim I As Integer
    Text1.Text = UCase(Text1.Text)
    I = Len(Text1.Text)
    Text1.SelStart = I
    End Sub


    Presentar la ventana AboutBox (Acerca de) por defecto:

    Escribir el siguiente código en el formulario:

    Private Declare Function ShellAbout Lib "shell32.dll" Alias
    "ShellAboutA" (ByVal hwnd As Long, ByVal szApp As String,
    ByVal szOtherStuff As String, ByVal hIcon As Long) As Long

    Private Sub Command1_Click()
    Call ShellAbout(Me.hwnd, "Título Programa", "Copyright 1997, Dueño de la aplicación", Me.Icon)
    End Sub


    Incrementar un menú en ejecución:

    Abrir un proyecto nuevo, y haga doble click sobre el formulario. Meidante el gestór de menús
    escribir lo siguiente:


    Caption -> Editor
    Name -> MnuEditor
    Pulse Insertar y el botón "->"
    Caption -> Añadir
    Name -> MnuAñadir
    Pulse Insertar
    Caption -> Quitar
    Name -> MnuQuitar
    Enabled -> False
    Pulse Insertar
    Caption -> Salir
    Name -> MnuSalir
    Pulse Insertar
    Caption -> -
    Name -> MnuIndex
    Index -> 0
    Pulse Aceptar

    Escribir el siguiente código en el formulario:

    Private ultElem As Integer

    Private Sub Form_Load()
    ultElem = 0
    End Sub

    Private Sub MnuQuitar_Click()
    Unload MnuIndex(ultElem)
    ultElem = ultElem - 1
    If ultElem = 0 Then
    MnuQuitar.Enabled = False
    End If
    End Sub

    Private Sub MnuSalir_Click()
    End
    End Sub

    Private Sub MnuAñadir_Click()
    ultElem = ultElem + 1
    Load MnuIndex(ultElem)
    MnuIndex(ultElem).Caption = "Menu -> " + Str(ultElem)
    MnuQuitar.Enabled = True
    End Sub


    Cambiar el fondo de Windows desde Visual Basic:

    Crear un formulario y escribir:

    Private Declare Function SystemParametersInfo Lib "user32" Alias
    "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As
    Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

    Private Sub Form_Load()
    Dim fallo As Integer
    fallo = SystemParametersInfo(20, 0, "C:\WINDOWS\FONDO.BMP", 0)
    End Sub


    Calcular el número de colores de video del modo actual de Windows:

    Crear un formulario y un TextBox y escribir:

    Private Declare Function GetDeviceCaps Lib "gdi32"
    (ByVal hdc As Long, ByVal nIndex As Long) As Long

    Private Sub Form_Load()
    i = (2 ^ GetDeviceCaps(Form1.hdc, 12)) ^
    GetDeviceCaps(Form1.hdc, 14)
    Text1.Text = CStr(i) & " colores."
    End Sub


    Ajustar un Bitmap a la pantalla:

    Crear un formulario con un BitMap cualquiera y una etiqueta o Label con los atributos que quiera.

    Escribir lo siguiente:

    Private Sub Form_Paint()
    Dim i As Integer
    For i = 0 To Form1.ScaleHeight Step Picture1.Height
    For j = 0 To Form1.ScaleWidth Step Picture1.Width
    PaintPicture Picture1, j, i, Picture1.Width,
    Picture1.Height
    Next
    Next
    End Sub

    Private Sub Form_Resize()
    Picture1.Left = -(Picture1.Width + 200)
    Picture1.Top = -(Picture1.Height + 200)
    Label1.Top = 100
    Label1.Left = 100
    End Sub


    Detectar la unidad del CD-ROM:

    Si para instalar una aplicación o ejecutar un determinado software necesitas saber si existe el CD-ROM:.

    Crear un formulario con una etiqueta y escribir lo siguiente:

    Option Explicit

    Private Declare Function GetDriveType Lib "kernel32" Alias
    "GetDriveTypeA" (ByVal nDrive As String) As Long
    Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias
    "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal
    lpBuffer As String) As Long
    Private Const DRIVE_REMOVABLE = 2
    Private Const DRIVE_FIXED = 3
    Private Const DRIVE_REMOTE = 4
    Private Const DRIVE_CDROM = 5
    Private Const DRIVE_RAMDISK = 6

    Function StripNulls(startStrg$) As String
    Dim c%, item$
    c% = 1
    Do
    If Mid$(startStrg$, c%, 1) = Chr$(0) Then
    item$ = Mid$(startStrg$, 1, c% - 1)
    startStrg$ = Mid$(startStrg$, c% + 1, Len(startStrg$))
    StripNulls$ = item$
    Exit Function
    End If
    c% = c% + 1
    Loop
    End Function

    Private Sub Form_Load()
    Dim r&, allDrives$, JustOneDrive$, pos%, DriveType&
    Dim CDfound As Integer
    allDrives$ = Space$(64)
    r& = GetLogicalDriveStrings(Len(allDrives$), allDrives$)
    allDrives$ = Left$(allDrives$, r&)
    Do
    pos% = InStr(allDrives$, Chr$(0))
    If pos% Then
    JustOneDrive$ = Left$(allDrives$, pos%)
    allDrives$ = Mid$(allDrives$, pos% + 1, Len(allDrives$))
    DriveType& = GetDriveType(JustOneDrive$)
    If DriveType& = DRIVE_CDROM Then
    CDfound% = True
    Exit Do
    End If
    End If
    Loop Until allDrives$ = "" Or DriveType& = DRIVE_CDROM
    If CDfound% Then
    label1.Caption = "La unidad de CD-ROM corresponde a la
    unidad: " & UCase$(JustOneDrive$)
    Else
    label1.Caption = "Su sistema no posee CD-ROM o unidad
    no encontrada."
    End If
    End Sub


    Calcular la profundidad de color (bits por pixel) y resolución de Windows:

    Crear un formulario y un TextBox y escribir:

    Private Declare Function GetDeviceCaps Lib "gdi32"
    (ByVal hdc As Long, ByVal nIndex As Long) As Long

    Private Sub Form_Load()
    Dim col, bit, largo, alto As Integer
    col = GetDeviceCaps(Form1.hdc, 12)
    If col = 1 Then
    bit = GetDeviceCaps(Form1.hdc, 14)
    If bit = 1 Then
    Text1.Text = "Resolucion de 1 bit / 2 colores"
    ElseIf bit = 4 Then
    Text1.Text = "Resolucion de 4 bits / 16 colores"
    End If
    ElseIf col = 8 Then
    Text1.Text = "Resolucion de 8 bits / 256 colores"
    ElseIf col = 16 Then
    Text1.Text = "Resolucion de 16 bits / 65000 colores"
    Else
    Text1.Text = "Resolucion de 16 M colores"
    End If
    largo = GetDeviceCaps(Form1.hdc, 8)
    alto = GetDeviceCaps(Form1.hdc, 10)
    Text1.Text = Text1.Text & " " & largo & "x" & alto & " pixels"
    End Sub


    Comprobar si el sistema posee tarjeta de sonido:

    Crear un formulario y escribir:

    Private Declare Function waveOutGetNumDevs Lib
    "winmm.dll" () As Long

    Private Sub Form_Load()
    Dim inf As Integer
    inf = waveOutGetNumDevs()
    If inf > 0 Then
    MsgBox "Tarjeta de sonido soportada.", vbInformation,
    "Informacion: Tarjeta de sonido"
    Else
    MsgBox "Tarjeta de sonido no soportada.", vbInformation,
    "Informacion: Tarjeta de sonido"
    End If
    End
    End Sub


    Crear una ventana con la Información del Sistema:

    Crear un formulario e insertar un módulo y escribir en el formulario lo siguiente:

    Private Sub Form_Load()
    Dim msg As String
    MousePointer = 11
    Dim verinfo As OSVERSIONINFO
    verinfo.dwOSVersionInfoSize = Len(verinfo)
    ret% = GetVersionEx(verinfo)
    If ret% = 0 Then
    MsgBox "Error Obteniendo Information de la Version"
    End
    End If
    Select Case verinfo.dwPlatformId
    Case 0
    msg = msg + "Windows 32s "
    Case 1
    msg = msg + "Windows 95 "
    Case 2
    msg = msg + "Windows NT "
    End Select
    ver_major$ = verinfo.dwMajorVersion
    ver_minor$ = verinfo.dwMinorVersion
    build$ = verinfo.dwBuildNumber
    msg = msg + ver_major$ + "." + ver_minor$
    msg = msg + " (Construido " + build$ + ")" + vbCrLf + vbCrLf
    Dim sysinfo As SYSTEM_INFO
    GetSystemInfo sysinfo
    msg = msg + "CPU: "
    Select Case sysinfo.dwProcessorType
    Case PROCESSOR_INTEL_386
    msg = msg + "Procesador Intel 386 o compatible." + vbCrLf
    Case PROCESSOR_INTEL_486
    msg = msg + "Procesador Intel 486 o compatible." + vbCrLf
    Case PROCESSOR_INTEL_PENTIUM
    msg = msg + "Procesador Intel Pentium o compatible." + vbCrLf
    Case PROCESSOR_MIPS_R4000
    msg = msg + "Procesador MIPS R4000." + vbCrLf
    Case PROCESSOR_ALPHA_21064
    msg = msg + "Procesador DEC Alpha 21064." + vbCrLf
    Case Else
    msg = msg + "Procesador (desconocido)." + vbCrLf
    End Select
    msg = msg + vbCrLf
    Dim memsts As MEMORYSTATUS
    Dim memory&
    GlobalMemoryStatus memsts
    memory& = memsts.dwTotalPhys
    msg = msg + "Memoria Fisica Total: "
    msg = msg + Format$(memory& \ 1024, "###,###,###") + "Kb" + vbCrLf
    memory& = memsts.dwAvailPhys
    msg = msg + "Memoria Fisica Disponible: "
    msg = msg + Format$(memory& \ 1024, "###,###,###") + "Kb" + vbCrLf
    memory& = memsts.dwTotalVirtual
    msg = msg + "Memoria Virtual Total: "
    msg = msg + Format$(memory& \ 1024, "###,###,###") + "Kb" + vbCrLf
    memory& = memsts.dwAvailVirtual
    msg = msg + "Memoria Virtual Disponible: "
    msg = msg + Format$(memory& \ 1024, "###,###,###") + "Kb" + vbCrLf + vbCrLf
    MsgBox msg, 0, "Acerca del Sistema"
    MousePointer = 0
    End
    End Sub

    Escribir lo siguiente en el módulo:

    Type SYSTEM_INFO
    dwOemID As Long
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    dwReserved As Long
    End Type

    Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
    End Type

    Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
    End Type

    Declare Function GetVersionEx Lib "kernel32"
    Alias "GetVersionExA" (LpVersionInformation
    As OSVERSIONINFO) As Long
    Declare Sub GlobalMemoryStatus Lib "kernel32"
    (lpBuffer As MEMORYSTATUS)
    Declare Sub GetSystemInfo Lib "kernel32"
    (lpSystemInfo As SYSTEM_INFO)

    Public Const PROCESSOR_INTEL_386 = 386
    Public Const PROCESSOR_INTEL_486 = 486
    Public Const PROCESSOR_INTEL_PENTIUM = 586
    Public Const PROCESSOR_MIPS_R4000 = 4000
    Public Const PROCESSOR_ALPHA_21064 = 21064


    Mostrar un fichero AVI a pantalla completa:

    Crear un formulario y escribir:

    Private Declare Function mciSendString Lib
    "winmm.dll" Alias "mciSendStringA"
    (ByVal lpstrCommand As String,
    ByVal lpstrReturnString As Any,
    ByVal uReturnLength As Long,
    ByVal hwndCallback As Long) As Long

    Private Sub Form_Load()
    CmdStr$ = "play e:\media\avi\nombre.avi fullscreen"
    ReturnVal& = mciSendString(CmdStr$, 0&, 0, 0&)
    End Sub


    Crear un link con un programa añadiéndolo al grupo de programas situado en

    Inicio -> Programas o Start -> Programs:

    Crear un formulario y escribir:

    Private Declare Function fCreateShellLink
    Lib "STKIT432.DLL" (ByVal lpstrFolderName
    As String, ByVal lpstrLinkName As String,
    ByVal lpstrLinkPath As String,
    ByVal lpstrLinkArgs As String) As Long

    Private Sub Form_Load()
    iLong = fCreateShellLink("",
    "Visual Basic", "C:\Archivos de Programa\DevStudio\Vb\vb5.exe", "")
    End Sub


    Apagar el equipo, reiniciar Windows, reiniciar el Sistema:

    Añadir tres botones a un formulario y escribir lo siguiente en el código del formulario:

    Private Declare Function ExitWindowsEx& Lib "user32" (ByVal
    uFlags&, ByVal dwReserved&)

    Private Sub Command1_Click()
    Dim i as integer
    i = ExitWindowsEx(1, 0&) 'Apaga el equipo
    End Sub

    Private Sub Command2_Click()
    Dim i as integer
    i = ExitWindowsEx(0, 0&) 'Reinicia Windows con nuevo usuario
    End Sub

    Private Sub Command3_Click()
    Dim i as integer
    i = ExitWindowsEx(2, 0&) 'Reinicia el Sistema
    End Sub


    Borrar un fichero y enviarlo a la papelera de reciclaje:

    Crear un formulario y escribir el siguiente código:

    Private Type SHFILEOPSTRUCT
    hWnd As Long
    wFunc As Long
    pFrom As String
    pTo As String
    fFlags As Integer
    fAnyOperationsAborted As Boolean
    hNameMappings As Long
    lpszProgressTitle As String
    End Type

    Private Declare Function SHFileOperation Lib "shell32.dll" Alias
    "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

    Private Const FO_DELETE = &H3
    Private Const FOF_ALLOWUNDO = &H40

    Public Sub PapeleraDeReciclaje(ByVal Fichero As String)
    Dim SHFileOp As SHFILEOPSTRUCT
    Dim RetVal As Long
    With SHFileOp
    .wFunc = FO_DELETE
    .pFrom = FileName
    .fFlags = FOF_ALLOWUNDO
    End With
    RetVal = SHFileOperation(SHFileOp)
    End Sub

    Private Sub Form_Load()
    Recycle "c:\a.txt"
    End Sub

    El programa preguntará si deseamos o no eliminar el fichero y enviarlo a la papelera de reciclaje.

    El parámetro .fFlags nos permitirá recuperar el fichero de la papelera si lo deseamos

    Si eliminamos esta línea, el fichero no podrá ser recuperado.


    Abrir el Acceso telefónico a Redes de Windows y ejecutar una conexión:

    Crear un formulario y escribir el siguiente código:

    Private Sub Form_Load()
    Dim AbrirConexion As Long
    AbrirConexion = Shell("rundll32.exe rnaui.dll,RnaDial " &
    "ConexiónInternet", 1)
    SendKeys "{ENTER}"
    End Sub


    Situar una ScroolBar horizontal en un ListBox:

    Crear un formulario y escribir el siguiente código:

    Private Declare Function SendMessage Lib "user32" Alias
    "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,
    ByVal wParam As Long, lParam As Any) As Long

    Private Sub Form_Load()
    Dim x As Integer, i As Integer
    For i = 1 To 20
    List1.AddItem "El número final de la selección es el " & i
    Next i
    x = SendMessage(List1.hwnd, &H194, 200, ByVal 0&)
    End Sub


    Obtener el nombre de usuario y de la compañia de Windows:

    Crear un formulario, añadir dos etiquetas o labels y escribir el siguiente código:

    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As LongPrivate Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongPrivate Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongPrivate Sub Form_Load()    Dim strUser As String    Dim strOrg As String    Dim lngLen As Long    Dim lngType As Long    Dim hKey As Long    Dim x As Long    Const HKEY_LOCAL_MACHINE = &H80000002    Const REG_SZ = &H1    x = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", hKey) ' open desired key in registry    strUser = Space$(256)    lngLen = Len(strUser)    x = RegQueryValueEx(hKey, "RegisteredOwner", 0, lngType, ByVal strUser, lngLen)    If x = 0 And lngType = REG_SZ And lngLen > 1 Then        strUser = Left$(strUser, lngLen - 1)    Else        strUser = "Unknown"    End If    strOrg = Space$(256)    lngLen = Len(strOrg)    x = RegQueryValueEx(hKey, "RegisteredOrganization", 0, lngType, ByVal strOrg, lngLen)    If x = 0 And lngType = REG_SZ And lngLen > 1 Then        strOrg = Left$(strOrg, lngLen - 1)    Else        strOrg = "Unknown"    End If    Label1.Caption = "Usuario: " & strUser    Label2.Caption = "Empresa: " & strOrg    x = RegCloseKey(hKey)End Sub

    Forzar a un TextBox para que admita únicamente números:

    Crear un formulario, añadir un TextBox y escribir el siguiente código:

    Sub Text1_Keypress(KeyAscii As Integer)    If KeyAscii <> Asc("9") Then    'KeyAscii = 8 es el retroceso o BackSpace       If KeyAscii <> 8 Then           KeyAscii = 0       End If    End IfEnd Sub

    Forzar a un InputBox para que admita únicamente números:

    Crear un formulario y escribir el siguiente código:

    Private Sub Form_Load()    Dim Numero As String    Do        Numero = InputBox("Introduzca un numero:")    Loop Until IsNumeric(Numero)    MsgBox "El numero es el " & Numero    Unload MeEnd Sub

    Hacer Drag & Drop de un control (ejemplo de un PictureBox):

    En un formulario, añadir un PictureBox con una imagen cualquiera y escribir el siguiente código:

    Private DragX As IntegerPrivate DragY As IntegerSub Form_DragDrop(Source As Control, X As Single, Y As Single)    Source.Move (X - DragX), (Y - DragY)End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)    'Si el boton del raton es el derecho, no hacemos nada    If Button = 2 Then Exit Sub    Picture1.Drag 1    DragX = X    DragY = YEnd SubPrivate Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)    Picture1.Drag 2End Sub

    Centrar una ventana en Visual Basic:

    Usar:Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2En vez de:Form1.Left = Screen.Width - Width \ 2Form1.Top = Screen.Height - Height \ 2


    Ejecuta pausas durante un determinado espacio de tiempo en segundos: 

    Llamada: Espera(5)Sub Espera(Segundos As Single)  Dim ComienzoSeg As Single  Dim FinSeg As Single  ComienzoSeg = Timer  FinSeg = ComienzoSeg + Segundos  Do While FinSeg > Timer      DoEvents      If ComienzoSeg > Timer Then          FinSeg = FinSeg - 24 * 60 * 60      End If  Loop End Sub

    Editor de texto:

    Seleccionar todo el texto:    Text1.SetFocus    Text1.SelStart = 0    Text1.SelLength = Len(Text1.Text)Copiar texto:    Clipboard.Clear    Clipboard.SetText Text1.SelText    Text1.SetFocusPegar texto:    Text1.SelText = Clipboard.GetText()    Text1.SetFocusCortar texto:    Clipboard.SetText Text1.SelText    Text1.SelText = ""    Text1.SetFocusDeshacer texto:  (Nota: esta operación sólo es eficaz con el control Rich TextBox).En un módulo copie esta línea:Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As LongEsta es la instrucción de la función deshacer:   UndoResultado = SendMessage(Text1.hwnd, &HC7, 0&, 0&)    If UndoResultado = -1 Then        Beep        MsgBox "Error al intentar recuperar.", 20, "Deshacer texto"    End If
    Seleccionar todo el texto:    SendKeys "^A"Copiar texto:    SendKeys "^C"    Pegar texto:    SendKeys "^V"Cortar texto:    SendKeys "^X"Deshacer texto:    SendKeys "^Z"


    Obtener el directorio de Windows y el directorio de Sistema: 

    En un módulo copiar estas líneas:Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA"_ (ByVal lpBuffer As String, ByVal nSize As Long) As LongDeclare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA"_ (ByVal lpBuffer As String, ByVal nSize As Long) As LongPonga dos Labels o etiquetas y un botón en el formulario:Label1, Label2, Command1Hacer doble click sobre el botón y escribir el código siguiente:Private Sub Command1_Click()    Dim Car As String * 128    Dim Longitud, Es As Integer    Dim Camino As String        Longitud = 128        Es = GetWindowsDirectory(Car, Longitud)    Camino = RTrim$(LCase$(Left$(Car, Es)))    Label1.Caption = Camino        Es = GetSystemDirectory(Car, Longitud)    Camino = RTrim$(LCase$(Left$(Car, Es)))    Label2.Caption = CaminoEnd Sub

    Ocultar la barra de tareas en Windows 95 y/o Windows NT:

    En un módulo copiar estas líneas:Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName_ As String, ByVal lpWindowName As String) As LongDeclare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfterAs Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long,_ByVal wFlags As Long) As LongGlobal Ventana As LongGlobal Const Muestra = &H40Global Const Oculta = &H80En un formulario ponga dos botones y escriba el código correspondientea cada uno de ellos:'Oculta la barra de tareasPrivate Sub Command1_Click()    Ventana = FindWindow("Shell_traywnd", "")    Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Oculta)End Sub'Muestra la barra de tareasPrivate Sub Command2_Click()    Call SetWindowPos(Ventana, 0, 0, 0, 0, 0, Muestra)End Sub

    Imprimir el contenido de un TextBox en líneas de X caracteres:

    Añadir un TextBox con las propiedades "Multiline=True" y "ScrollBars=Vertical", y un CommandButton. Hacer doble click sobre él y escribir este código:Private Sub Command1_Click()    'X es 60 en este ejmplo    imprimeLineas Text1, 60End SubEn las declaraciones "Generales" del formulario, escribimos:Public Sub imprimeLineas(Texto As Object, Linea As Integer)    Dim Bloque As String    'Numero de caracteres = NumC    'Numero de Bloques = NumB    Dim NumC, NumB As Integer    NumC = Len(Texto.Text)    If NumC > Linea Then        NumB = NumC \ Linea        For I = 0 To NumB            Texto.SelStart = (Linea * I)            Texto.SelLength = Linea            Bloque = Texto.SelText            Printer.Print Bloque        Next I    Else        Printer.Print Texto.Text    End If    Printer.EndDocEnd Sub


    Leer y escribir un fichero Ini: 

    Declaraciones generales en un módulo:Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA"_(ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As_String ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As_String) As LongDeclare Function WritePrivateProfileString Lib "kernel32" Alias_"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As_Any, ByVal lpString As Any, ByVal lpFileName As String) As LongLeer en "Ejemplo.Ini":Private Sub Form_Load()    Dim I As Integer    Dim Est As String    Est = String$(50, " ")    I = GetPrivateProfileString("Ejemplo", "Nombre", "", Est, Len(Est), "Ejemplo.ini")    If I > 0 Then        MsgBox "Tu Nombre es: " & Est    End IfEnd SubEscribir en "Prueba.Ini":Private Sub Form_Unload(Cancel As Integer)    Dim I As Integer    Dim Est As String    Est = "Ejemplo - Apartado"    I = WritePrivateProfileString("Ejemplo", "Nombre", Est, "Ejemplo.ini")End Sub(Nota: si I=0 quiere decir que no existe Información en la línea de fichero Ini a laque hacemos referencia. El fichero "Ejemplo.Ini" se creará automáticamente).

    Crear una barra de estado sin utilizar controles OCX o VBX:

    Crear una PictureBox y una HScrollBar:Propiedades de la HScrollBar:Max -> 100Min -> 0Propiedades de la PictureBox:DrawMode -> 14 - Merge Pen NotFillColor -> &H00C00000&Font -> Verdana, Tahoma, Arial; Negrita; 10ForeColor -> &H00000000&ScaleHeight -> 10ScaleMode -> 0 - UserScaleWidth -> 100Insertar en el formulario o módulo el código de la función:Sub Barra(Tam As Integer)    If Tam > 100 Or Tam <>
    Insertar en el evento Change del control HScrollBar:Private Sub HScroll1_Change()    Barra (HScroll1.Value)End SubEn el evento Paint del formulario, escribir:Private Sub Form_Paint()    Barra (HScroll1.Value)End Sub


    Calcular el espacio total y espacio libre de una Unidad de disco: 

    Crear un módulo y escribir:Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA"_(ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector_As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As LongCrear 7 Labels:Escribir el código siguiente:Private Sub Form_Load()    Dim I1 As Long    Dim I2 As Long    Dim I3 As Long    Dim I4 As Long    Dim Unidad As String    Unidad = "C:/"    GetDiskFreeSpace Unidad, I1, I2, I3, I4    Label1.Caption = Unidad    Label2.Caption = I1 & " Sectores por cluster"    Label3.Caption = I2 & " Bytes por sector"    Label4.Caption = I3 & " Número de clusters libres"    Label5.Caption = I4 & " Número total de clusters"    Label6.Caption = "Espacio total en disco: " & (I1 * I2 * I4)    Label7.Caption = "Espacio libre en disco: " & (I1 * I2 * I3)End Sub


    Crear un efecto Shade al estilo de los programas de instalación: 

    Crear un proyecto nuevo y escribir el código siguiente:Private Sub Form_Resize()    Form1.Cls    Form1.AutoRedraw = True    Form1.DrawStyle = 6    Form1.DrawMode = 13    Form1.DrawWidth = 2    Form1.ScaleMode = 3    Form1.ScaleHeight = (256 * 2)    For i = 0 To 255       Form1.Line (0, Y)-(Form1.Width, Y + 2), RGB(0, 0, i), BF       Y = Y + 2    Next iEnd Sub

    Situar el cursor encima de un determinado control (p. ej.: un botón):

    Escribir el código siguiente en el módulo:Declare Sub SetCursorPos Lib "User32" (ByVal X As Integer, ByVal Y As Integer)Insertar un botón en el formulario y escribir el siguiente código:Private Sub Form_Load()     X% = (Form1.Left + Command1.Left + Command1.Width / 2 + 60) / Screen.TwipsPerPixelX     Y% = (Form1.Top + Command1.Top + Command1.Height / 2 + 360) / Screen.TwipsPerPixelY     SetCursorPos X%, Y%End Sub

    Menú PopUp en un TextBox:

    Ejemplo para no visualizar el menú PopUp implícito de Windows:En el evento MouseDown del control TextBox escriba:Private Sub Editor1_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)    If Button = 2 Then        Editor1.Enabled = False        PopupMenu MiMenu        Editor1.Enabled = True        Editor1.SetFocus    End IfEnd Sub


    Hacer sonar un fichero Wav o Midi: 

    Insertar el siguiente código en un módulo:Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As LongInsertar un botón en el formulario y escribir el siguiente código:Private Sub Command1_Click()    iResult = mciExecute("Play c:\windows\ringin.wav")End Sub

    Hacer un formulario flotante al estilo de Visual Basic:

    Crear un nuevo proyecto, insertar un botón al formulario que inserte un formulario más y un módulo. Pegue el siguiente código en el 
    módulo:Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPeguar el siguiente código en el formulario principal:Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    Unload Form2End SubPrivate Sub Command1_Click()   Dim ret As Integer   If doshow = False Then    ret = SetParent(Form2.hWnd, Form1.hWnd)    Form2.Left = 0    Form2.Top = 0   Form2.Show    doshow = True      Else         Form2.Hide     doshow = False   End IfEnd Sub

    Comprobar si el programa ya está en ejecución:

    Crear un nuevo proyecto e insertar el siguiente código:Private Sub Form_Load()    If App.PrevInstance Then        Msg = App.EXEName & ".EXE" & " ya está en ejecución"        MsgBox Msg, 16, "Aplicación."        End    End IfEnd Sub

    Hallar el nombre del PC en Windows 95 o Windows NT:

    Cree un nuevo proyecto e inserte dos ButtonClick y un Módulo:Pegue el siguiente código en el formulario:Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)    Dim nPC as String    Dim buffer As String    Dim estado As Long    buffer = String$(255, " ")    estado = GetComputerName(buffer, 255)    If estado <> 0 Then        nPC = Left(buffer, 255)    End If    MsgBox "Nombre del PC: " & nPCEnd SubPrivate Sub Command2_Click()    Unload Form1End SubPegue el siguiente código en el módulo:Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA"
    (ByVal lpBuffer As String, nSize As Long) As Long

    Eliminar el sonido "Beep" cuando pulsamos Enter en un TextBox:

    Crear un nuevo proyecto e insertar un TextBox:Peguar el siguiente código en el formulario:Private Sub Text1_KeyPress(KeyAscii As Integer)    If KeyAscii = 13 Or KeyAscii = 9 Then KeyAscii = 0End Sub

    Ocultar y mostrar el puntero del ratón:

    Crear un nuevo proyecto e insertar dos ButtonClick y un Módulo:Pegue el siguiente código en el formulario:Private Sub Command1_Click()    result = ShowCursor(False)End SubPrivate Sub Command2_Click()    result = ShowCursor(True)End SubUsar las teclas alternativas Alt+O para ocultarlo y Alt+M para mostrarlo.Peguar el siguiente código en el módulo:Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

    Calcular el número de serie de un disco:

    Crear un nuevo proyecto e insertar el siguiente código en el formulario:Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA"(ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, ByVal nVolumeNameSizeAs Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlagsAs Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)Private Sub Form_Load()    Dim cad1 As String * 256    Dim cad2 As String * 256    Dim numSerie As Long    Dim longitud As Long    Dim flag As Long    unidad = "C:\"    Call GetVolumeInformation(unidad, cad1, 256, numSerie, longitud, flag, cad2, 256)    MsgBox "Numero de Serie de la unidad " & unidad & " = " & numSerieEnd Sub

     

    Trucos Breves 2

     


    Seleccionar todo un procedimiento
     Para seleccionar un procedimiento completo (ya sea para borrarlo o para copiarlo a otro formulario) abrimos la pantalla de edición correspondiente y luego hacemos un doble clic en la parte izquierda de la misma (donde el cursor cambia a una flecha apuntando hacia la derecha).

     

    Cambiar rápidamente la propiedad Enabled
     La propiedad Enabled de un objeto se puede alternar fácilmente con una única línea de código:
    optAlternar.Enabled = NOT optAlternar.Enabled
    Este código es independiente de la definición de True y False, la cual varía según la versión de VB utilizada. Ya sea que se represente numéricamente (-1 = True; 0 = False) o lógicamente, la operación NOT se adapta para dar el resultado correcto.

     

    Date y Date$ no son equivalentes
     La función Date$ devuelve la fecha del sistema en un string con el formato MM-DD-AAAA. Date devuelve un variant con el formato de fecha especificado en el Panel de Control (puede devolver, por ejemplo, DD-MM-AA). Si queremos realizar cálculos con fechas, debemos utilizar Date$. Para mostrar la fecha actual al usuario, basta con usar Date (sin el símbolo $).

     

    "Couldn't find installable ISAM"
     En una aplicación que accede a bases de datos, este error indica que VB no encuentra Información sobre los archivos de acceso a bases de datos. Debemos crear un archivo en la carpeta de Windows con esa Información: copiar el archivo Vb.INI a dicha subcarpeta, con el nombre de la aplicación ejecutable y la extensión INI (por ejemplo, Agenda.INI).

     

    Evitar la carga de complementos
     Al cargar VB 4 o 5, cualquier complemento (Add-In) activo también se ejecuta. Si hay un error en algún complemento, puede ocurrir un GPF (falla de protección general). Para evitar esto, apagar los complementos antes de cargar VB, editando el archivo VBAddin.INI (en la carpeta de Windows), poniendo un 0 al lado de cada complemento. Por ejemplo: AppWizard.Wizard=0.

     

    Pasar cadenas de caracteres a una DLL
     VB presenta un problema a la hora de recibir cadenas de caracteres grandes de una DLL. Se produce una sobrecarga que demora el procesamiento, aun cuando ningún resultado es devuelto. Por esta razón, en programas de tiempo crítico es necesario salvar este inconveniente pasando cadenas inicializadas con la longitud exacta que se espera recibir.

     

    Descargar formularios poco utilizados
     Hay que tener en cuenta que, aunque estén ocultos, los formularios ocupan un espacio de memoria. Tener en memoria un formulario con muchos controles que se usará una sola vez no resulta una muy buena idea, o sea que no es conveniente ocultarlo. En tal caso, conviene descargarlo después de usado.

     

    Evitar el uso de las propiedades por defecto
     Si bien las propiedades por defecto muchas veces nos ahorran tipear unos cuantos caracteres demás, no siempre es bueno confiar en ellas. Por ejemplo, algunas propiedades por defecto cambiaron de Visual Basic 3 a la versión 4, causando "cuelgues" inexplicables. Aunque es un poco más trabajoso, conviene utilizar todas las propiedades explícitamente.

     

    Comentar e indentar el código
     Realizar comentarios acerca de cómo funciona una rutina, e indentar el código de la misma para que sea más fácil de leer, son dos acciones que debemos realizar siempre al programar. Un simple renglón aclaratorio puede ahorrar horas de prueba y error el día de mañana. Indentar significa poner cada ciclo repetitivo hacia la derecha, para lo cual basta una presión de la tecla [TAB].

     

    Grabar antes de ejecutar
     Es una buena costumbre de programación el grabar los programas antes de ejecutarlos. Esto es especialmente recomendado en el caso de usar alguna función API, puesto que una mala definición de la misma, o el paso incorrecto de algún argumento, pueden causar un GPF (Error de protección general) en Visual Basic, e incluso en el mismo Windows.

     

    Seleccionar varios controles
     Para setear un grupo de propiedades en varios controles, podemos acelerar el trabajo seleccionándolos a todos y seteando las propiedades una sola vez. Para ello se "dibuja" un rectángulo que contenga a todos los controles a seleccionar. Automáticamente, VB mostrará en la ventana de propiedades sólo las que son comunes a todos los controles seleccionados, pudiendo setearlas en conjunto.

     

    Borrar las variables objeto
     Al terminar de usar una variable que contiene un objeto (por ejemplo, una variable definida As Database) conviene setear su valor a Nothing. Esto libera la memoria ocupada por dicha variable, lo que no siempre ocurre al cerrar el objeto. Por ejemplo:
    Dim DB As Database
    ' Abro la base
    Set DB = OpenDatabase ("C:\VB\BIBLIO.MDB")
    ...
    ' Cierro
    DB.Close
    ' Libero la memoria
    Set DB = Nothing

     

     

    Evitar el "beep" del [ENTER]
     Muchas veces, cuando se ingresa Información en una caja de texto y se presiona la tecla [ENTER], se escucha un "beep". Para evitar esto, colocar el código siguiente en el evento KeyPress de la caja de texto:
    If KeyAscii = Asc(vbCR) Then

    KeyAscii = 0
    End If

     

    TextBox de sólo lectura
     Para hacer que un TextBox sea de sólo lectura, podemos setear su propiedad Enabled a False. Sin embargo, esto le da un feo color gris que habitualmente dificulta. Otra manera de hacerlo, más elegante, es incluir el siguiente código en el evento KeyPress de dicho control (el cual no impide que el usuario coloque el cursor sobre él):
    KeyAscii = 0

     

    Error al utilizar SetFocus
     Si utilizamos el método SetFocus sobre un control o formulario que no está visible o habilitado (propiedad Enabled), Visual Basic puede llegar a colgar nuestra aplicación, si es que no se utiliza control de errores. Antes de usar este método, hay que asegurarse que el control esté visible y habilitado.

     

    La excepción que confirma la regla
     Si bien el truco del SetFocus funciona casi siempre, hay una excepción muy importante, constituida por los métodos gráficos (Print, Line, Circle y PSet). Al llamar a estos métodos no puede usarse la estructura With ... End With, debiéndose anteponer el objeto a dichos métodos, aun dentro de dicha estructura. Un ejemplo sería:
    With Picture

    .Move 0, 0

    Picture.Print "Hola, Mundo!"
    End UIT

     

    Evitar cadenas nulas en campos de Access
     Si se utiliza una base de datos de Access, los campos alfanuméricos contienen valor NULL hasta tanto se les asigne algún valor (aunque sea una cadena vacía). Si se lee un campo con valor NULL de un RecordSet, asignando su valor a una variable de tipo cadena, se produce un error de ejecución. Para evitar esto, se concatena una cadena vacía a cada campo en cuanto se lo lee.

     

    Usar Sleep en lugar de DoEvents
     En un programa que se ejecuta en Windows 95 o Windows NT, es conveniente usar la función API Sleep. DoEvents pierde parte de su tiempo procesando mensajes del mismo proceso, lo que en un entorno multitarea es innecesario. La declaración de la función es:
    Public Declare Sub Sleep Lib "KERNEL32" Alias Sleep (ByVal Milisegundos As Long)
    Y se usa de la siguiente manera:
    Sleep 0&

     

    Error al cambiar el tamaño de los formularios
     Si intentamos cambiar el tamaño de un formulario mientras está minimizado, obtendremos un error. Para evitar esto, ay que chequear antes todo el estado del formulario. Esto se logra con el siguiente fragmento de código:

    If Me.WindowState <> 1 Then' NO estoy minimizado' El código para mover o cambiar el tamaño del formulario va aqui.End If

     

    No genera eventos al mostrar un MessageBox

    Mientras un programa se encuentra mostrando un cuadro de mensaje en la pantalla (generado con la instrucción MsgBox) no admite que se produzca ningún evento. Esto es para prevenir la ejecución de código que podría causar problemas, ya que un mensaje de este tipo sólo debería aparecer en contadas ocasiones.

     

    Cantidad de Bytes que Ocupa un Directorio

    Sub Form_Load()

         Dim FileName As String

         Dim FileSize As Currency

         Dim Directory As String

         Directory = "c:\windows\"

         FileName = Dir$(Directory & "*.*")

         FileSize = 0

     

         Do While FileName <> ""

                FileSize = FileSize + FileLen(Directory & FileName)

                FileName = Dir$

         Loop

     

         Text1.Text = "Este directorio ocupa la cantidad de bytes = " + Str$(FileSize)

    End Sub

     

     

    Entrar en las Propiedades de Accesibilidad
    1. Crear un nuevo formulario, Form1 por defecto
    2. Añadir un boton al formulario "Command Button control"
    3. Añadir el siguiente codigo a la propieded Clik del boton.

    Private Sub Command1_Click()
    X = Shell("Rundll32.exe shell32.dll,Control_RunDLL main.cpl @2")
    End Sub

     

     

    como montar una red

    Tipos de redes
    Cómo montar una red en tu hogar

    Con este informe damos por comenzado un curso sobre cómo montar una red de ordenadores en tu casa y así compartir recursos. En la primera entrega veremos qué es una redy los diferentes tipos.

    Gracias a las nuevas tecnologías y a su precio asequible no es extraño poder encontrar en algunos hogares dos o más ordenadores. Bien por trabajo u ocio, cada día los ordenadores juegan un papel más importante en nuestras vidas.

    Las nuevas conexiones a Internet como el ADSL o el cable, nos permiten estar conectados permanentemente a Internet por una, más o menos pequeña, cuota mensual. Nos permiten disponer de Internet y telefonía simultáneamente.

    Los actuales tipos de conexión, exceptuando las líneas RDSI, no permiten dos conexiones simultáneas a Internet; por lo que se necesitarían dos líneas, y por lo tanto dos cuotas para conectar dos ordenadores a Internet. La solución más económica para ello sería montar una pequeña red doméstica, denominada LAN (Local Area Network: Red de Area Local), y usar una única conexión a Internet para todos los equipos.

    No es de extrañar que en un mismo hogar sea necesario el pasar datos o programas de un equipo a otro, o algo tan simple como imprimir. Si no disponemos de una red, la única solución para ello es andar de un lado para otro grabando los archivos en alguno de los diferentes soportes disponibles, disquetes, cd-rom, etc., sin hablar del tiempo que se pierde realizando esta operación.

    Hoy en día no resulta excesivamente costoso, ni complicado el poder disponer de una pequeña red en nuestro hogar. Tanto el hardware, software, e incluso el sistema operativo son fáciles de instalar y configurar.

    Tres motivos para montar una red en casa

    1. Compartir una sola conexión a Internet

    Compartir la salida a Internet nos permitirá repartir el ancho de banda de nuestra conexión, entre los equipos conectados en la red. Esto nos permitirá realizar las operaciones más normales con Internet, como es: navegar, descargarnos el correo, chatear, etc.

    Para ello disponemos de varias soluciones dependiendo del tipo de conexión que dispongamos y del hardware. Podemos usar soluciones de hardware, como Routers si disponemos de conexiones ADSL o RDSI, software si disponemos de módem convencional o las anteriores, o el propio sistema operativo para cualquier tipo de conexión.

    Las soluciones de hardware, nos ofrecen total independencia de la conexión con los ordenadores, es decir, para poder navegar solo será necesario que esté encendido el Router. En cambio las soluciones por software implican que el ordenador que haga de enlace con la conexión a Internet esté encendido.

    2. Compartir dispositivos y recursos
    Gracias a la red podemos compartir la impresora, el escáner y cualquier otro dispositivo de hardware susceptible de ser compartido. Con ello ganamos en espacio, tiempo y dinero, una única impresora puede ser usada por cualquier equipo en la red.

    También es posible compartir cualquier unidad de almacenamiento, como pueden ser discos duros, disqueteras, unidades Zip, etc. Esto nos permite un amplio abanico de posibilidades tales como: espacio extra de almacenamiento, trabajar con documentos o archivos remotos, etc.

    3. Jugar en red
    Al conectar los equipos en red y compartir una conexión a Internet, los miembros de la familia pueden jugar desde equipos distintos entre ellos mismos o en Internet. Mientras ellos juegan, otro miembro puede estar navegando, descargando correo, etc.

    Las redes se suelen clasificar según la tecnología que utilizan para hacer las conexiones. Veamos algunos casos.

    Diferentes tipos de redes

    Aunque existen varios tipos de red diferentes, en este artículo solo trataremos los dos tipos de red doméstica más conocidos: Ethernet, y Wireless (Inalámbrica). Obviamente se pueden usar conjuntamente en equipos distintos, es decir, dos equipos de escritorio pueden estar unidos por Ethernet, mientras un equipo portátil se encuentra por Wireless.

    El tipo de red es independiente del ordenador y del sistema operativo; es decir, podemos tener diferentes tipo de ordenadores, como PC’s y Macintosh, como diferentes sistemas operativos, Windows, Linux, Unix, etc.

    La elección de uno u otro tipo dependerá de varios factores a tener en cuenta, entre ellos la distancia entre ordenadores, la cantidad de ordenadores, el hardware de red que tengan instalados, etc.

    Ethernet

    Ethernet es la tecnología estándar actual usada por la mayoría de empresas; enlaza los equipos mediante un cable especial y un dispositivo denominado concentrador.

    Es la tecnología de red más rápida, más confiable y menos costosa. La mayoría de módems y Routers DSL, utilizan conexiones Ethernet. Requiere que se instalen en las paredes los cables que conectan los equipos.

    Wireless

    Enlaza a los equipos sin cables, mediante señales de radio. Enlaza a los equipos mediante un concentrador de señales de radio llamado punto de acceso (AP: Access Point).

    Móvil; se puede trasladar los equipos portátiles, así como los de escritorio de una habitación a otra sin dejar de estar conectado a la red. Todos los equipos deben encontrarse a una distancia concreta para comunicarse entre sí. Actualmente las redes inalámbricas carecen de algunas de las posibilidades de las redes conectadas físicamente. El precio de los componentes para crear una red inalámbrica es mayor que los de Ethernet.

     

    http://miguelin.blogdiario.com/admin/archivos/wink.gif http://miguelin.blogdiario.com/admin/archivos/cool.gif

    como hacer una red local

    1. Diseño de una red local

    Introducción

    Aunque en principio esto parece que no tiene importancia o que es de poca relevancia, en realidad es muy importante definir muy claramente el sistema que vamos a instalar y todos los puntos que llevan a su instalación, por lo que antes de instalar una red deberemos hacer:
    - Diseñar el lugar donde estarán los terminales, cajas de conexiones, cables y todo el sistema fisico de la red, normalmente el comprador es quien decide.
    - Instalar el sistema operativo basico en todos los terminales.
    - Configurar el sistema.
    - Crear el entorno en que van a funcionar los terminales.
    - Instalar las aplicaciones necesarias.
    - Establecer un proceso de administración de la red (LAN o WAN).

    Proceso de transmisión

    Término que se utiliza para identificar a las acciones que contribuyen a la introduccion , envio y recepcion de los datos. En dicho proceso a los datos se les añade información que utiliza el sistema para comprobar que la transmisión de los datos ha sido correcta.
    El proceso de transmisión , se puede dividir básicamente en:
    - Establecer el correcto uso de los datos para transmitirlo.
    - Convertir los datos para su tranmisión.
    - Establecer el control del envío de los datos.
    - Comprobar la llegada de los datos.
    - Detectar si se han producido errores en la transmisión , para solucionarlos.

    En las redes todos los procesos anteriores son gobernados por lo que se denomina protocolo, que son las normas o reglas que indican los modos para la transmisión de datos en la red.

    Paquetes de datos

    En la redes , la información se envía por medio de paquetes, que son segmentos de la información a mandar , dichos paquetes se dividen en:
    - Cabecera: especifica el comienzo, la dirección de destino, la dirección de envío y el protocolo.
    - Información: donde va el segmento de información.
    - Control de errores
    - Final

    2. Funcionamiento de una red local

    La red local esté formada por los terminales, con sus periféricos y el sistema operativo de red. Una estación de trabajo o terminal es un ordenador con sistema de comunicaciones para conectar a la red. La estación de trabajo se diferencia de un ordenador al sistema operativo. Las estaciones de trabajo
    pueden ser: estaciones de usuarios o estaciones server(servidor). Las estaciones usuarios son las que usa el usuario y pueden ser dedicadas o no dedicadas y poseen pantalla, teclado, ratón, etc... Mientras que las estaciones server(servidor) no poseen teclado, ratón, pantalla, etc.. y son dedicadas, lo que significa que sus recursos e información están disponibles para el resto de terminales de la red.
    También existe la posibilidad de que una estación de usuario, además de tener la pantalla, teclado, ratón, etc... Puede permitir que las demás estaciones de la red accedan a sus recursos e información.

    El sistema operativo de la red

    La función principal del server(servidor) de la red es ejecutar el sistema operativo de la red para ponerla en marcha y conectar los terminales de la red. En la actualidad podremos encontrar redes, en las cuales el sistema operativo que tienen los terminales es el mismo que el que soporta la red y efectúa las transmisiones de datos, como es el Windows 3.11 o el Windows NT. Con ello se consigue que el usuario ya conozca el entorno en el que este trabajando y el sistema de transmisión de datos entre terminales se hace de forma transparente para los usuarios.

    Así mismo es el propio sistema operativo el que controla a las impresoras, el modem u otro dispositivo que se encuentre en uso común para toda la red.

    Datos compartidos


    En aquellas redes que solo el server(servidor) es quien distribuye y provee la informacion solo saldrá de él la información que solicitamos y en él se almacenara la información que vayamos obteniendo del usuario o los dispositivos de la red.
    Pero en otras redes podremos comprobar como todos y cada uno de los terminales permite intercambiar información con los demás terminales de la red.

    Sistema de Bloqueo de Ficheros


    Para evitar que dos estaciones de la red accedan al mismo tiempo a la vez, se utiliza un sistema de bloqueo de ficheros mediante el cual, cuando un terminal coge un fichero el sistema lo bloquea y no permite que otro terminal coja el mismo fichero hasta que el terminal que lo está usando termine de utilizarlo.

    Tarjetas de red o interfaz de conexión

    La tarjeta de red, es el dispositivo físico (tarjeta) que se conecta al ordenador y por la cual le permite al ordenador conectarse a una red de la cual cogera o dejara la informacion de que disponga o necesite.
    Todas las estaciones de trabajo o terminales, tanto si son de usuario o son server(servidores) llevan una tarjeta de red conectada, para conectarse a la red

    3. TOPOLOGIA DE LAS REDES LOCALES

    Se denomina topología de una red local a la forma física y geométrica que se le dará a la instalación de la red, tanto a los terminales como a los cables.
    Dentro del sistema que utilicemos, existen tres tipos físicos de conexión:
    - Punto a punto: Es la conexión entre dos terminales cercanos por un cable.
    - Multipunto: Es la conexión entre dos o más terminales por un cable.
    - Lógicas: Permiten la conexión entre terminales sin cables.

    Con la topología se intentan dos grandes cosas:
    - La instalación ordenada de terminales y cables de enlace.
    - Reducir al mínimo los costes de la instalación.

    Control de una red

    El control afecta a la tipología debido a que puede ser:
    -Centralizada: En donde un terminal que será el server(servidor) será quien controle la red, por lo que deberá estar conectado como nodo principal.
    - Distribuida: Donde cada uno de los terminales o estaciones de trabajo podrá acceder de forma independiente a la red y a cada terminal, no existiendo terminal principal.

    Tipos de topología de una red local

    La red según como la instalemos podrá tener una de las siguientes tipologías:
    - En bus o árbol: Donde todas las estaciones están conectadas a un canal de comunicación.
    - En anillo: Donde las estaciones se conectan de forma que parece un anillo y donde ningún terminal ejerce de nodo principal.
    - En estrella: Donde todas las estaciones están conectadas a un nodo principal(terminal) pero no están conectadas entre ellas.
    - En malla: Se utilizan para grandes redes o en sistemas de grandes terminales para comunicaciones a grandes distancias.

    Asi mismo la posibilidad de interconectar dos o más tipos de redes entre sí, es posible y además se utilizan cada vez con más necesidad, para evitar el desmontaje de una red para montar otra del mismo tipo.

    Decisión de la elección de una topología para instalar una red

    Deberemos tener en cuenta los siguientes parámetros a la hora de montar una red local, determinando el tipo que vamos a crear en base a:
    El tipo de instalación que vamos ha hacer.
    El cableado que vamos a usar.
    El tráfico de información que la red deberá soportar.
    Los posibles fallos que se podrán crear
    La posibilidad de expandir la red en un futuro o de eliminar terminales.

    La conexión de terminales usando topología en bus y en árbol

    Como hemos dicho en el sistema de bus, todos los terminales están conectados a un único cable de conexión , en donde cada terminal con su respectiva tarjeta de red está conectado a la red.
    En éstas redes la información va a todos los terminales, comprobarán si el mensaje es para ellos o no.
    Uno de los problemas que se pueden presentar es el posible fallo en la intensidad de la señal , pudiendose solucionarse mediante la disminución de la longitud en el cable utilizado para conectar los terminales, o bien , mediante la utilización de repetidores de señal.
    Normalmente en éste tipo de red se utiliza el cabel coaxial de banda base.

    En éste tipo de redes el tráfico suele ser pequeño y el tamaño de la red tambien es pequeño.

    Suelen ser relativamente fáciles de usar y manejar, la velocidad de transmisión dependerá del número de terminales conectados, disminuyendo la velocidad al aumentar los terminales en la red, cuantos más terminales más lento irá el tráfico de datos en la red.
    La reparación en éstas redes suele ser díficil, dada la dificultad en encontrar los posibles errores que se produzcan.

    La expansión de la red es fácil y rápida no presentando grandes problemas en su ampliación o reducción de terminales.
    Normalmente el ámbito de instalación de estas redes no supera los 2.000 metros de cable.

    La conexión de terminales usando topología en anillo

    La red en anillo forma un círculo de conexiones punto a punto con estaciones próximas.
    Los terminales están conectados con un cable y los mensajes van de un terminal al otro.

    Para poder recibir los mensajes se hace necesario conocer la dirección de cada terminal, para saber para que terminal es la información que se envía.
    Al igual , para recibir mensajes, cada estación debe saber cual es su dirección.

    Aunque el sistema de anillo es nativo sobre un solo cable para el enlace entre los terminales, actualmente la tecnología está aplicando dos cables, uno de transimisión y el otro de recepción de mensajes entre terminales, aumentando velocidada y fiabilidad en las comunicaciones.
    Al igual últimamente se están utilizando las conexiones de terminales a la red mediante reles, que permiten que si uno de los terminales se estropea o se queda colgado no se pare al resto de terminales, de modo que el terminal al fallar, automáticamente el relé que lo controla lo desactiva de la red y el sistema sigue funcionando.
    Éste tipo de redes es apropiada para conectar pocos terminales y en un espacio grande y con grandes distancias a conectar.
    El mayor incoveniente que nos puede presentar éste tipo de red es la complejidad del hardware que conlleva la instalación.
    La velocidad se mantiene estable, solo se ve afectado cuando conectamos redes de distinto tipo con las de anillo.
    La posibilidad de expasión de red es relativamente fácil y sencilla, solo la instalción de la propia red puede presentar serios problemas o inconvenientes.

    La conexión de terminales usando topología de estrella

    En éste tipo de redes , los terminales están conectados a un nodo central , al cual están conectados cada uno de los terminales de forma directa sin estar conectado con otro terminal solo con el nodo central.
    Pero, existen tres posibilidades a la hora de gestionar este tipo de redes, son:
    - Control centralizado: Cuando es un nodo central quien realiza el control de la red.
    - Control Exterior: Cuando existen nodos centrales para grupos de termionales.
    - Control Distribuida: Cuando cada uno de los terminales es quien realiza el control.

    Si la estación principal o nodo central falla, la red se cae y dejan de funcionar los terminales.
    El principal atractivo de estas redes es la posibilidad de mezclar datos y voz.
    Pero es muy susceptible a problemas con los nodos centrales de conexión, provocando la caída y el fallo de todo el sistema.

    4. La Transmisión de la Información

    Introducción

    Para transmitir utilizamos cualquier medio físico o de otro tipo, citese por ejemplo los infrarrojos, el laser u otro sistema de transmisión que nos sirva para poder llevar las señales desde un punto de la red a otro.

    Para efectuar dichas transmisiones dentro de la red se utilizan dos grandes sistema que se clasifican en Banda Base y Banda Ancha.

    Banda Base
    Para la transmisión de señale en red se ha utilizado este sistema por que la señal que introducimos en dicho sistema no es modulada, osea que la introducimos en el cable tal y como la tenemos sin necesidad de modificarla o modularla para la transmisón, con esto conseguimos claramente unos bajos costes en los equipos de transmisión dado la simplicidad de los mimos.

    Este sistema tiene el inconveniente de las transmisiones a larga distancias y aquellas que deben discurrir por lugares donde hayan equipos que emitan interferencias tanto de radio como magnéticas u otro tipo.

    El único problema está en que éste sistema utiliza toda la base de transmisión , lo que no permite utilizar dos señales en un mismo cable.

    Banda Ancha

    Este sistema permite la canalización de varias señales por un mismo cable, en realidad podemos tener varios canales de transmisión debido a que la transmisión en estos cables es normalmente modulada, esto es en realidad un señal que la llamaremos portadora y dentro de la cual van los distintos canales.

    Supongamos que tenemos una señal que dentro de ella podemos transmitir hasta 30 canales, de modo que el fabricante nos dice que si transmitimos a 100 tenemos un canal y cada 10 abajo , osea 90,80,70, etc tenemos distintos canales, de esta forma solo tenemos que tener un sistema que sea capaz de separar las frecuencias y entonces sacaremos los canales, esto lo coseguimos por los llamado modems o tarjetas de conexión.

    El mayor problema de este sistema reside en que la señal la debemos tranmitir modulada, necesitamos equipos que nos las modulen al salir del terminal y depues al entrar en otro terminal las desmodulen, esto conlleva un gasto añadido al coste del sistema.

    5. Tipos de cables

    Cable de par trenzado o cable de teléfono

    Este tipo de cable es que actualmente se utiliza en el montaje de un teléfono normal de casa o empresa.

    Es un cable de coste reducido y bastante fácil de manejar e instalar, pero el principal inconveniente es la posibilidad de las interferencias, aunque existen dos tipos de cable trenzado, el blindado y el sin blindar, ya usando el blindado, el blindaje consiste en ir los cables haciendo vueltas por dentro del plástico protector, el tipo de protección que nos ofrece ante las interferencias es bastante pobre.

    De ello es fácil deducir que no es aconsejable su utilización, pero hemos de tener en cuenta su reducido coste , tanto en el propio cable como en la instalación, dada su facilidad de manejo, debido a ello no debemos descartarlo por completo, si necesitamos usar este tipo de cable, se aconseja su instalación lejos de líneas de corriente electrica o de fuentes de interferencias electromagnéticas (televisor, video, nevera, etc..) para asi evitar en el mayor grado posible las interferencias y poder usar este tipo de cable para la instalación de la red.


    Cable coaxial

    Este cable es de todos conocidos, pues es el que se utiliza para conectar el televisor con la antena de televisión que todos tenemos.

    Está compuesto por un cable de cobre en su interior, rodeadeo de un plástico protecor que sirve de aislante, y sobre éste va una malla metálica y ésta recubierta por un capa de plástico que protege a todo el conjunto.


    Cable coaxial de banda ancha

    El cable es muy parecido al coaxial, pero variando en el cable del centro que es de grosor superior y el propio cable en si mismo, que está mejorado para evitar que las interferencias puedan producir errores de conexión en la red, aunque no las elemina del todo.

    Sistemas conectados a un cable de red

    Dependiendo del tipo de red, los equipos que nos podemos encontrar normalmente en todas las conexiones de los cables de las redes vistas anteriormente, son:

    El transceptor, que es el encargado de convertir la señal del ordenador en una señal que pueda circular por el cable, si la red es sin modular, pero si la red utiliza señales moduladas entonces en vez de encontrarnos con un transceptor, nos encontraremos un modulador-demodulador, que es el encargado de preparar la señal para que vaya por el cable y de recoger esa señal y prepararla para que el ordenador la pueda entender.

    Los derivadores, son dispositivos para conectar la red al propio transceptor del ordenador.

    Los repetidores, quizas no los encontremos si la red es pequeña o está limitada a una habitación o dos como mucho, pues en realidad son los encargados de hacer que la señal pueda llegar más lejos.

    Cable de Fibra óptica

    Este es el mejor sistema de conexión de una red , dado su alto valor en todo, desde su prática inexsistencia de errores de datos en la transmisión hasta su inexpulnable sistema de conexión.

    El mayor inconveniente que presenta y hace hoy en día inviable la instalación de grandes conexiones, es su alto valor en precio , tanto en el sistema propio o cable , hasta la instalación en el tendido del cable, que es extremadamente delicada y especializada, haciendo esto que su precio sea demasiado excesivo para su utilización en empresas pequeñas o medianas o para particulares.

    El sistema de basa en un cable por el cual circula un minúsculo cable del diámetro de un cabello humano, lo que permite que en un mismo cable puedan ir cientos de ellos, y que son huecos, normalmente construidos de un material altamente refractable (como el espejo de casa), y por el cual circula un haz de luz o laser que lleva la información.

    Dado que es luz lo que viaja, la velocidad de transmisión es elevadísima, y no tiene inconvenientes de ningun tipo contra las posibles interferencias eléctricas o magnéticas, pues no le afectan.

    El problema de su instalación es que los cables en las uniones deben estar perfectamente alineados, dado que son tan pequeños que una variacion de alineación de un milímetro provocaría que no hubiera conexión, y esto unido a que normalmente se instalan bajo tierra, hacen elevado el coste de uso de éste tipo de conexiones.

    6. Las redes tipo Ethernet

    De este tipo de red podemos encontrar varios tipos , desde los mas antiguos hasta los que actualmente hay disponibles, estos son:

    redes ethernet 10base2

    Este tipo de red funciona en modo de 10 Mbps, osea que solo permite manejar dicha velocidad de transmision de modo compartido, osea que las estaciones comparten dicha velocidad.

    La red de cableado de este sistema es por medio de un cable coaxial unico, que une una a una todas las estaciones de la red, lo que significa que si el cable se corta o se rompe, automaticamente queda toda la red desconectada.

    Ademas de que en este sistema solo una estacion puede transmitir, osea que solo un ordenador puede enviar informacion y las demas deben esperar, todo esto conlleva a que haya una alta probabilidad de colision de datos al intentar dos o mas estaciones enviar informacion al mismo tiempo.

    redes ethernet 10baset

    Este tipo de red funciona en modo de 10 y 100 mbps, permitiendo segun el tipo de Hub y de tarjeta de red utilizada permite las velocidades de 10 y 100 Mbis.

    El Hub es un concentrador a donde van todas las conexiones separadas de cada tarjeta, osea que no es un cable que una cada uno de los ordenadores de la red, si no que cada ordenador envia un cable directo al Hub , de este modo si uno de los cables se corta, solo queda incomunicado el ordenador de ese cable, pero los demas siguen funcionando de modo normal.

    El tipo de cable es UTP (Cable de par trenzado sin apantallar) este tipo de cable es parecido al cable de telefono y sin apantallar es sin proteccion(mas adelante veremos para que es la proteccion).

    Con este sistema aumenta la fiabilidad de la red , tanto en las comunicaciones como en su funcionamiento, permitiendo ademas poder ampliar la red sin problemas pues solo habra que cambiar el Hub para que tenga mas conexiones para poder poner mas ordenadores a la red o para conectar la red con otra exterior.

    Mediante este sistema tendremos en cuenta que sigue siendo igual que el normal base2 pero con la ventaja de ser mas comodo de usar y mas facil ademas de ser de topologia de estrella.

    El ancho de banda

    Esto es el camino por el cual discurren los datos de la comunicacion de la red.

    En los sistemas de Base2 y baset se utiliza todo el ancho de banda del cable para transmitir , por lo que solo podran transmitir un ordenador a la vez, debiendo los demas escuchar y esperar a que el cable este libre para poder transmitir.

    El full duplex

    Lo normal es que el sistema de transmision de informacion sea de half-duplex, pero el sistema full-duplex no siempre esta soportado en todas las redes, solo en aquellas que lo tiene especificado y con esa posibilidad.

    Mediante este sistema se permite a las tarjetas de red, transmitir y recibir datos simultameamente, con lo que se aumenta la velocidad de la red y por lo tanto de todo el sistema


    La instalacion de una red

    Debe tener en cuenta que las instalaciones para la velocidad de 10 Mbps y la de 100 Mbps son iguales pero de caracteristicas distintas:

    En la base de 10 Mbps la instalacion del cable aunque debe ser cuidada, no es necesario que cumpla las siguientes caracteristicas que si que es necesario que las siga para la red a 100 Mbps, pero le aconsejo que la instalacion siempre la haga con las siguientes caracteristicas, pues quizas algun dia tenga que cambiar la red de 10 a 100 Mbps y entonces no sera necesario volver a instalar los cables.

    Los cables nunca deben ser inferiores de categoria 5 tipo apantallado.

    Los cables en las esquinas deben formar una angulo de 90 a 120 grados, nunca forme esquina con el cable.

    Procure no pisar ni usar de manera no controlada el cable cuando lo instale.

    Las conexiones del cable a la tarjeta y del cable al Hub deben estar protegidas por guardapolvos.

    Procure siempre hacer el Clipado del cable a la clavijas de forma segura , asegurandose de que los cables lleguen hasta el final de la clavija antes de cliparlos con la clipadora.

    La distancia de los cables de la red con respecto a los cables de corriente debe ser como minimo de 50 centimetros.

    Los cables de red y de energia electrica nunca podran ir juntos y deben ir por senderos distintos.

    El cable de la red desde el ordenador hasta la pared debe medir como maximo 2.5 metros.

    Utilize regleta de conexion para que el ordenador se conecte a la red a traves de la regleta nunca directamente al Hub.

    Compruebe con un comprobador los cables uno a uno hasta asegurarse de que este correctamente instalados y clipados pues puede ser un error frecuente en la red.

    Y utilize una caja de conexiones para conectar el hub con cada uno de los ordenadores , nunca directamente al Hub.

    7. La arquitectura ISO

    OSI es (Open Systems Interconnection Reference Model) o Modelo de Referencia para la apertura de interconexion entre sistemas.

    Dicho sistema tiene siete niveles que especifican su sistema de interconexion.

    Nivel físico. Se refiere a voltajes de corriente electrica , duración de un bit, establecimiento de una conexión, etc.

    Nivel de enlace. El propósito de este nivel es convertir el medio de transmisión crudo en uno que esté libre de errores de transmisión.

    * El remitente parte los datos de entrada en tramas de datos de una longitud determinada y procesa las trama de recepcion.

    * Dicho nivel maneja las tramas perdidas, dañadas, o duplicadas.

    * Regula la velocidad del tráfico.

    * En una red de tipo broadcast, un subnivel controla el acceso al canal compartido.

    Nivel de red. Determina las rutas que deben tomar los paquetes desde su emisor a sus destinos, manejando la congestión para poder evitarla y buscar una ruta mas rapida y fiable.

    Nivel de transporte. Es el primer nivel que se comunica directamente con su destino. Provee varios tipos de servicio y podría abrir conexiones múltiples de red para proveer capacidad alta.

    Nivel de sesión. Es parecido al nivel de transporte, pero tiene servicios adicionales como manejar tokens (objetos abstractos y únicos) para controlar las acciones de participantes o puede hacer checkpoints (puntos de recuerdo) en las transferencias de datos.

    Nivel de presentación. Ofrece funciones comunes a muchas aplicaciones como traducciones entre juegos de caracteres, códigos de números, etc.

    Nivel de aplicación. Define los protocolos usados por las aplicaciones individuales, como e-mail.


    8. Tipo de Clase
    El tipo de clase permite identificar cuántos bits se utilizarán para el número de red local y cuántos para identificar a la computadora. Si la dirección empieza con un cero, entonces se trata de una dirección de clase tipo A, que reserva 7 bits para el número de red y 24 para el de omputadora; si inicia con los primeros dos bits igual a 10, entonces se trata de una dirección de clase B, con 14 y 16 bits, respectivamente, para número de red y de computadora; y finalmente, si inicia con los tres primeros bits igual a 110, se trata de una red tipo C que reserva 21 bits para el número de red y 8 para el de computadora.

    Red Clase A

    7 bits 24 bits

    0 identificador de red identificador de computadora

    Red Clase B
    14 bits 16 bits
    10 identificador de red identificador de computadora

    Red Clase C
    21 bits 8 bits
    110 identificador de red identificador de computadora


    La clase A es para redes que pueden tener hasta 16,777,214 computadoras; las redes de clase B pueden tener hasta 65,534 computadoras y las redes de clase C tienen menos de 254 computadoras. Todo número IP debe pertenecer a alguna de estas clases. El rango de los números IP que pertenecen a cada clase es:

    Clase A 0.0.0.0 – 127.255.255.255
    Clase B 128.0.0.0 – 191.255.255.255
    Clase C 192.0.0.0 – 255.255.255.255

    Número de Red Local
    Cada red local debe tener un número diferente al del resto de las redes conectadas a Internet; para garantizar que así sea, su asignación está a cargo del Centro de Información de la Red Internet ( Internet Network Information Center), conocido como InterNIC.

    Número de Computadora en la Red Local
    Cada computadora debe tener un número único dentro de la red local, tarea de la que se encarga el administrador de la misma. Dependiendo del tipo de clase, el número será de 8, 16 ó 24 bits. Ninguna computadora podrá utilizar el número cero (todos los bits apagados), ni el último número (todos los bits prendidos). Esto se debe a que el número cero está reservado para identificar a la red como un conjunto. El último número es utilizado para identificar a todas las computadoras de una red.

    La dirección 129.97.0.0, es una dirección tipo B, con 16 bits para número de computadora en la red local. Puesto que estos 16 bits están todos en cero, esta dirección representa a la red completa. En cambio, 129.97.0.1 identifica a la computadora número 1 de la red 129.97.0.0. La dirección 204.191.103.131 identifica a la computadora 131 de la red 204.191.103.0 que es clase C.

    Subredes

    Una vez que una organización ha obtenido una dirección (tipo A, B o C), puede a su vez particionarla como mejor le convenga. La partición se realizará para adaptarla a la topología de las diversas redes locales que compongan la red de la organización. Cada una de estas redes locales que conforman una red conectada a Internet se le conoce como subred.

    Lla parte del número IP que correspondería al identificador de computadora en la red local se utiliza para identificar a la subred y la computadora dentro de esta subred. En el datagrama IP una bandera indica si la red local está formada por subredes y de esta manera el software correspondiente sabe cómo proceder. Para esto es necesario saber cuántos bits del número de computadora son utilizados para identificar a una subred y cuántos son designados para el identificador de la computadora en si. Supóngase, por ejemplo, que se tiene una red local tipo C, y por lo tanto el identificador de computadora en la red local consta de 8 bits, que a su vez se dividirá en un identificador de subred y un identificador local de computadora en la subred.

    El identificador local de subred puede constar desde 2 hasta 6 bits. Si se deciden utilizar n bits para el identificador de la subred, se podrán definir hasta 2n-2 redes (esto se debe a que ni la subred 0, ni la que tiene todos los bits prendidos son direcciones de subred válidas). Los bits restantes se utilizarán en la misma forma en que ya se definió antes para el número de computadora en la red local.

    Si tenemos la red local (tipo C) 203.191.105.0, y deseamos dividirla en dos subredes, deberemos utilizar 2 bits para el identificador de la subred. Así, tendremos las direcciones de subredes 203.191.105.64, y 204.191.105.128 (204.191.105.0 y 204.191.105.192 son direcciones de subred inválidas).

    Cada una de estas redes puede a su vez tener de 1 hasta 62 computadoras (la dirección con todos ceros es de nuevo el identificador de la subred, y la que tiene todos unos es la que identifica a todas las computadoras en la subred).

    Cuando se configura una computadora conectada a Internet, se utiliza la máscara de subred( subnet mask), que es un número de 32 bits en los cuales se indica con unos la parte que corresponde al identificador de la red y de la subred, y con ceros la parte que corresponde al identificador de la computadora en la subred.

    En nuestro caso, puesto que sólo 6 bits son utilizados para el identificador de computadora en la subred, la máscará de subred será: 11111111 11111111 11111111 11000000, que en notación de punto decimal corresponde a 255.255.255.192.

    9. La arquitectura VMTP

    VMTP(Versatile Message Transfer Protocol - Protocolo versatil para la transferencia de mensajes).

    Caracteristicas

    * Es un protocolo de transferencia de mensajes para múltiples aplicaciones, está desarrollado para proporcionar comunicación con un sistema operativo en red.

    * Se centra, principalmente, en soportar comunicaciones orientadas a conexión, especialmente RPCs (Remote Procedure Call - Procedimiento para llamadas remotas), las cuales requieren respuestas rápidas para la obtención de pequeñas cantidades de datos.

    * Es un protocolo que fue propuesto a la comunidad Internet como protocolo de transporte, específicamente diseñado para soportar el modelo de transacciones de comunicación, al estilo de RPCs y comunicaciones de este tipo.

    * Con este protocolo se solventan algunos problemas existentes con el protocolo TCP.

    * Está diseñado para operar en la parte superior de los servicios simples no fiables y basados datagrama, como es el proporcionado por IP.


    Bases del protocolo

    El fundamentoVMTP es un protocolo de transporte diseñado para soportar RPC (Remotes Procedure Call) y cualquier comunicación orientada a transacción. La Comunicación es la respuesta a una petición. Si un cliente envía una petición al servidor para conseguir un servicio, ésta se procesa, y el servidor responde, dicha transacción se inicia con el envío de una petición a un servidor, y termina con la respuesta del servidor a dicha petición, pero a nivel de transporte, operaciones por separado entre clientes y servidores, el servidor es libre de descartar, entre transacciones, la comunicación que pide un cliente sin causar ningún fallo o comportamiento incorrecto.

    Funciones

    * Detección de errores

    * Retransmisión .

    * Supresión de posibles duplicaciones

    * Opcionalmente, la seguridad que requiere el nivel de transporte de extremo a extremo.

    Las direcciones son independientes a la situación donde se referencie y se hace necesario la autentificación de la seguridad en red.

    Algunos protocolos manejan funciones y controles de error, que se ejecutan mediante transacciones VMTP para módulos especializados en servidores de gestión, como parte de una implementación.

    En la gestión de la conversión, y de forma opcional, VMTP ejecuta verificación de conexión fuera de banda, pero el sistema de conexión se realiza en banda.

    El VMTP requiere un handshake en dos direcciones para proteger ante peticiones duplicadas.El VMTP proporciona servicios de comunicación mediante datagrama a nivel de usuario.

    A diferencia de la mayoría de programas que utilizan UDP/IP, los programas que utilizan VMTP no deben implementar time-out, ni retransmisiones, ni estimaciones de retrasos de red, porque el protocolo VMTP aporta comunicaciones mediante datagrama extremo a extremo.

    Funcionamiento

    El protocolo está diseñado para proporcionar un conjunto de comportamientos acordes al modelo de transacción, como son los siguientes:

    Mínimo de dos paquetes para los intercambios pequeños (en transacciones simples).

    Tratamiento de las ráfagas de múltiples paquetes de peticiones y respuestas con prioridades, para obtener una transferencia de datos eficiente.

    Comunicaciones multicast y datagrama como extensiones del modelo de transacción.

    Todas las funciones VMTP incluyen:

    Soporte en seguridad

    Tiempo real

    Intercambio de mensajes asíncronos

    Streaming

    Multicast e idempotency

    Opciones a nivel de usuario VMTP

    Este conjunto de capacidades permite que, el VMTP para clientes y servidores, se especialice y simplifique para formar los servicios que se requieren en la actualidad. Algunos ejemplos de simples clientes / servidores pueden ser: programas PROM de carga boot de red, servidores boot de red, detectores de datos y controladores simples.

    Rendimiento

    Los protocolos actuales proporcionan un rendimiento muy pobre en RPC y en los accesos a ficheros de red. El motivo se debe principalemnte a:·

    * TCP requiere excesivos paquetes para el RPC, especialmente para llamadas aisladas. En particular, el establecimiento y fin de la conexión genera paquetes extra respecto a los que necesita VMTP para soportar RPC.

    * TCP es un protocolo difícil de implementar. La causa de esta afirmación es simplemente la experiencia que se tiene en su implementación. Actualmente VMTP está diseñado para facilitar su implementación y proporcionar el conjunto necesario de funciones.

    * La excesiva protección en la pérdida de paquetes en el protocolo TCP excede el tiempo necesario previsto. Por esta razón, se hace necesaria una protección frente a errores, pero siempre manteniendo un alto rendimiento para RPC, según el entorno de ejecución.

    De esta forma, se realiza un incremento en el rendimiento de las redes. El VMTP está diseñado para facilitar la implementación y incrementar la eficiencia en RPCs y proporciona retransmisión selectiva con control de flujo basado en tasas.

    La asignacion de nombres

    Los protocolos actuales proporcionan unos nombres inadecuados en los puntos extremos del nivel de transporte, porque se basan en direcciones IP. En TCP se nombra mediante una dirección Internet y un identificador de puerto, esto hace que el enlace de la interfice de host no especifique el estado de nivel de proceso asociado con el punto del nivel de transporte. Esta formar de asignar nombres origina problemas. VMTP proporciona nombres independientes a las direcciones host, de esta forma se solucionan muchos de estos problemas.


    Funcionalidad

    TCP no soporta multicast, ni los datagramas en tiempo real, ni la seguridad,sólo soporta pares inteligentes, terminales a larga distancia e intercambios seguros de ráfagas.

    Multicast está aumentando su importancia y está entrando en Internet, un datagrama proporciona con el mismo sistema de nombres facilidad de transmisión y recepción, como el nivel de transporte que es un punto fundamental para las aplicaciones en tiempo real y en paralelo.

    La seguridad es un requisito básico en un número cada vez superior de entornos, se debe remarcar que la seguridad es suficientemente buena si se implementa a nivel de transporte. Sin seguridad en nivel de transporte, un protocolo de transporte no puede garantizar el servicio estándar ante la presencia de un intruso. El intruso podría interceptar paquetes o modificarlos mientras actualiza el checksum, burlando la entrega segura a nivel de transporte.

    VMTP proporciona ademas:

    * Multicast

    * Datagramas en tiempo real

    * Seguridad

    VMTP está diseñado para sistemas de comunicaciones de próxima generación, como:

    * RPC

    * Acceso a ficheros a nivel de página

    * Petición-respuesta son comportamientos que dominan en estos sistemas de comunicaciones.Estas comunicaciones, tanto locales como de área extendida, proporcionan altas tasas de datos, inferiores tasas de errores y relativamente menores retrasos.

    En las interface de red inteligentes y de alto rendimiento son comunes, y de hecho son requeridas para conseguir rendimientos que se aproximen a la capacidad óptima de red, pero VMTP también está desarrollado para funcionar aceptablemente con las redes y las interficies de red existentes.

      

    http://www.tutorialesenlared.com/

    apache

    1 - Instalación de Apache - Web oficial: http://www.apache.org


    En primer lugar vamos a distinguir dos tipos de Apache, que se corresponderán con las versiones 1.3.X y 2.0.X de este programa. El motivo de la distinción es que se usan bastante ambas versiones dependiendo del sistema operativo y la configuración es ligeramente distinta en ambos. Por ejemplo, ambas versiones son estables en sistemas Windows XP, pero la 2.0.X puede volverse inestable bajo Windows 98. Por tanto, se explicará la forma de configuración para ambos y luego serás tú quien decidas con cual te quedas. Así, si uno te falla siempre podrás utilizar el otro, pues da lo mismo.


    Deberemos descargar el Apache en su versión para windows. Para ello podemos acceder por la siguiente URL: http://httpd.apache.org/download.cgi En cualquier caso, podemos encontrar cualquier archivo necesario en la carpeta httpd/binaries/win32 del servidor que usemos para la descarga (pincharíamos en Other files y eso nos conduciría al servidor seleccionado). Lo que es importante destacar es que lo que hay que destacar son los Binarios (Binary) para Windows (Win32), no los códigos fuente


     


    Caso A: Instalación de Apache 1.3.X


    Si te decides por utilizar la versión 1.3.X, buscaremos la última versión de este tipo. En la fecha de actualización de este manual, la última versión estable era la 1.3.33, y el archivo que tenemos que bajar es: apache_1.3.33-win32-x86-no_src.exe También puede existir el mismo archivo pero con extensión msi, en este caso podríamos bajarlo si disponemos del Windows Installer, la ventaja es que ocupa menos.


    Bien, una vez que lo tengamos, ejecutamos el instalador y vamos recorriendo las pantallas hasta que salga una donde nos piden unos datos, en cuyo caso pondremos:


    Network Domain: 127.0.0.1
    Server Name:
    127.0.0.1
    Administrator's Email Address: nuestro e-mail, aunque no es totalmente necesario.
    Run when started manually, only for me.
    Seleccionamos esta opción.



    La IP 127.0.0.1 es la dirección IP asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost. Es importante decir que a la hora de probar tus scripts en modo local, da igual que pongas 127.0.0.1 o localhost. Finalmente, recordar que el Apache se instala por defecto en la carpeta:
    C:\Archivos de programa\Apache Group\Apache\


    Bien, ahora vamos a instalar el PHP. Asegúrate ahora de tener cerrado el Apache.


    1.2 - Caso B: Instalación de Apache 2.0.X


    Para esta versión, en la fecha de actualizción del manual la última versión disponible era la 2.0.53, por lo que el archivo que tenemos que bajar puede ser: apache_2.0.53-win32-x86-no_ssl.exe También puede existir el mismo archivo pero con extensión msi, en este caso podríamos bajarlo si disponemos del Windows Installer, la ventaja es que ocupa menos.


    Bien, una vez que lo tengamos ejecutamos el instalador y vamos recorriendo las pantallas hasta que salga una donde nos piden unos datos, en cuyo caso pondremos:


    Network Domain: 127.0.0.1
    Server Name: 127.0.0.1
    Administrator's Email Address: nuestro e-mail, aunque no es totalmente necesario.
    For All Users, on Port 80, as a Service: seleccionamos esta opción.



    La IP 127.0.0.1 es la dirección IP asociada a nuestra máquina, es decir el host local o vulgarmente conocido como Localhost. Es importante decir que a la hora de probar tus scripts en modo local, da igual que pongas 127.0.0.1 o localhost. Finalmente, recordar que el Apache se instala por defecto en la carpeta:
    C:\Archivos de programa\Apache Group\Apache\


    Bien, ahora vamos a instalar el PHP. Asegúrate ahora de tener cerrado el Apache.


    Instalación de PHP - Web oficial: http://www.php.net


    2.1 - Copia de archivos


    Dependiendo de si estamos instalando una versión 4 de PHP o una versión 5, seguiremos una parte o la otra.


    2.1.1 - Instalación de PHP4


    Procedemos a descargar el PHP para Windows. El archivo está localizado en la sección Downloads, apartado Windows Binaries, y es el Zip Package (no el installer, aunque éste ocupe menos luego no nos servirá). Para la versión 4.3.10, que es la versión disponible a fecha de actualización de este manual, es: PHP 4.3.10 zip package [7,405Kb]. Según vayan saliendo nuevas versiones podrás irlas encontrando en la citada sección downloads.


    Una vez descargado todo el ZIP, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor (PHP, MySQL...), por ejemplo nos creamos una carpeta en la raíz del disco duro y que quede así: C:\Servidor\ Ahora extraemos los archivos del ZIP de PHP dendro de esa carpeta. En este caso se crea la carpeta C:\Servidor\php-4.3.10-Win32\ pero como no nos gusta su nombre procedemos a renombrarla a C:\Servidor\PHP\


    Y ahora hay que coger el php4ts.dll (localizado en C:\Servidor\PHP\php4ts.dll) y copiarlo al directorio System (en Windows 9x) o System32 (NT,2000,XP,2003) de la carpeta del Windows. Si hay otro archivo en System o System32 lo sobreescribimos. Igualmente coger los archivos que están en la carpeta C:\Servidor\PHP\dlls\ y copiarlos a la carpeta System o System32 igual que hicimos con el archivo php4ts.dll


    2.1.2 - Instalación de PHP5


    Procedemos a descargar el PHP para Windows. El archivo está localizado en la sección Downloads, apartado Windows Binaries, y es el Zip Package (no el installer, aunque éste ocupe menos luego no nos servirá). Para la versión 5.0.3, que es la versión disponible a fecha de actualización de este manual, es: PHP 5.0.3 zip package [7,433Kb]. Según vayan saliendo nuevas versiones podrás irlas encontrando en la citada sección downloads.


    Una vez descargado todo el ZIP, nos creamos una carpeta en el sitio donde queramos instalar los archivos del servidor (PHP, MySQL...), por ejemplo nos creamos una carpeta en la raíz del disco duro y que quede así: C:\Servidor\ Dentro de esta carpeta nos creamos otra carpeta y la llamamos PHP. Luego extraemos los archivos del ZIP dendro de esa carpeta PHP, tal que los contenidos del ZIP quedarán dentro de la ruta C:\Servidor\PHP\


    Y ahora hay que coger el todos los archivos DLL localizados en la carpeta principal C:\Servidor\PHP\ y copiarlos al directorio System (en Windows 9x) o System32 (NT,2000,XP,2003) de la carpeta del Windows (los archivos DLL contenidos en la carpeta EXT no hace falta copiarlos).


    2.2 - Configuración del archivo php.ini


    Igual que el paso anterior, hay pequeñas diferencias dependiendo de si estamos instalando PHP4 o PHP5, asi que elije tu caso.


    2.2.1 - Instalación de PHP4


    El siguiente paso es configurar el php.ini. Renombramos o copiamos el archivo C:\Servidor\PHP\php.ini-dist y le ponemos php.ini Ahora lo editamos con el mismo block de notas. Si lo necesitáramos (lee antes la explicación), editamos la línea register_globals = Off y la colocamos el valor: register_globals = On


    ¿Qué hago con register_globals? ¿ON u OFF?


    Activar esta directiva nos permite asumir que las variables son globales y pueden llegar por cualquier método (POST, GET, COOKIE, SERVER, etc). Así, por ejemplo, si utilizamos una variable global de sesión o cookie se puede suplantar fácilmente mediante una variable por url, con lo cual nuestro script no es seguro. Un buen programador de PHP tendría la directiva en OFF y usaría los arrays globales ($HTTP_X_VARS) o los superglobales $_POST, $_GET, etc., que están disponibles a partir de la versión 4.1.X de PHP. ¿Y por qué? Pues por esos temas de seguridad en los script y porque debemos acostumbrarnos a no manejar variables globales ya que en un futuro el PHP tendrá la opción en OFF por defecto y no podremos cambiarla. Sin embargo, por temas de compatibilidad con script antiguos o que hagan uso de variables globales, podría interesarnos activar esta característica, pero repito que lo deseable sería tenerla en OFF y hacer uso de los arrays globales o superglobales.


    A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del php.ini buscamos extension_dir y le ponemos la carpeta que contiene los archivos php_xxx.dll, que por defecto es la carpeta extensions dentro de PHP. IMPORTANTE: durante toda la configuración de directorios, debes utilizar esta barra "/" y no esta "\", además de ponerlo entre comillas. O sea, que debe quedar así:


    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "C:/Servidor/PHP/extensions/"


    Además podemos activar las extensiones que queramos o necesitemos, para lo cual buscamos Windows Extensions y para cargar las extensiones les quitamos el ; de delante. Por ejemplo, si quisiéramos cargar la extensión gd2.dll (para manejar las funciones PHP relativas a imágenes) deberíamos cambiar ;extension=php_gd2.dll por extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el Manual oficial de PHP. Como nota adicional, resaltar que hay algunas extensiones que requieren de librerías extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscar dichas librerías. No actives todas las librerías a diestro y siniestro porque luego saldrán errores de que no se encuentra tal archivo; antes de instalar una librería, comprueba que en la carpeta de PHP tienes los archivos DLL correspondientes.


    Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos indicar el directorio donde los archivos se almacenarán temporalmente. Para ello buscamos upload_tmp_dir y le damos el valor de una carpeta que exista. Por ejemplo, en nuestro directorio C:\Servidor\PHP\ creamos una carpeta uploads, por lo que quedará algo así:


    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = "C:/Servidor/PHP/uploads/"


    Si queremos cambiar el tamaño máximo de los archivo que pueden subirse via HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.


    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M


    Para trabajar con sesiones, debemos especificar un directorio donde se guarden los archivos temporales. Al igual que 2 pasos antes, buscamos session.save_path y le damos el valor de un directorio que exista (o lo creamos):


    session.save_path = "C:/Servidor/PHP/sessions/"


    A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.


    ¡Ahora vamos a decirle al Apache que tenemos el PHP!


    2.2.2 - Instalación de PHP5


    El siguiente paso es configurar el php.ini. Renombramos o copiamos el archivo C:\Servidor\PHP\php.ini-dist y le ponemos php.ini Ahora lo editamos con el mismo block de notas. Si lo necesitáramos (lee antes la explicación), editamos la línea register_globals = Off y la colocamos el valor: register_globals = On


    ¿Qué hago con register_globals? ¿ON u OFF?


    Activar esta directiva nos permite asumir que las variables son globales y pueden llegar por cualquier método (POST, GET, COOKIE, SERVER, etc). Así, por ejemplo, si utilizamos una variable global de sesión o cookie se puede suplantar fácilmente mediante una variable por url, con lo cual nuestro script no es seguro. Un buen programador de PHP tendría la directiva en OFF y usaría los arrays globales ($HTTP_X_VARS) o los superglobales $_POST, $_GET, etc., que están disponibles a partir de la versión 4.1.X de PHP. ¿Y por qué? Pues por esos temas de seguridad en los script y porque debemos acostumbrarnos a no manejar variables globales ya que en un futuro el PHP tendrá la opción en OFF por defecto y no podremos cambiarla. Sin embargo, por temas de compatibilidad con script antiguos o que hagan uso de variables globales, podría interesarnos activar esta característica, pero repito que lo deseable sería tenerla en OFF y hacer uso de los arrays globales o superglobales.


    A continuación vamos a indicar a PHP dónde se guardan las extensiones. Dentro del php.ini buscamos extension_dir y le ponemos la carpeta que contiene los archivos php_xxx.dll, que por defecto es la carpeta ext dentro de PHP. IMPORTANTE: durante toda la configuración de directorios, debes utilizar esta barra "/" y no esta "\", además de ponerlo entre comillas. O sea, que debe quedar así:


    ; Directory in which the loadable extensions (modules) reside.
    extension_dir = "C:/Servidor/PHP/ext/"


    Además podemos activar las extensiones que queramos o necesitemos, para lo cual buscamos Windows Extensions y para cargar las extensiones les quitamos el ; de delante. Por ejemplo, si quisiéramos cargar la extensión gd2.dll (para manejar las funciones PHP relativas a imágenes) deberíamos cambiar ;extension=php_gd2.dll por extension=php_gd2.dll Puedes ver para qué sirve cada extensión en el Manual oficial de PHP. Como nota adicional, resaltar que hay algunas extensiones que requieren de librerías extra que no vienen en el paquete completo de PHP, y para hacerlas funcionar tendremos que buscar dichas librerías. No actives todas las librerías a diestro y siniestro porque luego saldrán errores de que no se encuentra tal archivo; antes de instalar una librería, comprueba que en la carpeta de PHP tienes los archivos DLL correspondientes.


    IMPORTANTE: la librería php_mysql.dll es la que permite manejar las funciones relacionadas con MySQL, y por defecto en PHP5 viene desactivada, por tanto vamos a activarla de la forma que indicamos antes: buscamos ;extension=php_mysql.dll y le quitamos el ; de delante.


    Ahora, si vamos a hacer pruebas con upload de archivos via HTTP, debemos indicar el directorio donde los archivos se almacenarán temporalmente. Para ello buscamos upload_tmp_dir y le damos el valor de una carpeta que exista. Por ejemplo, en nuestro directorio C:\Servidor\PHP\ creamos una carpeta uploads, por lo que quedará algo así:


    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = "C:/Servidor/PHP/uploads/"


    Si queremos cambiar el tamaño máximo de los archivo que pueden subirse via HTTP, buscamos upload_max_filesize y cambiamos el valor por defecto que trae, 2M (2 MB), por el que queramos. No se recomienda poner un valor alto.


    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 2M


    Para trabajar con sesiones, debemos especificar un directorio donde se guarden los archivos temporales. Al igual que 2 pasos antes, buscamos session.save_path y le damos el valor de un directorio que exista (o lo creamos):


    session.save_path = "C:/Servidor/PHP/sessions/"


    A continuación copiamos el php.ini a la carpeta C:\Windows\ o C:\WinNT\ según nuestra versión de Windows.


    ¡Ahora vamos a decirle al Apache que tenemos el PHP!


    2.3 - Configuración del archivo httpd.conf de Apache


    Ya que al inicio hicimos una distinción para los casos de Apache 1.3.X y para Apache 2.0.X, no vamos a ser menos ahora y distinguiremos los dos tipos. El motivo es que la gestión de los módulos es distinta en ambas versiones, por lo que la configuración no es idéntica. Asimismo cambia algo la configuración si se trata de PHP4 o PHP5, asi que tenemos 4 casos posibles combinando las dos versiones de Apache y las dos de PHP. Hay que editar el archivo httpd.conf que encontramos en la carpeta Conf dentro del directorio del Apache.


    2.3.1 - Caso A: httpd.conf para Apache 1.3.X


    Buscamos Dynamic Shared Object (DSO) Support que es donde se cargan los módulos. Ahí vamos a cargar el módulo de PHP para Apache, dando la dirección del archivo php4apache.dll (PHP4) o php5apache.dll (PHP5) que lo contiene. Encontramos hasta un ejemplo:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #


    Y ahora añadimos justo debajo:


    - Si estamos instalando PHP4:
    LoadModule php4_module C:/Servidor/PHP/sapi/php4apache.dll
    - Si estamos instalando PHP5:
    LoadModule php5_module C:/Servidor/PHP/php5apache.dll


    De tal manera que para PHP4 tiene que quedar así:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule php4_module C:/Servidor/PHP/sapi/php4apache.dll


    Y para PHP5 tiene que quedar así:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule php5_module C:/Servidor/PHP/php5apache.dll


    Ahora bajamos un poco por el httpd.conf y llamamos al módulo mod_php4.c en caso de que estemos instalando PHP4 o al módulo mod_php5.c si estamos instalando PHP5, de tal manera que para PHP4 quede así:


    ClearModuleList
    AddModule mod_php4.c
    #AddModule mod_vhost_alias.c


    Y para PHP5 debe quedar así:


    ClearModuleList
    AddModule mod_php5.c
    #AddModule mod_vhost_alias.c


    Vale, ahora buscamos en el httpd.conf el modulo mod_dir.c y nos sale esto:


    <IfModule mod_dir.c>
    DirectoryIndex index.html
    </IfModule>


    Modificamos la línea central para que si entramos en un directorio tipo http://127.0.0.1/directorio/ nos autoejecute el index predeterminado (si existe) y no nos salga un mensaje de error. Puedes usar más nombres si lo prefieres. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. En la siguiente línea, si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.


    DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml


    Ahora le añadimos debajo estas líneas (en la primera de ellas, si estamos instalando PHP5 también podemos añadir la extensión .php5 además de las que aparecen):


    AddType application/x-httpd-php .php .php3 .php4 .phtml
    AddType application/x-httpd-php-source .phps


    La primera indica las extensiones que serán interpretadas por el Apache. Por ejemplo podemos añadir la extensión .htm o .html para que el Apache ejecute el código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado exclusivamente a archivos *.PHP). La segunda sirve para que si entras en una página loquesea.phps entonces se muestra el código PHP a color, muy útil si queremos por ejemplo mostrar el código fuente a color en una página. De tal forma que al final todo queda así:


    <IfModule mod_dir.c>
    DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml
    AddType application/x-httpd-php .php .php3 .php4 .phtml
    AddType application/x-httpd-php-source .phps
    </IfModule>


    El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
    C:\Archivos de programa\Apache Group\Apache\htdocs\


    Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:


    DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"


    Nosotros sustituimos la carpeta htdocs del Apache por la que queramos. Todos los archivos que vayas a probar con el Apache deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta WEB dentro del directorio del servidor:


    DocumentRoot "C:/Servidor/WEB/"


    Y ya podemos guardar el archivo httpd.conf


    2.3.2 - Caso B: httpd.conf para Apache 2.0.X


    Buscamos Dynamic Shared Object (DSO) Support que es donde se cargan los módulos. Ahí vamos a cargar el módulo de PHP para Apache, dando la dirección del archivo php4apache2.dll (PHP4) o php5apache2.dll (PHP5) que lo contiene. Encontramos hasta un ejemplo:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #


    Y ahora añadimos justo debajo:


    - Si estamos instalando PHP4:
    LoadModule php4_module C:/Servidor/PHP/sapi/php4apache2.dll
    - Si estamos instalando PHP5:
    LoadModule php5_module C:/Servidor/PHP/php5apache2.dll


    De tal manera que para PHP4 tiene que quedar así:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule php4_module C:/Servidor/PHP/sapi/php4apache2.dll


    Y para PHP5 tiene que quedar así:


    # Example:
    # LoadModule foo_module modules/mod_foo.so
    #
    LoadModule php5_module C:/Servidor/PHP/php5apache2.dll


    El directorio predeterminado para guardar nuestras páginas es el htdocs del Apache:
    C:\Archivos de programa\Apache Group\Apache\htdocs\


    Pero podemos cambiarlo fácilmente. Buscamos DocumentRoot y nos sale esto:


    #
    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    #
    DocumentRoot "C:/Archivos de programa/Apache Group/Apache/htdocs"


    Nosotros sustituimos la carpeta htdocs del Apache por la que queramos. Todos los archivos que vayas a probar con el Apache deberán estar localizados en esta carpeta. Por ejemplo nos creamos una carpeta WEB dentro del directorio del servidor:


    DocumentRoot "C:/Servidor/WEB/"


    Por lo que construiremos toda nuestra página dentro de ese directorio, que equivale al directorio raíz de nuestro host local.


    Ahora buscamos el DirectoryIndex y nos sale algo como esto:


    #
    # DirectoryIndex: sets the file that Apache will serve if a directory
    # is requested.
    #
    # The index.html.var file (a type-map) is used to deliver content-
    # negotiated documents. The MultiViews Option can be used for the
    # same purpose, but it is much slower.
    #
    DirectoryIndex index.html index.html.var


    Modificamos la última línea para que si entramos en un directorio tipo http://127.0.0.1/directorio/ nos autoejecute el index predeterminado (si existe) y no nos salga un mensaje de error. Puedes usar más nombres si lo prefieres. Se ejecutarán por orden: si no encuentra el primero, pasa al segundo; si no está el segundo, pasa al tercero, y así sucesivamente hasta que si no encuentra ninguno entonces da error. En la siguiente línea, si en nuestro directorio tenemos un index.htm y un index.php, por defecto se ejecutará el index.htm ya que está antes.


    DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml index.html.var


    Ahora le añadimos debajo estas líneas (en la primera de ellas, si estamos instalando PHP5 también podemos añadir la extensión .php5 además de las que aparecen):


    AddType application/x-httpd-php .php .php3 .php4 .phtml
    AddType application/x-httpd-php-source .phps


    La primera indica las extensiones que serán interpretadas por el Apache. Por ejemplo podemos añadir la extensión .htm o .html para que el Apache ejecute el código PHP contenido en esas páginas (es decir, el uso de código PHP no está limitado exclusivamente a archivos *.PHP). La segunda sirve para que si entras en una página loquesea.phps entonces se muestra el código PHP a color, muy útil si queremos por ejemplo mostrar el código fuente a color en una página. De tal forma que al final todo queda así:


    #
    # DirectoryIndex: sets the file that Apache will serve if a directory
    # is requested.
    #
    # The index.html.var file (a type-map) is used to deliver content-
    # negotiated documents. The MultiViews Option can be used for the
    # same purpose, but it is much slower.
    #
    DirectoryIndex index.html index.htm index.php index.php3 index.php4 index.phtml index.html.var
    AddType application/x-httpd-php .php .php3 .php4 .phtml
    AddType application/x-httpd-php-source .phps


    Y ya podemos guardar el archivo httpd.conf


    2.4 - Probando nuestro servidor Apache


    Ahora vamos a probar el Apache y PHP, para lo cual deberemos arrancar el Apache.


    Para Apache 1.3.X sólo tenemos que arrancar el apache.exe de la carpeta del Apache para iniciar el servidor, con lo cual nos sale una ventanita de MS-Dos donde nos indicará que está activo (running) o no. Basta cerrar la ventanita de MS-Dos para desactivar el Apache.


    Para Apache 2.0.X accederemos desde los accesos directos que se crean en el menú de inicio al acceso directo Monitor Apache Servers y aparecerá un icono al lado del reloj. Pinchando en el icono, sale un menú desde donde podremos iniciar, apagar y reiniciar el Apache. Como queremos encenderlo, si no lo hace automáticamente le daremos a Start. Si ya estaba encendido le daremos a Restart (útil si cambiamos alguna configuración de PHP "al vuelo") para que al reiniciarlo nos coja los cambios que hemos hecho.


    Si todo ha ido bien, podemos crear un archivo llamado por ejemplo info.php dentro de la carpeta de nuestra web cuyo contenido sea exclusivamente el siguiente:


    <?
    phpinfo();
    ?>


    Si accedemos mediante nuestro navegador a la dirección http://127.0.0.1/info.php o http://localhost/info.php (recuerda que 127.0.0.1 = localhost) con el Apache activo deberemos visualizar una página de información de PHP. Si no sale, algo ha fallado, revisa los pasos.



    Como has podido observar, para acceder a nuestro servidor local y así poder probar nuestros script y las páginas de nuestra web, siempre accederemos con la dirección 127.0.0.1 o localhost (sin WWW) en el navegador pues esta es la dirección del host local de nuestro ordenador. En general, para visualizar o acceder a cualquier archivo (PHP, HTML, TXT, ZIP, GIF, JPG, etc.) que tengamos en nuestra carpeta de la web, lo haremos de la siguiente forma:


    http://localhost/CARPETA/ARCHIVO.EXT


    Donde CARPETA es la carpeta (o serie de carpetas) relativas a la raiz en que se encuentra el ARCHIVO.EXT


    Por tanto resaltar que no sólo podemos hacer llamadas a script PHP, sino también a páginas HTML, descarga de archivos, imágenes, etc., tan solo poniendo la dirección correcta en el navegador. Es simplemente un servidor. De esta forma, podemos tener nuestra web funcionando en nuestro propio ordenador para construirla desde cero o bien hacer las pruebas que necesitemos sin tener que estar conectados a Internet.






    3 - Instalación de MySQL - Web oficial: http://www.mysql.com


    Vamos a hacer la instalación de una versión 4.0.X, por lo que en este caso buscaremos la versión que corresponda en los downloads para Windows. En la fecha de actualización de este manual, la versión utilizada fue la 4.0.23 Y repito que usamos una versión 4.0.X, no una 4.1.X, pues la 4.1.X no funcionará si sigues los pasos de este tutorial.


    Existen dos tipos de archivo descargable, en ZIP y en EXE. Yo prefiero el ZIP porque es descomprimir y listo, y luego para actualizar la versión es más sencillo. El instalador EXE lleva un setup muy majo, por defecto se instala en C:\MySQL\ Recomiendo elegir otra ruta de instalación, y por ejemplo lo vamos a hacer en C:\Servidor\MySQL\ para tener el PHP y MySQL en la misma carpeta. Una vez finalizada la instalación, solo hay que llamar al winmysqladmin.exe que estaría en C:\Servidor\MySQL\bin\ y la primera vez que lo ejecutemos nos pide un nombre de usuario y contraseña, que introduciremos sin mayor complicación. Por ejemplo podemos poner el usuario "Pepe" y la contraseña "hola", pero tú ponlo a tu gusto. Ahora al lado del reloj saldrá un semáforo. Si el semáforo se pone en verde, perfecto, si no, algo ha fallado.



    Por defecto, MySQL crea un usuario de nombre root y sin contraseña, y éste es el usuario que usaremos en nuestros script o en las aplicaciones que nos lo pidan (foros, PHP Nuke, etc.). Sin embargo, al final de esta guía se expone cómo crear nuestro propio usuario con nuestra propia contraseña, para así evitar usar este usuario que se crea "por defecto" y conseguir un nivel de seguridad mayor. Pero vayamos por partes, pues antes tendremos que instalar el phpMyAdmin, una aplicación que nos simplificará la vida en el manejo de las bases de datos.






    4 - Instalación de phpMyAdmin - Web oficial: http://www.phpmyadmin.net


    PhpMyAdmin es una utilidad que nos sirve para inteactuar con una base de datos de forma muy sencilla y desde una interfaz web. Nos sirve por ejemplo para crear bases de datos, tablas, borrar o modificar dados, añadir registros, hacer copias de seguridad, etc. Es una aplicación tan útil que casi todos los hosting con MySQL disponen de ella, por ello se analizará su instalación. Además, vamos a usarlo para crear los usuarios MySQL para así poder utilizar las bases de datos de forma segura. Al ser una aplicación escrita en PHP, necesita de Apache y MySQL para poder funcionar.


    Si accedemos a la página oficial, nos encontramos en la sección de downloads con una lista de links, y el que tenemos que elegir es el ZIP de la última versión. En nuestro caso vamos a utilizar la versión 2.6.1 de esta aplicación, que es la versión disponible en la fecha de actualización de este manual.


    La instalación es relativamente sencilla: extraer todo el ZIP en la carpeta raíz de nuestra web. OJO: en la carpeta de nuestra web, C:\Servidor\WEB\ y no dentro de la carpeta del PHP o similares. Como pone un nombre extraño a la carpeta, mejor la renombramos a phpmyadmin, de forma que quedaria algo así: C:\Servidor\WEB\phpmyadmin\


    Ahora vamos a hacer una pequeña configuración del phpMyAdmin. Para ello debemos editar el archivo config.inc.php y, leyendo de arriba hacia abajo, buscamos la primera aparición de la siguiente línea:


    $cfg['PmaAbsoluteUri'] = '';


    Debemos darle la ruta absoluta donde tenemos el phpMyAdmin. En nuestro caso sería así:


    $cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';


    Recuerda que podemos poner localhost o 127.0.0.1 (a gusto del consumidor). Ahora buscamos si nos aparece algo como esto:


    $cfg['blowfish_secret'] = '';


    Le pondremos una cadena de caracteres cualquiera, que servirá de semilla para la encriptación de contraseñas al usar la autentificación con cookies:


    $cfg['blowfish_secret'] = 'aqui puedes poner lo que quieras';


    Y guardaremos el archivo, pero no lo cerraremos. Puedes probar phpMyAdmin para ver si funciona, ya sabes: http://localhost/phpmyadmin/






    5 - Configurando los usuarios del servidor MySQL


    Si has llegado hasta aquí, ya tenemos todo instalado y listo para funcionar. Recuerda que ahora nuestro usuario de MySQL es root sin password. Con esto podría valernos para hacer pruebas utilizando MySQL en nuestro host local. Sin embargo, en este paso vamos a ver cómo eliminar el usuario "por defecto" y cómo crear nuestro propio usuario con contraseña, ya que así evitamos la brecha de seguridad que produce el tener el usuario root y dotamos de cierta seguridad a nuestro host local. Lo haremos mediante la utilidad phpMyAdmin.


    Ahora entramos a phpMyAdmin mediante la dirección http://localhost/phpmyadmin/index.php (recuerda tener MySQL y Apache activos para que phpMyAdmin funcione). Básicamente vamos a realizar las siguientes tareas:


    - Crear nuestro propio usuario.
    - Borrar usuarios no deseados (ej. el usuario root).
    - Aplicar los cambios realizados.
    - Configurar phpMyAdmin y los script para el nuevo usuario.


    5.1 - Creación de nuestro usuario para MySQL


    Desde la portada de phpMyAdmin podemos seleccionar el idioma castellano si lo deseamos. A continuación, pinchamos en el link Privilegios y en la siguiente pantalla damos a Agregar nuevo usuario. Ahora vamos a agregar nuestro usuario y contraseña, que será el que usemos luego en nuestros script locales que hagan uso de MySQL. Por ejemplo, podemos poner el mismo usuario y contraseña que tenemos en nuestro Hosting, pues así tendremos menos cosas que recordar. Como ejemplo, pongamos el usuario Pepe y la contraseña hola.


    Introduciremos el nombre de usuario y contraseña, le daremos acceso a "Cualquier servidor" (para que se pueda acceder a MySQL desde cualquier IP, incluidas las externas a nuestro ordenador) o a "Local" (si sólo queremos que se acceda desde nuestro ordenador donde hemos instalado MySQL) y le daremos todos los permisos y privilegios (marcando todas las casillas que aparecen).


    5.2 - Borrado de usuarios no deseados


    Una vez creado nuestro usuario o usuarios, vamos a borrar aquellos que se crean "por defecto" y que conviene borrar para evitar brechas de seguridad, sobre todo si vamos a usar el PC como servidor hacia Internet y no sólo para hacer pruebas desde nuestro hogar. Por ejemplo, vamos a borrar todos los usuarios excepto el que acabamos de crear. Lo hacemos de una forma rápida y sencilla desde el mismo link Privilegios de antes: seleccionar los usuarios que no queramos y eliminarlos.


    5.3 - Recarga de privilegios


    Una vez eliminados, debemos buscar un link que sirve para recargar la página de privilegios y pulsar en él para que los cambios sean efectivos. De todas formas podemos hacer el anterior paso y éste de una vez: al eliminar usuarios, asegúrate de marcar la casilla que indica que se eliminarán los usuarios y posteriormente se cargará la página de privilegios. Este paso es importante, pues si no recargas los privilegios, ningún cambio anterior habrá sido efectivo.


    5.4 - Configurar los script para el nuevo usuario


    Una vez borrado el usuario root y recargados los privilegios, phpMyAdmin deja de funcionar. ¿Por qué? Pues porque phpMyAdmin venía configurado para usuario root sin password, y éste lo acabamos de eliminar. Entonces ahora tendremos que cambiar dicha configuración de phpMyAdmin para que funcione con el nuevo usuario.


    Volvemos al config.inc.php del phpMyAdmin, que no habíamos cerrado y localizamos la primera aparición de estas variables:


    $cfg['Servers'][$i]['auth_type']
    $cfg['Servers'][$i]['user']
    $cfg['Servers'][$i]['password']


    Y les cambiamos su valor. En la primera ponemos config para que no nos pida contraseña al entrar (útil si somos el único usuario que va a disponer de este phpMyAdmin), o si queremos que nos la pida, ponemos http para autentificación HTTP o bien cookie para autentificación y navegación con cookies. A la segunda le damos el nombre de usuario y a la tercera la contraseña del usuario que acabamos de crear.


    $cfg['Servers'][$i]['auth_type'] = 'cookie';
    $cfg['Servers'][$i]['user'] = 'Pepe';
    $cfg['Servers'][$i]['password'] = 'hola';


    NOTA: phpMyAdmin tiene un fallo (bug conocido) en esta zona. Al usar autentificación HTTP, un usuario que acaba de abandonar la sesión no puede volver a entrar con el mismo nombre. Para solucionarlo, se deben cerrar todas las ventanas del navegador que estén abiertas, y a continuación si abrimos una nueva ventana y volvemos a intentar entrar nos debería dejar sin problemas. Si quieres poner contraseña a phpMyAdmin y para evitar este problema, te recomiendo que de los dos métodos elijas el de cookies.


    Si ahora desde tu navegador, y con el Apache y MySQL activos, accedes a la dirección http://localhost/phpmyadmin/index.php podrás empezar a utilizar phpMyAdmin con tu nuevo usuario y contraseña. Si elegiste pedir contraseña, cuando accedas a phpMyAdmin tu usuario y tu contraseña serán las que pusiste al crear el usuario: Pepe y hola en nuestro caso. Lo primero que harás será crearte una nueva base de datos para meter ahí lo que quieras.


    De la misma forma, en nuestros script PHP que usen MySQL usaremos el usuario y contraseña que nos hemos creado, de tal forma que al hacer la conexión a MySQL quede algo como esto:


    <?php


    // .....Funciones PHP.....


    mysql_connect("127.0.0.1","Pepe","hola");


    // .....Más funciones PHP.....


    ?>


    O bien, si estamos instalando un prefabricado como PHP Nuke o un foro, o incluso cualquier aplicación en la que nos solicitan un host, usuario y contraseña, los datos que deberemos indicar son esos: 127.0.0.1 o localhost como servidor, Pepe como usuario, hola como contraseña, y el nombre de la base de datos que hayamos creado con phpMyAdmin. No obstante, se recomienda tener unos conocimientos básicos sobre MySQL en PHP para manejar correctamente estas funciones.






    6 - Cómo realizar las actualizaciones a versiones superiores


    Como nos gusta ir a la última y continuamente hay actualizaciones de seguridad, voy a poner unas notas de cómo actualizar estos elementos una vez los tengamos instalados y saquen una nueva versión. Ten en cuenta que al sacar una nueva versión puede que haya cambios grandes en la forma de instalación, pues estas notas se harán suponiendo que la forma de instalación no cambia de una versión a otra, lo cual es habitual.


    6.1 - Cómo actualizar Apache


    Para actualizarlo lo primero será cerrar todos los procesos que usan Apache, incluidos los que se ejecutan ocultos como servicio del sistema. Lo más sencillo es ir al menú CTRL + ALT + Supr y cerrar todos los procesos en que esté involucrado el Apache. Después desinstalaremos el programa desde el Panel de Control - Agregar o Quitar Programas. A continuación borraremos manualmente aquellas carpetas del Apache que el desinstalador no haya borrado. Y finalmente, instalaremos la nueva versión de Apache y configuraremos el httpd.conf igual que se explica en los pasos anteriores, usando las mismas carpetas que usaste en la versión anterior de Apache para que nada cambie.


    6.2 - Cómo actualizar PHP


    Empezaremos cerrando todos los procesos de Apache y MySQL de la forma citada en el párrafo anterior. A continuación eliminaremos la carpeta PHP que se encuentra en C:\Servidor\PHP\ Luego instalaremos la nueva versión de PHP como se dice arriba, configuraremos el nuevo php.ini, y en los pasos que se dice que copiemos ciertos archivos a los directorios de Windows, sobreescribiremos todos archivos existentes con los nuevos, incluido el nuevo php.ini Ya sólo te queda arrancar de nuevo el Apache y MySQL y ver si todo ha ido bien.


    6.3 - Cómo actualizar MySQL


    Al igual que antes, cerraremos todos los procesos activos que tengan que ver con MySQL para evitarnos problemas. Después copiaremos el directorio data (que está dentro de la carpeta de MySQL y es el que contiene nuestras bases de datos, tablas, etc. que queremos guardar) a otro directorio cualquiera de forma temporal. Luego desinstalaremos MySQL, ya sea desde el Agregrar o Quitar Programas si usaste la versión que trae instalador, o bien borrando el directorio si usaste la versión que viene sin instalador. A continuación instalaremos la nueva versión, tras lo cual volveremos a copiar el directorio data de nuevo a la carpeta de MySQL sobreescribiendo el que haya, y de esta forma no se pierden los datos de nuestras bases de datos. Y finalmente sólo queda reiniciar MySQL, ver si el semáforo se pone verde y comprobar si los script y phpMyAdmin siguen funcionando.


    6.4 - Cómo actualizar phpMyAdmin


    Éste es el más sencillo de actualizar, pues lo único que hay que hacer es borrar el anterior y luego instalar y configurar el nuevo como se cita más arriba. Además, asegúrate también de cambiar el usuario y contraseña para que luego funcione.






    7 - Extra: instalación de un servidor de correo SMTP


    Si vamos a hacer pruebas con envío de correos o bien vamos a usar nuestro PC como servidor de nuestra web, es posible que nos interese instalar un pequeño servidor de correo para poder usar la función mail() de PHP. Con uno de estos servidores podremos enviar correos desde PHP, pero obviamente no podremos recibir nada ya que se tratan de servidores SMTP (enviar) y no POP/IMAP (recibir). Vamos entonces a ello. En principio no hay que cambiar nada en el php.ini ya que éste viene por defecto configurado para un servidor de correo instalado en el localhost, que es de lo que trata este manual. Pero sí podremos cambiar la variable sendmail_from, que será el remitente que le aparecerá a la persona que reciba el correo si no ponemos el campo FROM en las cabeceras del email mediante la función mail()


    [mail function]
    ; For Win32 only.
    SMTP = localhost

    ; For Win32 only.
    sendmail_from = me@localhost.com


    Lo que sí hay que tener en cuenta es que para que estos servidores de correo funcionen, hay que tener conexión a internet. Una opción de servidor sería el QK SMTP que encontramos en www.qksoft.com Este servidor es instalar y listo. Sólo queda tenerlo abierto y ya podremos enviar correos mediante PHP. Este servidor tiene una versión trial.


    Otro servidor interesante sería el Argosoft Mail Server. Este servidor es gratuito aunque requiere una pequeña configuración. En un artículo de la Asociación de Internautas explican cómo configurar este servidor para enviar correo con Outlook, pero dicha configuración también funciona con PHP, asi que nos sirve plenamente. La dirección del artículo es la siguiente: www.internautas.org/article.php?sid=167 En dicha página encontraremos la descarga del programa y cómo configurarlo.






    8 - Extra: Apache Manager para Apache 1.3.X - Web oficial: http://moonspot.net/apmgr.html


    El Apache Manager para Windows es una pequeña utilidad que permite ejecutar el Apache 1.3.X como un icono al lado del reloj y no como una ventana de Ms-Dos que puede llegar a ser molesta. Además permite cerrar, pausar y reiniciar el Apache si por ejemplo estamos haciendo una configuración. Este programa se distribuye en un ZIP que contiene un ejecutable y más archivos; estos archivos son el código fuente, pero el archivo que nos interesa es el apmgr.exe que copiaremos en la misma carpeta que esté el apache.exe A continuación, basta llamar al a apmgr.exe para arrancar el Apache. Si lo acemos desde un acceso directo, en el destino podemos poner C:\Ruta-del-Apache\apmgr.exe -r donde el -r indica que arranque automáticamente el Apache al iniciar el apmgr.exe Bajo Windows XP ha funcionado la versión 1.0 del Apache Manager pero no la 2.1, y bajo Windows 98 parece que todas las versiones funcionan.






    9 - Notas finales


    ¡Y por fin, ya está todo! Largo, pero merece la pena. Ahora ya puedes empezar a hacer tus pruebas en PHP y MySQL. Recuerda que estamos trabajando con programas servidores, con lo cual estos programas tienen que estar activos cuando vayamos a hacer nuestras pruebas. Esto quiere decir que el Apache debe estar conectado (debe estar activado para poder interpretar los script) y que el script debe estar dentro de la carpeta especificada anteriormente en Documentroot, además también MySQL debe estar funcionando para trabajar con bases de datos, y debemos tener tener el servidor de correo funcionando con conexión a internet si vamos a usar funciones de envío de email.


    Una nota importante es que tanto Apache 2.0.X como MySQL pueden ejecutarse como servicio del sistema. Esto quiere decir que, aunque no veamos ningún icono en la barra de tareas, ambos están funcionando de forma oculta. Esto puede resultar útil si los usamos a menudo, pues nos evitamos el tener que ejecutar Apache y MySQL para hacer las pruebas. Pero si deseas quitarlo, deberemos usar la utilidad msconfig para evitar que arranquen de inicio: Inico - Ejecutar - msconfig y en la pestaña Servicios desmarcaremos el Apache y MySQL. Al reiniciar el ordenador, ya no se ejecutarán como servicio del sistema y tendremos que arrancarlos manualmente.


    Si no usamos estos servidores como servicio, habrá que arrancarlos manualmente. MySQL se arranca ejecutando el winmysqladmin.exe que está en la carpeta bin del directorio de MySQL. El Apache 2.0.X se arranca desde el acceso directo Monitor Apache Servers que se crea en el grupo de iconos en el menú Inicio. Y el Apache 1.3.X se arranca también desde un acceso directo que se crea al archivo apache.exe Para el servidor de correo no tendremos problemas, abrir o cerrar el programa y listo.


    Asimismo, resaltar que todo este tutorial y configuraciones han sido elaborados bajo un sistema Windows XP Home Edition. Si tenemos un programa cortafuegos instalado en el ordenador, es posible que tengamos que abrir los puertos que se nos soliciten para que funcione el invento. También debemos tener cuidado si tenemos el IIS funcionando, para que no se peguen el Apache y el IIS entre sí.


     


    modelo osi




    modelo osi : es la propuesta de iso para estandarizar la interconexion de sistemas abiertos.

    sistema abierto: se refiere a que es independiente de una arquitectura especifica.

    capas:


    1)capa fisica: se encarga de las conexiones fisicas de la computadora hacia la red.ademas de transmitir los bits de informacin atraves del medio utilizado para la transmision.

    protocolos que utiliza: IEEE 802.3 ,802.4, 802.5,RS-232,RS-449,codigos NR2


    2)capa de enlace de datos: recibe peticiones del nivel de red y utiliza los servicios del nivel fisico. su objetivo es conseguir que la informacion fluyalibre de errores entre las dos maquinas que esten conectadas directamente.

    protocolos que utiliza:IEEE 802.2,ODI,LABP,NDIS,ETHERNET,TOHEN RIGNG,LOCAL TALK


    3)capa de red: su mision es conseguir que los datos lleguen desde el origen al destino aunque no tengan conexion directa.

    protocolos que utiliza:NETBEUI,OSPF,IP,IPX,ICMP,X.25


    4)capa de transporte: acepta daots enviados por las capas superiores ,dividirlos en pequeñas unidades si es necesario y pasarlas a la capa de red. asegura que lleguen correctamente al otro lado de la comunicacion.

    protocolos que utiliza:TCP,UDP,SCTP,RTP,SPX,TCAD,DCCP ,SPX/IPX56


    5) capa de sesion: ofrece servicios pára la comunicacion como:



    • contorl de sesion a establecer entre emisor y receptor
    • control de la concurrencia
    • mantener puntos de verificacion

    protocolos que utiliza:RTSP,H.323,H.248,SIP,RPC,NETBT,SMB,TLS,SNMP,TFTP,FTP/TELNET


    6)capa de presentacion: se encarga de la presentacion de informacion donde los datos lleguen de manera reconocible.


    protocolos que utiliza:ASN.1,VIDEOTEX, UNICODE,MIME,HTML,

    7)capa de aplicacion: ofrece a las aplicaciones la posibilidad de acceder a los serviciosde los demas capas y define los protocolos que utilizan aplicaciones para intercambiar datos, como correo electronico,gestores de bases de datos, y servidores de fichero.


    protocolos que utiliza:HTTP,FTP,SMTP,POP,SSH,TELNET,OTROS: FTAM,SNMP,X.400,DNS,X.500,NFS,SHELL




    cuestionario 1



    1)diferencia entre IPV4 e IPV6
    Los nombres que se usan para conectarse a internet se traducen en unos numeros que son los que realmente usan la red. las direcciones IPV4 tiene 32 bits agrupados en 4 grupos de 8 bits por loq ue el conjunto global va de 0.0.0.0 a 255.255.255.255 por lo tanto idealmente de podria signar 4.294.967.296 direcciones. IPV6 solucionara el problema de direccionamiento, tiene mayir espacio de direccionamiento y seguridad y movilidad.

    2) que es un socket
    Designa un concepto abstracto por lo cual 2 programas pueden intercambiarse cualquier flujo de datos genralmente de manera fiable y ordenada. Zocalo existente en una placa base que permite la conexion de uin microporcesador gracias a una matriz de pequeños agujeros donde encajan sus pines sin difigucltad.

    3)cuales son los numeros de puertos mas usados.
    del 0 al 1023
    ftp utiliza el puerto 21 y 20
    ssh utiliza el puerto 22.
    telnet utiliza el puerto 23
    smtp utiliza el puerto 25
    http utiliza el puerto 80

    4)mediante un diagrama indique el formato de cabecera tcp
    ( nos e pudo agregar por el tipo de formato)

    5)en que capa del modelo osi se encuentr el tcp
    en el nivel de transporte

    6) mediante una breve descripcion explique como trabaj tcp
    se establece una conexion entre el cliente y el servidor.el cliente envia un segmento inical al servidor , el cual responde al servidor completando la negociacion , se inicia la transferencia de datos: donde se incluye el numero de secuencia para ordenar los segmentos tcp recibidos y detectar paquetes publicados.
    en la fase de finalizacion de la conexion usa una negociacion donde determina la conexion de cada lado independiente ;cuando u extremo desea terminar su conexion transmite un paquete FIN que el otro lado respondera con un ack, el lado ha finalizado la conexion, no puede enviar mas datos pero la otra parte si.

    CUDI

    La Corporación Universitaria para el Desarrollo de Internet (CUDI), es una asociación civil integrada por las universidades del país, de carácter privado, sin fines de lucro, que fue fundada en abril de 1999. Su misión es promover y coordinar el desarrollo de una red de telecomunicaciones de la más avanzada tecnología y amplia capacidad, enfocada al desarrollo científico y educativo en México.
    CUDI es el organismo que maneja el proyecto de la red Internet 2 en México y busca impulsar el desarrollo de aplicaciones que utilicen esta red, fomentando la colaboración en proyectos de investigación y educación entre sus miembros.

    La construcción de la red Internet 2 en México se basó en la voluntad de las universidades líderes del país de absorber, a prorrata, el costo de instalar y operar la red y su interconexión a las redes universitarias de alta velocidad en Estados Unidos y Canadá.
    Apoyándose en este compromiso, Teléfonos de México y Avantel han aportado sin costo a la red CUDI 8,000 kilómetros de red dorsal de alta capacidad. A cambio de esta donación se ha establecido que la red tiene que cursar exclusivamente tráfico de carácter educativo o de investigación.Actualmente la membresía de CUDI se integra por las principales universidades y centros de investigación del país. Adicionalmente, forman parte de la membresía de CUDI, empresas que apoyan la investigación y educación en el país.

    CUDI está formado por 4 categorías de miembros:
    Asociado Académico
    Universidades que adquieren el compromiso financiero de absorber a prorrata el costo de mantener la red operando. Forman parte del Consejo Directivo.
    Afiliados Académicos
    Universidades que únicamente desean conectarse a la red y absorben los costos directos de su conexión a la red dorsal.
    Asociados Institucionales
    Instituciones no universitarias que realizan una aportación mayor a la asociación y forman parte del Consejo Directivo.
    Afiliados empresariales
    Instituciones no universitarias que realizan una aportación menor a la asociación

    Red CUDI

    En la actualidad la red de CUDI cuenta con una infraestructura de más de 8,000 kilómetros de enlaces de alta capacidad que operan a una velocidad de 155 megabits por segundo. Esta red dorsal abarca todo el territorio nacional. Se cuenta además con tres enlaces de la misma velocidad que permiten la interconexión con las principales redes académicas de Estados Unidos y del resto del mundo. A través de estos enlaces es posible tener acceso a más de 45 redes similares de Europa, Asia, Oceanía y América Latina que interconectan a más de 3,000 universidades y centros de investigación. La red CUDI maneja los protocolos más avanzados en redes de telecomunicaciones como son QoS, Multicast, Ipv6, H.323, MPLS, y HDTV. La red cuenta con su propio centro de operación (NOC), lo que permite que en la red corran aplicaciones críticas en todas las ramas de la ciencia.

    internet2

    internet 2

    Internet 2 : Es una colaboración dentro de cien universidades de Estados Unidos para el desarrollo avanzado de redes y aplicaciones para el aprendizaje y la aplicación. La enseñanza, el aprendizaje y la investigación en colaboración puede requerir interconexión y altas conexiones de banda ancha en tiempo real. La infraestructura de Internet 2 soporta esas aplicaciones. También intenta investigar y desarrollar nuevas maneras de usar Internet y la infraestructura de Internet 2 para propósitos educacionales. Internet 2 no es un reemplazo de Internet, los organizadores de Internet 2 esperan compartir el desarrollo de las redes incluyendo la red de Internet 2. Internet 2 va a incluir y a desarrollar el servicio de redes "Backbone Network" (vBNS) de la "National Science Foundation" que en estos momentos interconecta las investigaciones.

    La nueva versión de Internet que permite la transmisión de datos a alta velocidad, mayor seguridad y mayor confiabilidad

    reflexion para todos los bebedores jovenes

    SI TE SALVAS...


    Si te salvas no te quedes conmigo. ¡Que cosas se ven en este pinche país!, la crisis que tenemos y la colota que hay que hacer para comprar el chupe. Yo tengo que estar aquí por que mañana sábado no venden y no puedo recibir a mis clientes sin un trago, es bien sabido que en México (y no se si en todo el mundo) los negocios se resuelven delante de una botella. Al fin llego. - Una de a litro de añejo por favor. Puta, las seis de la tarde y yo sin que hacer.


    Después de comprar el pomo me dispuse a ver si encontraba algún review de Clipper 5.0, según sabemos todos Nantucket la cagó gachamente al sacar al mercado un paquete con errores. En la librería no encontré ningún libro interesante, pero sí unas interesantísimas nalguitas, llevaba un libro de Benedetti, lentes de fondo de botella, jeans ajustados, blusa vaquera a cuadros, morena, bien formada, ojos verdes... ¿Ojos verdes? ¡ya pegó conmigo!. Tomé "Ciudades Desiertas" de José Agustín y corrí a la caja. - Si te salvas no te quedes conmigo - dije a su oído - no contestó, pagó su libro y salió, pagué mi libro y salí detrás de ella. - ¿Vives por aquí? - dije exhibiendo la mejor de mis sonrisas.


    - No - y prosiguió su paso.


    - Tú no eres de aquí ¿Verdad?


    - ¿Cómo te diste cuenta? - preguntó y ahora si se detuvo.


    - La gente de aquí no acostumbra leer literatura de vanguardia y menos si tiene tendencias rojas como la de Benedetti, además, tu piel no tiene todavía los estragos del sol de esta bendita tierra, y por último, vienes a comprar un libro de cuentos en viernes, lo cual quiere decir que no tienes todavía amigos con quién salir. - (Qué suerte que yo ya había leido "Montevideanos").


    - Para ser un vendedor de computadoras, digo traes una lista de precios ¿No?, no eres mal detective.


    Sonreí con ella.


    - ¿No te parece más entretenido tomar un café con un desconocido vendedor que leer toda la tarde sola?.


    Le pareció buena idea y fuimos al café, Laura, según me dijo que se llamaba, era una chica extremadamente culta, era de Campeche y acababa de llegar para estudiar ingeniería electrónica. Vivía sola y estaba buscando trabajo, era buena pensadora, pero pésima discutidora, en el momento en que uno tocaba un tema del que no supiera mucho, o cambiaba inmediatamente o ponía un argumento aplastante para que no quedara puerta abierta a discusión. Me pasé una tarde muy agradable con ella, como las diez de la noche la dejé en su casa y quedamos de vernos el domingo.


    Al día siguiente me topé con que mis clientes no tomaban, "mamaban" de una manera impresionante, todavía en juicio alcanzamos a cerrar el negocio y después seguimos bebiendo, como era lógico, el mísero pomito de Bacardí no rindió, así que tuve que sacar mis reservas de Palmas y después uno de Corsario. Yo ya me sentía pedo y estos tipos no tenían para cuando, como ya nos habíamos tomado hasta las lociones que había en mi casa, decidimos ir a un bar, pensé en un lugar a la altura y los llevé a "La Güajolota", misma que más que otra cosa era una cantinucha de lo peor. Como supuse, los clientes se sintieron como en casa, ahí nos chupamos otros tres pomos, después de eso sólo recuerdo que desperté en mi cama con una cruda fenomenal, me tomé una cerveza para alivianar y después me fui por un caldo de Jaiba y otras dos cervezas, con esto quedé bien, aunque todavía un poco aletargado (o apendejado que es lo mismo).


    A las cinco fui por Laura, salió hecha una monada con una blusa vaquera (después me enteré que eran sus favoritas) y una minifalda de mezclilla.


    - Hola, ¿No habíamos quedado a las cuatro y media?


    - Quise darte tiempo  para que te arreglaras bien, pero de todos modos mil disculpas.


    - Oye, has estado tomando ¿Verdad?.


    El maldito tufo de la cerveza es delatador, así que tuve que narrarle la historia completa.


    - Pobre de ti, ¿Así que tuviste que embriagarte con dos jarochos para cerrar un negocio?.


    Era encantadora cuando usaba su tono irónico de hablar, me apené un poco con ella y al fin le propuse ir al cine. La película fué bastante aburrida, así que tuvimos tiempo de platicar. Una vez en su casa me invitó a pasar, era un departamento pequeño, un sofá en la estancia, una mesa tipo desayunador y unas sombrillas chinas colgando en las paredes.


    - ¿No te hará daño si te invito algo de tomar sin alcohol?


    Definitivamente encantador su tono irónico.


    - Te agradecería un café, ¿Tocas la guitarra?, digo, tienes una.


    - Un poco.


    En lo que ella preparaba el café me entretuve tocando "Smoke on The Watter", luego toqué algunas otras rolas rocanrolleras y pensé que había logrado impresionarla. Le pedí que tocara ella, y me dio toda una cátedra de cómo se toca bien la guitarra. Cuando dejó de tocar la miré fijamente a los ojos.


    - Pocas veces he oído a alguien tocar tan bien - le dije y me acerqué un poco más, cuando intenté besarla se paró como movida por un resorte.


    - Ya está el café, voy por el.


    Me quedé sentado sintiéndome estúpido por precipitarme tanto.


    - Oye, ya es un poco tarde para que te vayas ¿Por qué no te quedas a dormir aquí?.


    Después de todo quizás no me había precipitado tanto, pero había que ser cauteloso, seguimos charlando un rato y entramos en mucha más confianza.


    - Oye Roberto, ¿Siempre ocultas tu persona haciendo que el otro hable de sí mismo o sólo lo haces conmigo?


    - ¿Qué te gustaría saber de mí?, en realidad soy un tipo bastante simple. No me gusta que me digan Beto, el café lo prefiero sin azúcar y opino que la mejor manera de vivir es improvisando.


    - Y, ¿No tienes pasado?, ¿en tu vida no hay una historia?.


    - Mira, el pasado es algo que no existe, y no te hagas la idea romántica de que hubo una gran tragedia en mi vida ni nada de eso, mi historia es tan aburrida que lo más sencillo es decir que nací por una bromita de Dios, he vivido intentando comprender a la sociedad y actualmente vendo computadoras.


    - Me gusta tu estilo de esconder tu vida, eres médico o algo así ¿verdad?.


    - ¿Por qué?


    - Tu manera de hablar es culta, a veces, casi nunca hablas de cosas personales tuyas, tus manos son finas y en tu coche vi un libro de ingeniería bio-médica.


    - Bueno, estudié hasta el octavo semestre de ingeniería en Biología.


    - Y, ¿Por qué no terminaste?


    - Por muchas causas, primero, no tenía tiempo para trabajar y estudiar, y luego por que no quería que la esencia de lo que soy estuviera en un papel, ¿entiendes?, no quería que la gente me dijera ingeniero sólo por que tengo un papel que dice que lo soy, no quería que se evaluara lo que se o lo que no se por que tengo mi nombre en un mugroso papel, en sí, detesto todo tipo de contratos o trámites para evaluar tu existencia, como que si alguien que no tuviera acta de nacimiento legal no hubiera nacido, o como que dos que se aman y no están casados no tienen sentimientos el uno hacia el otro, o no sé, como que la sociedad te juzga siempre por la cantidad de papeles que tienes, aún que de perdida sea papel moneda, en fin, me siento un poco más libre si no tengo que portarme a la altura de mi preparación.


    - ¿Te libera el hecho de no tener nada que te acredite como una persona preparada?


    - En cierta forma si, ni siquiera pido chamba por que nadie me la daría con un buen sueldo, es más, por ejemplo con los jarochos de ayer, si me hubiera ido a chupar con ellos siendo ingeniero, ya medio pedones no hubieran dejado de llamarme "Inge", ni de decirle a todos los demás en la cantinucha: - Mira, este cuate así, como lo vez de a toda madre, es Ingeniero. Lo cual provocaría que los demás me vieran no se si con admiración o con resentimiento, pero me verían como alguien distinto a ellos. Eso lo se por que cuando estaba estudiando como en séptimo semestre empecé a poner en mis tarjetas: "Ing. Roberto La Madrid", e inmediatamente empecé a sentir como que los que me conocían decían": ¡Que mamón!, todavía no acabas, y los que no me conocían: Ten cuidado, este tipo es ingeniero y se las sabe de todas todas en los números. En fin, empecé a sentirme menos como ser humano y más como ingeniero, qué raro ¿No?.


    En ese punto creo que toqué algo sensible dentro de sus principios, por que ella creía mucho en los papeles y esas cosas, yo intenté explicarle que esos eran conceptos sociales que nos metían desde muy chicos y por eso ahora nos los creíamos todos, en fin discutimos en buen plan un buen rato. Como nos dimos cuenta que ambos éramos personas de firmes conceptos decidimos dejar el tema por la paz y ponernos a cantar con la guitarra. La chava me cantó unas canciones que ella había compuesto, y estaban padres, en si, delataban que todo el recubrimiento burgués y socializado que ella misma se ponía no eran más que eso: Un recubrimiento. Ya era de madrugada cuando le comenté que a mi me encantaba ver el amanecer, y una serie de cursilerías que luego le entran a uno a esas horas.


    En determinado momento ambos sentimos sueño, yo hice ademán de retirarme, pero ella no lo permitió y me mostró una pequeña cama al lado de la cocina, me dijo que ahí podía dormir y ella en su recámara (lástima), de repente, antes de irse a su recámara me dijo:


    - Voy a dejar la puerta de mi cuarto abierta por si se te ofrece algo en la noche... un vaso de agua o algo así.


    Ese comentario me dejó sin dormir gran parte de lo que quedaba de la noche, ¿a qué se refería con "si se te ofrece algo"?, rumié en mi cerebro mil opciones. "Si se te ofrece cojer, la puerta de mi cuarto está abierta". "Si se te ofrece un vaso de agua o algo así", nada más, ¿crees que si te brindo la hospitalidad de mi casa me puedes tomar por una ramera?. En fin no supe que pensar de la situación y estuve como dos horas despierto. Sentía que la deseaba, pero era una chica sin prejuicios que me invitaba a mí, humilde desconocido, a pasar la noche en su casa, no sabía si era un abuso a su hospitalidad el querer hacerle el amor... en fin, mi mente era toda una confusión sobre qué hacer, como a las cuatro de la mañana me levanté y fui a su cuarto, estaba profundamente dormida, sin la menor desconfianza hacia mí, me acerqué a ella y la besé, respondió a mi beso todavía dormida, cuando despertó me preguntó qué hacía yo ahí, me sentí como un estúpido abusivo ante la situación, ella brindándome su hospitalidad y yo besándola cuando no podía defenderse, me regresé a mi cama y me quedé profundamente dormido.


    - Despierta Roberto, ¿No te gusta ver el amanecer?.


    - mm... Sí.


    Eran como cuarto para las seis cuando me despertó, me llevó quince minutos el poder levantarme e ir a la sala. Ella no estaba ahí, no supe que hacer y me puse a escribir idioteces sobre el beso de hacía apenas dos horas. Cuando ella salió de su cuarto le di lo que había escrito, cuando terminó de leerlo dijo:


    - ¿Así que no fué un sueño?.


    - No.


    - ¿Por qué no viste el amanecer desde mi cuarto? -


    No supe qué responder y emprendí la graciosa retirada poniendo el pretexto de que era lunes y tenía que trabajar, recordé esa parte de una canción de José José que dice: "Casaste al aprendiz de seductor". Camino al trabajo casualmente me encontré a Arturo Cuanalo que venía bien crudo y todavía medio pedo.


    - Oye Cabrón, que suerte encontrarte, ¿vas para la oficina? - me dijo


    - Si, no mames tenemos que cerrar una venta hoy, y necesito que me surtas unos equipos.


    - Mira, voy como a las doce, nada más voy a dormir un rato para que se me baje y te alcanzo allá, diles que ando medio agripado o algo así para que no me caguen, como cuates, ¿No?.


    Fui a ver a mis clientes y quedé de cerrar el trato con ellos en cuanto tuviera los equipos, después me fui a la oficina y esperé a Cuanalo como hasta las dos, para estas alturas yo ya estaba que mentaba madres por que era un buen monto lo que me iba a llevar de comisión por esa venta, y la lana no abundaba en ese entonces por mis bolsillos. En fin, Cuanalo nunca llegó y los clientes se encabronaron y el negocio se fué a la chingada. Con todos estos pedos ni tiempo me había dado de pensar en Laura. Como ya no tenía nada que hacer en la tarde decidí ir a visitarla a su casa, no sabía que actitud tomar después de lo ocurrido la noche anterior, no sabía si lo del beso había sido una estupidez precipitada, o una actitud que ella esperaba, en fin, decidí llegar como quien no sabe nada.


    Llegué a su casa, y me recibió muy amable, resulta que tenía que resolver un problema de química y no tenía ni la menor idea de cómo, algo sabía yo de la materia y le ayudé, no sin dejar de preguntarme por qué carajos llevaban química en Ingeniería electrónica. En lo que resolvíamos el problema nos dieron las doce de la noche, y, como el día anterior, me dijo que era muy tarde y etc. otra vez me quedé a dormir ahí. Nos pusimos a platicar y me contó gran parte de su vida, resulta que su papá era un político o algo así en Campeche y la había mandado a estudiar a una buena escuela pagándole casa y todo, yo le conté gran parte de mi escasamente interesante vida, a ratos reíamos y a ratos meditábamos, me contó que en Campeche los chavos la seguían mucho y que con varios "tuvo que ver", por ese "tuve que ver" deduje que se había acostado con ellos, y no sé por qué pero me agradó más al saber que era una chava deshinibida y sin complejos. De repente vimos una luz azul que se reflejaba por la ventana de la cocina. No nos explicamos de momento lo que sería, al fin nos dimos cuenta de que ya eran las seis de la mañana y estaba amaneciendo. El tiempo había pasado sin darnos cuenta en la amena plática que habíamos tenido. Como ya era de día decidí irme a mi casa para bañarme e irme a trabajar.


    Todo el día anduve medio apendejado por las dos desveladas y sobre todo pensando en lo agradable que era esta niña, que a pesar de ser rica, era inteligente y sensible, no como las otras niñas presumidas y salvajes que había conocido, se me ocurrió que sería de poca madre un acostón con ella por que además estaba muy buena. En fin, pensé en ella todo el día, en la noche casi tuve que forrar de "kotex" mi cama para caer como regla. Me desperté ya bien tarde al otro día, una de las ventajas de ser vendedor por cuenta propia es que no hay que checar tarjeta y se puede llegar a trabajar a la hora que sea. Fué hasta el viernes que volví a visitar a Laura.


    - Hola Roberto, al fin apareces.


    - Hola, no tienes idea de cómo me complicó la vida la última desvelada, tuve una de cosas que hacer... pero todo este fin de semana me queda libre.


    - Oye, se me ocurrió comprar una botella de tequila y tomármela contigo, ¿qué te parece?.


    - En principio me parece perverso, pero he de advertirte que el tequila tiene efectos mortíferos en mi, es más la última vez que lo tomé fué con un canadiense que estaba necio con tomar lo que se toma en México, como al cuarto tequila, (caballito, no vayas a creer que botella) ya estaba yo hablando inglés, y como a media botella me llevaron cargando a dormir al coche, así que estás advertida.


    - Bueno, pero siempre eres decente ¿verdad?.


    Ahí estaba lo desconcertante con esta chava, proponía algo a todas vistas indecoroso, pero se protegía indirectamente de un ataque sexual. Decidimos pues tomarnos la susodicha botella, descubrí que tenía un compac de "Eye in the Sky" y lo puse como cincuenta veces. Cuando íbamos como a la mitad del pomo yo ya me sentía bien mareado y ella se veía enterita, hice todo mi mejor esfuerzo psicológico para mantenerme en juicio y no hacer el espantoso papel de que ella me cuidara, de repente ella se paró y me dijo:


    - Scuse me, do you want to hear another time eye in the sky?.


    - Pero como Laura, ¿ya estás hablando en inglés?.


    - Of course I am, Da you think you are the only one who can?


    - No, pero pensé que estabas aguantando más que yo por que la verdad ya me siento bien mal.


    Se rió sin motivo y puso por enésima vez "eye in the sky", para estas alturas ya yo la veía preciosa, como un ángel etéreo que estaba chupando conmigo, para cuando nos acabamos el pomo, estábamos los dos "hasta atrás" y ayudándonos mutuamente a caminar.


    - Oye, ¿ssabes que eres el tipo más bbriago que he conocido en mi vida?.


    - ¿Y tú sabes que eres la niña más desconcertante que he conocido?


    - Si te Salvas no te quedes conmigo.


    Acto seguido me besó apasionadamente, su boca me supo a algo así como lápiz labial finísimo mezclado con tequila, algo sumamente agradable, le empecé a responder y sentí que se excitaba, cuando empecé a bajar mis manos y a llevarla hacia el sofá brincó y se separó de mí, no se por qué pero en ese momento la vi totalmente en juicio diciéndome:


    - Disculpa Roberto, me gustas mucho, pero como amigo, eres muy guapo, pero no de mi tipo y no quiero que pienses que soy una golfa que se toma unos tragos y se acuesta contigo.


    Prendí un cigarro y me quedé bien sacado de onda un rato oyendo "eye in the sky". Ella se quedó parada un rato frente a mí, y después se echó a llorar desconsoladamente.


    - ¿Sabes?, tuve un novio en Campeche, y ya nos íbamos a casar y todo, pero el quería probar mi amor, quería saber si de verdad lo amaba y tuvimos relaciones, aunque no lo creas fué mi primera vez, después de un tiempo él se esfumó, me dejó así con toda la gente viéndome con compasión unos y otros quizás pensando que me acostaba con él nomás por que sí o vete tú a saber, fué por eso principalmente por lo que vine a estudiar aquí, para huir de todos ellos, para salvarme.


    - Y todos los otros chavos con los que me contaste que "tuviste que ver"


    - Me refería a que fueron mis novios, no a que me acosté con ellos, ¿qué te crees?, y fueron antes de "el diablo".


    - Curiosa manera de llamarlo, ¿quieres bailar?.


    Estuvimos bailando abrazados en silencio como una hora, después me senté en el sofá y ella al lado de mí descansó su cabeza en mis piernas, mientras acariciaba su cabello me puse a pensar en "el diablo", ¿cómo sería el tipo?, seguramente otro niño rico y sin cerebro que tenía que recurrir a trucos tan baratos para acostarse con una mujer, seguro ahorita estaba en Campeche o por ahí diciéndole mentiras a otra ingenua jovencita so pretexto de que no fuera a ser que no fuera virgen algo así, no se por qué pero empecé a odiar "al diablo", es más, casi podía ver su cínico rostro reclamando a gritos una madriza de mi parte, en esto pensaba cuando quise besar de nuevo a Laura, estaba profundamente dormida, y me inspiró tanta ternura ver que después de perder su preciada virginidad con un tipejo, ahora buscaba consuelo en alguien que ella pensaba que valía un poco más, claro que yo también tengo mi historia, pero nunca engañando a nadie, como no sea a mis clientes, Laura empezó a motivarme algo muy especial, yo nunca había tenido amigas, cada que empezaba a tener una relación con alguien, necesariamente tenía que rematarlo en algo sexual, yo creo que es por el cassette que le meten a uno desde chiquito de que mientras más mujeres tengas eres más chingón, o no se, pero a mi me parece demasiado estúpido pensar así, está bien llevar una vida sexual que te satisfaga, pero para eso no tienes que andar prometiéndoles a las virgencitas que te vas a casar con ellas, hay suficientes chavas de onda como para que no tengas necesidad ni de pagar por sexo ni de hacer ese tipo de marranadas de seducir con mentiras. Definitivamente - pensé - si llego a conocer "al Diablo" le voy a partir su madre. Laura, entonces significó para mí una mujer que quería ser mi amiga, nada más, una amistad sin necesidad de sexo, una bonita amistad de yo contarle mis problemas y ella a mí, en fin, que maravilla poder contar con una amiga con la que no te tienes que comprometer de ninguna manera, y no se encele si le cuentas que se la estuviste metiendo a tal o cual vieja, y además, ya me había nacido un cariño muy tierno y muy especial por ella, como ese cariño tan especial que se le tiene a la hermanita de cuatro años que llega llorando a contarte que un infeliz le pegó en el kinder. Pensando en esto me quedé profundamente dormido.


    - Ya está el desayuno - oí que una voz distante susurraba a mi oído.


    - mmhh, si ya voy.


    Estaba en la misma posición como me quedé dormido en el sofá, hasta ahí me llegó el olor de unos chilaquiles bien picosos que Laura había preparado.


    - ¿Cómo dormiste amorcito? - le dije


    - Pues después de estar bailando un rato no me acuerdo de nada, y no me digas amorcito.


    Me entro la idea de molestarla un rato, y puse en mi cara la sonrisa más picaresca que me salió.


    - Después de lo de anoche... digo, te ponías como loca cada que te lo decía y pedías mas.


    - Ah, ¿si? ¿y después de hacerme el amor me volviste a vestir y me acomodaste en tus piernas en el sofá?.


    - No se puede contigo, ¿no puedes dejar ni por un momento tu complejo de detective?.


    - Me preocupa lo que pase, por cierto, te agradezco que me respetaras en ese estado, te prometo que no vuelvo a ponerme así.


    - No por mi no te preocupes, si te pones bien cariñosa. Por cierto, ¿que hubieras hecho si hubieras amanecido en tu cama desnuda y conmigo al lado?.


    - No lo sé, pero mejor ni pensarlo, ¿sabes?, por eso me gustas más, eres un chavo que sabe tomar las cosas como son, y sobre todo, eres mi amigo por mí y no por mi cuerpo.


    - Para serte franco, al principio me acerqué a ti precisamente por eso, pero después, y especialmente anoche, me empezaste a interesar de otra manera, como que ambos necesitamos amigos, y tú me pareces la persona ideal para ello.


    - Tú también a mí.


    Ese día decidimos irnos al campo, escalamos un montecillo que estaba por ahí, ella se resbalaba a cada rato y cada que le ofrecía mi ayuda la rechazaba argüyendo que ella podía sola. Está bien macho - le decía yo y proseguíamos nuestro camino entre risas y charlas en inglés y en español a ratos. Me dijo que había aprendido inglés cuando vivió un año en Inglaterra y yo le dije que yo lo había aprendido oyendo rock and roll. Ese fin de semana lo pasamos a toda madre en el día salíamos y la noche la pasábamos en su casa, hasta estuve pensando irme a vivir con ella, después de todo cocinaba muy bien, me atendía a cuerpo de rey, y no teníamos compromisos. Deseché la idea por que ella era una universitaria y esto me permitía imaginar claramente los pensamientos de sus "cultos" compañeros al saber que vivía con un tipo, y ella venía huyendo precisamente de eso.


    La siguiente semana pasé a recojerla todos los días a la escuela, vi que muchos de sus compañeros me miraban como pensando: Chin, ya tiene novio. Esta idea Laura no se las quitó, según me dijo, por que así evitaba que se le acercaran la bola de lagartones con la única intención de cojer con ella. Así pasó una de las semanas más felices de mi vida, cada día encontrábamos algo nuevo el uno en el otro, es más, creo que empecé a enamorarme de ella sin darme cuenta, todo era perfecto hasta que el cassette integrado en mí desde mi infancia empezó a traicionarme, cada día sentía más la necesidad de hacer el amor con ella. Empecé entonces a hablarle de los sentimientos que me inspiraba, a decirle que esa amistad tan padre estaba degenerando en amor. Ese Viernes decidimos quedarnos a ver una película en su casa, nos sentamos juntos en el sofá como ya era costumbre, terminando la película la abracé y le dí un beso en la mejilla, ella me miró un poco desconcertada.


    - ¿Por qué hiciste eso?.


    Tomé sus manos.


    - Por que te deseo, ahora me inspiras más como mujer que como amiga, ya no es lo mismo que cuando te conocí, me eres mucho mas deseable como un intelecto afín que simplemente como una amiga, estoy cebado desde aquella noche que te besé todavía con una intención y un sentimiento mucho más vagos de los que ahora tengo.


    La volví a besar, pero ahora en la boca, al principio no supo qué hacer, pero luego me respondió con una pasión casi enfermiza que me hizo pensar que era como si ella me dijera: ¿quieres eso?, pues ahora lo tienes, ¿que te parece?. Me dió miedo hasta cierto punto, por que me besaba de una manera tan pasional que pareciera que quería asfixiarme, o arrancarme la lengua succionándola con su boca, eso terminó por excitarme y ponerme como loco con ella, todo lo que sentía desde la boca del estómago hasta el cuello lo dejé salir y me torné en una bestia salvaje y desaforada que pedía a gritos tener sexo. Nuestras ropas cayeron violentamente al suelo y besé sus senos repetidas veces, después su ombligo, sus muslos, su sexo... ella me jalaba los cabellos y me besaba, después la penetré casi con furia y ella gimió, cuando tuve la primera eyaculación seguí haciéndole el amor a pesar de la horrible sensación que esto me provocaba en el pene, y ella tuvo un orgasmo, y otro, y otro... llegó el momento en que ya no podíamos más, en que el cuerpo ya reclamaba descanso, pero el deseo que teníamos era más fuerte. Cuando al fin quedé casi inmóvil sobre de ella recordé las palabras que mi consejero de secundaria me dijo alguna vez: "Para saber si de verdad estás enamorado de un vieja, cójetela, hasta que ya no puedas más, cuando la verga ya no se te pare por más que lo intentes, cuando ya estés harto, entonces ella te va a preguntar: ¿Me quiereees?, si el sí que le digas (por que a huevo le tienes que decir que si) te sale de corazón, si de verdad tus entrañas dicen Sí. Entonces, Roberto, estás enamorado de ella."


     


     


    Laura sonreía satisfecha y me acariciaba la espalda, yo esperaba con ansias el momento de que me preguntara: ¿Me quieres?. Para responderle ¡Sí!, te quiero, te adoro, y cuanta cursilería se me ocurriera, por que de verdad mis entrañas gritaban: Sí. Pero ella no lo preguntó, en vez de eso me salió con un "eres maravilloso mi amor", y ahora, ¿Cómo carajos le digo que la quiero consejero?, mi consejero me dijo al oído: "bésala Güey", la besé. Desde ahí vino un periodo de amor, pero en serio, amor. Fornicábamos como conejos cada que nos veíamos, leíamos a Benedetti juntos, veíamos películas, ya no nos emborrachábamos por que ella no tomaba, salvo aquella vez, y yo, como me había vuelto niño bueno, tampoco.


    Así, mis sentimientos por Laura empezaron a cambiar, ya no era mi hermanita de cuatro años, sino mi novia, aun que nunca hubo una declaración formal. Me inspiraba ahora algo mucho más somático que emocional, sentía que mis manos extrañaban su cuerpo cada que no estábamos juntos, sentía que la necesitaba para poder respirar, vamos, hasta pensé en casarme con ella, pero deseché esta maniaca idea por que ya no me inspiraba ternura, es más, creo que si me encontraba "al diablo" en ese momento le estrecharía la mano y le agradecería el haberme dado la oportunidad de conocer a Laura. Fué así como dejé de verla un poco menos como amiga, y un poco más como amante. Al cabo de un tiempo ya no la veía más como amiga y si como amante. Esto acabó por desquiciar totalmente mis sentimientos, quería verla y platicar con ella como antes, pero el cuerpo me lo impedía, y cuando terminábamos de hacer el amor estábamos demasiado cansados como para platicar. Ahora cuando iba por ella a la universidad la saludaba besándola en la boca, como para demostrarles a sus compañeros que era mi novia, y que si alguien quería con ella se las tendría que ver conmigo.


    Era un sábado y yo estaba acostado viendo la televisión cuando ella me propuso que saliéramos al campo o a algún lado, yo le dije que estaba muy cansado y nos quedamos ahí todo el día, así empecé a verla menos seguido por que estaba muy ocupado con mi trabajo, y cuando la veía tenía exactamente el tiempo justo para hacerle el amor y retirarme, llegamos así al punto de la curva sinoidal en que empieza todo a bajar después de haber llegado a la cima.


    El domingo pasado, Laura fué a verme a mi casa, se me hizo rarísimo por que jamás lo había hecho.


    - Hola, ya que toda la semana no me fuiste a ver decidí hacerlo yo.


    - Pasa, ¿quieres un café o algo?.


    - Compré una antología poética de Mario Benedetti.


    - Es muy buena, ¿leiste el Padre Nuestro Latinoamericano?, buenísima.


    - No, pero leí "No te Salves".


    - Ah, también es muy buena, inclusive "Mexicanto" ya la sacó en un disco.


     - Si, y termina diciendo "Si te salvas no te quedes conmigo", ¿por qué Roberto?, por que nunca me dijiste que esa frase no era tuya, no, no me digas nada, ya sé que nunca hablamos de eso, pero yo pensaba que tú eras algo así como un ser mágico que había adivinado lo que me pasaba cuando nos conocimos, que habías tenido toda la claridad del mundo para describir el momento por el que yo pasaba, en fin, que eras una especie de filósofo ignorado por el mundo. Y ahora resulta que lo dijiste sólo por que me viste comprando un libro de Benedetti y era un vil y vulgar pretexto para hacerme la plática. Créeme que si me hubiera enterado antes no me hubiera afectado tanto, por que antes te amaba como loca y al ritmo que tú quisieras, pero ahora, te he conocido tan diferente, tan distante, tan ordinario; que lo único que me mantenía contigo era eso de pensarte mágico, de pensar que en cualquier momento cambiarías y volverías a ser tan maravilloso como al principio, pero ahora me doy cuenta de que no hay magia en ti. Eres un tipo inteligente y sincero, hasta cierto punto sensible, pero no eres mágico. A veces pienso que eres peor que "el diablo", por que él mentía siempre y esa era su manera de seducir, pero tú no, tú siempre dices la verdad y esa es una forma mucho peor para engañar, te concretas a ocultar las cosas no convenientes de decir, y por eso piensas que no mientes, fué una mentira que nunca me dijeras de "No te salves", quizás ya te habías dado cuenta de lo que significaba para mí y por eso me lo ocultaste, con esto lograste no mentirme. Ya sé que ahora me vas a dar todo un elocuente y bien elaborado discurso para convencerme de que esta es una estupidez, pero no quiero oirlo, no quiero oir una más de tus palabras ni sentir una más de tus caricias. Te agradezco todos los buenos momentos que pasé contigo, pero no me pidas que me quede, quiero salvarme y no quedarme contigo.


    Después se fué, y su discurso estuvo tan bien que no supe qué decir o qué hacer. Todo el día estuve pensando en lo que me dijo, quizás no era tanto el hecho de la frase, si no el de cómo llevábamos nuestra relación, hasta entonces me dí cuenta de que ya solamente la veía para cojer, y que aquel sábado por ejemplo, ella se sentía encerrada y con ganas de salir, tenía tiempo que no íbamos al cine o al campo o a cualquier parte, nos concretábamos a encerrarnos y hacer el amor, definitivamente le hacía falta un cambio a nuestra relación, y decidí entonces hacerlo, volver a ser amigos, volver a salir juntos, sería ahora mucho mejor por que ya nos conocíamos como amantes y nos entendíamos muy bien, si, eso era lo que estaba mal, no habíamos sabido conjuntar los papeles, hicimos a un lado el ser amigos cuando nos hicimos amantes. El Lunes en la mañana me esmeré en arreglarme lo más que pude, le compré unas flores y me dispuse a proponerle irnos a México ese día, para que conociera Chapultepec, y la zona rosa, y el paseo de la reforma, y en fin, la ciudad completa si ella quería, le iba a jurar que nunca más nos encerraríamos, que saldríamos aunque fuera a comprar cigarros a la esquina, es más, incluso pensé proponerle que nos casáramos.


    Llegué a su casa a las siete de la mañana para evitar que fuera a clases y lograr que nos fuéramos juntos de pinta. Toqué el timbre como desesperado sintiéndo que toda la ternura que me inspiraba había renacido, que ahora si podría ser mi hermanita de cuatro años, bueno, je, de veintidós, llevaba diez minutos tocando cuando salió la portera.


    - La señorita Laura pagó el departamento ayer joven, y dijo que lo podíamos rentar por que ella ya no regresaba.


    Entonces fui a buscarla a la Universidad a ver si alguno de sus compañeros sabía de ella, no había llegado a clases y nadie sabía, busqué por toda la ciudad a ver si la encontraba. Al fin desesperado regresé a su casa, no era posible que se hubiera llevado todo. La portera me dejó entrar, las sombrillas estaban todavía en su lugar, en el desayunador encontré una nota con mi nombre decía:


    "Roberto:


    Te he esperado todo el día y no viniste, me voy a donde pueda olvidarme de ti, no te molestes en buscarme por que todavía ni yo se a dónde me voy a ir.


    Siempre Tuya:


    Laura"


    Efectivamente no tenía caso buscarla por que su papá tenía todo el dinero del mundo como para que ella le dijera: "Papi, quiero irme a Escocia un mes y otro mes a Egipto y otro mes a...... , ¡ah!, por cierto, por ningún motivo le digas a un chavo que se llama Roberto dónde estoy ¿Eh?. La perdí por no haber ido un día antes, por no tener la suficiente agilidad mental para darme cuenta de las cosas a tiempo, por no haber corrido a su lado inmediatamente, en fin, la perdí por pendejo. Esta vez fue Benedetti mismo quien me dijo al oído: Qué salvadota se dió al no quedarse contigo ¿Verdad?.


     


    Acerca de miguelin

    INFORMATICA

    Suscríbete

    RSS | Atom

    Contacto

    Contactar

    Albergado en:blogdiario.com

    Noticias: Noticias