martes, 18 de enero de 2011

Ejecutar Apache como un servicio

Hace unos días realizamos una instalación de Apache sobre Windows y la pusimos a funcionar. Fue un proceso muy sencillo siguiendo los pasos recomendados.

Pero esta vez intentamos cambiar la configuración y aparecieron inconvenientes muy interesantes de resolver.

Necesitaba instalar un segundo servidor Apache vinculado a otra cuenta de usuario en Windows, con idea de no mezclar las instalaciones ni configuraciones distintas de los cursos que estoy realizando.
Previamente había instalado el paquete XAMMP, el cual incluye un entorno de trabajo ya configurado de Apache, PHP, MySQL y PHPMYAdmin entre otros. Al estar configurado previamente, Apache escuchaba en el puerto 80 por defecto, de modo que con mi segunda instalación de Apache no podía vincular el servicio al mismo puerto.

¿Qué hacer entonces?
- Pues sencillo.

Durante el proceso de instalación de Apache:
Existe la opción de no instalar Apache como servicio de forma que lo podremos hacer nosotros después manualmente.

Conseguimos con esto que la nueva instalación de Apache no esté escuchando en el puerto 80 sino en el puerto 8080 y MUY IMPORTANTE realizaremos la instalación sin instalar el servicio de Apache.

¿Qué ocurrirá ahora?
- Pues que Apache no estará listo para su funcionamiento.

Tras la instalación veremos como el icono de Apache aparece en nuestra barra de tareas con el simbolo de STOP, y si deslizamos el ratón sobre el icono aparecerá un mensaje indicando que "no hay servicios instalados".

Exactamente esto es lo que pretendíamos. Apache no está iniciado.
Si nos fijamos en el Monitor de Apache:

los botones para "Iniciar/Start" el servidor se encuentran inactivos de modo que no podemos iniciar Apache manualmente de esta forma.

Tenemos que instalar nosotros el servicio de Apache


Instalar el servicio de Apache
Nuestra intención era conseguir que Apache no se instalara para todos los usuarios del equipo, pretendíamos tener una instalación local para un determinado usuario del PC. Si instalabamos Apache como un servicio global sobre el puerto 80 todos los usuarios del equipo accederían a el y ningún otro programa (XAMMP por ejemplo) podría utilizar ese mismo puerto.

La solución estaba en instalar Apache de forma local y sin instalar su servicio. Nosotros nos encargaríamos de instalar el servicio cuando nos hiciera falta.

De modo que accedemos a
Panel de Control -> Herramientas adeministrativas -> Servicios
Comprobaremos que no aparece ningun servicio de Apache para poder iniciar/detener/reiniciar a nuestro antojo.
Esto es porque aún no está instalado.

Abrimos una ventana de comandos
Inicio->Ejecutar->cmd
y nos situamos sobre el directorio bin de Apache.
Nota: la ruta normal puede ser C:\Archivos de programa\Apache Software Foundation\Apache2.2\bin

Tecleamos
httpd -k install -n "ApacheSegundo"
y esperamos un mensaje de éxito en la operación.

Nota: el nombre del servicio "ApacheSegundo" puede ser el que se desee. La idea es poder identificarlo entre los demás servicio sin que se confunda con otro servicio de Apache.

Tras esto podremos comprobar como el icono de Apache de la barra de tareas ya presenta otro aspecto. Nos indica que hay un servicio activo pero sin arrancar.
La consola tambien presentará otro aspecto y ya nos dejará Iniciar/Start Apache para poder funcionar correctamente.




POSTDATA
- Para desinstalar el servicio, bastará con teclear en la consola de comando la secuencia
httpd -k uninstall -n "ApacheSegundo"
- Recordar que ahora el puerto para escuchar es el 8080 y por lo tanto la llamada en el navegador http://localhost:8080/
- Más info al respecto en http://httpd.apache.org/docs/2.0/platform/windows.html#winsvc

Web 2.0: un poquito de XML

Aquí tenemos un poco de introducción al XML con DTD.
El ejemplo es con una cartelera de cine, con un listado de las películas e información relativa a ella.

XML facilita la estructuración de los documentos HTML, y las DTD "obligan" a seguir unas normas en dicha estructuración.
El diseño y la forma en que se muestre esa información al usuario sigue quedando en manos de las hojas de estilo CSS, o en este caso, de las XSL (que incorporaré más adelante).

Empezamos primero con las películas:

- Archivo mispeliculas.xml

?xml version="1.0"?>
<!DOCTYPE mispeliculas SYSTEM "peliculas.dtd">
<mispeliculas>
<pelicula>
<titulo>Cadena perpetua</titulo>
<director>
<nombre>Frank</nombre>
<apellido>Darabont</apellido>
</director>
<anio_pro>1994</anio_pro>
<genero><drama/></genero>
<actor>
<nombre>Tim</nombre>
<apellido>Robbins</apellido>
</actor>
<actor>
<nombre>Morgan</nombre>
<apellido>Freeman</apellido>
</actor>
<sinopsis>Andy Dufresne is a young and successful banker whose life changes drastically when he is convicted and sentenced to life imprisonment for the murder of his wife and her lover. Set in the 1940's, the film shows how Andy, with the help of his friend Red, the prison entrepreneur, turns out to be a most unconventional prisoner.</sinopsis>
</pelicula>

<pelicula>
<titulo>En tierra hostil</titulo>
<director>
<nombre>Kathryn</nombre>
<apellido>Bigelow</apellido>
</director>
<anio_pro>2008</anio_pro>
<genero><accion/></genero>
<actor>
<nombre>Jeremy</nombre>
<apellido>Renner</apellido>
</actor>
<actor>
<nombre>Anthony</nombre>
<apellido>Mackie</apellido>
</actor>
<premio nombre_premio="Oscar" categoria="Mejor pelicula"/>
<premio nombre_premio="Oscar" categoria="Mejor director"/>
<premio nombre_premio="Oscar" categoria="Mejor guion"/>
<premio nombre_premio="Globo de oro" categoria="Mejor pelicula"/>
<premio nombre_premio="Globo de oro" categoria="Mejor director"/>
</pelicula>


¿Semejanzas entre las dos películas?
- Ambas tienen atributos en común (titulo, director, año, genero y actores). Por lo tanto esos atributos deberían de ser obligatorios.

¿Diferencias entre las dos películas?
- La primera tiene un atributo que la otra no tiene (sinopsis) y viceversa (premios). Por lo tanto, deberían de ser opcionales.


Tenemos atributos obligatorios, donde pueden ser únicos (titulo) o múltiples (actor). También tenemos atributos opcionales, donde pueden ser únicos (sinopsis) o múltiples (premio).
Con esta informacíon podemos trabajar ya en la DTD.
- Archivo
peliculas.dtd


<!ELEMENT mispeliculas (pelicula*)>
<!ELEMENT pelicula (titulo, director, anio_pro, genero, actor+, sinopsis?, premio*)>
<!ELEMENT titulo (#PCDATA)>
<!ELEMENT director (nombre, apellido)>
<!ELEMENT anio_pro (#PCDATA)>
<!ELEMENT genero (accion|drama|comedia|animacion)>
<!ELEMENT actor (nombre, apellido)>
<!ELEMENT sinopsis (#PCDATA)>
<!ELEMENT premio EMPTY>
<!ATTLIST premio
nombre_premio CDATA #REQUIRED
categoria CDATA #REQUIRED>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellido (#PCDATA)>
<!ELEMENT accion EMPTY>
<!ELEMENT drama EMPTY>
<!ELEMENT comedia EMPTY>
<!ELEMENT animacion EMPTY>



Lo importante de este código es ver como marcamos las propiedades antes descritas en el código de la DTD. Fijarse como el simbolo ? indica opcional y único; el simbolo + indica obligatorio y múltiple; el simbolo * opcional y múltiple; y como los atributos obligatorios y únicos no llevan níngun signo.

Con mini ejemplos de este tipo resulta muy fácil desarrollar documentos mucho más amplios y apenas sin necesidad de consultar documentación específica de XML.


- ¿Cómo saber si nuestro código es correcto?
Pues existen herramientas para ello:
http://www.xmlvalidation.com/

En esa sencilla web podremos cargar nuestros archivos y validarlos, incluso con estructura asociada como DTD.

lunes, 17 de enero de 2011

Función readfile() en PHP: no muestra nada

Siguiendo con los pequeños ejercicios del curso sobre Web 2.0 nos sugieren que realicemos una pequeña página web que simplemente muestre un feedback de alguna página, todo a través de RSS. Como son tan sencillos los ejercicios tan solo nos proponen acceder a la web http://www.rssinclude.com/ para conseguir el código fuente y ejecutarlo en nuestra mini-página sin necesidad de ningun esfuerzo.

Claro está que lo de ningun esfuerzo no se ha cumplido, ya que sino no estaría escribiendo esta entrada.

Pues bien:
1.- Creamos nuestra mini-página web con un muy sencillo código:

<html>
<head><title>Curso WEB 2.0: Segundo ejercicio entrega</title></head>
<body>
<h1>Curso WEB 2.0: Segundo ejercicio entrega</h1>
<h2>Un primer contacto con la Web 2.0</h2>
<h3>Codigo generado con PHP</h3>
</body>
</html>

Y guardamos el archivo como index.php .

2.- Acudimos a la web que nos facilitan http://www.rssinclude.com/, en concreto a la sección para editar nuestra RSSBoox:
http://www.rssinclude.com/my_rssboxes/edit_box?id=201579&tab=feeds

3.- Introducimos una dirección feedback, por ejemplo de Yahoo http://rss.news.yahoo.com/rss/internet y presionamos sobre AddFeed

4.- Gracias a la web podremos ver un ejemplo de como quedará nuestra RSSBox.

5.- Presionamos sobre la pestaña Include! y aparecerán los diferentes códigos fuente para integrar la RSSBox (JavaScript, PHP, iFrame, ...)
<?php
readfile('http://output52.rssinclude.com/output?type=php&id=201464&hash=74fd6675161c35313f7aec9c5d53abd2');
?>

NOTA: Es necesario registrarse en la web para obtener el código fuente. El registro apenas dura un minuto.
NOTA2: Por cada dirección feedback que incluyamos obtendremos diferente código fuente

6.- A nosotros nos interesa el código PHP, de modo que lo copiamos y pegamos en nuestra mini-página web:

<html>
<head><title>Curso WEB 2.0: Segundo ejercicio entrega</title></head>
<body>
<h1>Curso WEB 2.0: Segundo ejercicio entrega</h1>
<h2>Un primer contacto con la Web 2.0</h2>
<h3>Codigo generado con PHP</h3>
<?php readfile('http://output52.rssinclude.com/output?type=php&id=201464&hash=74fd6675161c35313f7aec9c5d53abd2');
?>

</body>
</html>

Guardamos, subimos/copiamos a nuestro servidor y abrimos la página.

¿Y qué ocurre? - Pues ocurre que la página se muestra así:



Y, claramente, no es lo buscamos.

¿Qué ha pasado? ó ¿Qué esta fallando?

Resulta que la función readfile() de PHP obtiene los bytes del archivo recibido y los devuelve, en este caso el archivo está alojado en la web http://rssinclude.com. Si la lectura del archivo es errónea devuelve un error que se debería de mostrar por pantalla.

En nuestro caso no se muestra ningún error, de modo que insistimos en preguntarnos qué es lo que falla. Y llegamos a la conclusión que el problema está en que el servidor no ejecuta la función en ningún momento, simplemente la ignora.
Llegando a esta sencilla conclusión es fácil pensar que el problema resida en que la función esté desactivada en nuestro servidor, y sobretodo estando el archivo alojado en un hosting contratado.

¿Qué podemos hacer entonces? - Pues ejecutar el archivo index.php de forma "casera".
- Como tenemos Apache instalado en nuestro sistema, acudimos a la carpeta
C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs

y copiamos nuestro archivo index.php en ella.
- Arrancamos Apache
- Comprobamos en un navegador http://localhost/index.php
- Y voilà!




CONCLUSIÓN
Si el servidor donde hacemos las pruebas está alojado en un hosting contratado, habrá que asegurarse de que tenga las opciones que necesitamos activadas, en este caso activada la ejecución de la función readfile() para PHP.
Si no hay forma de averiguarlo, siempre podemos ejecutar el archivo sobre un servidor local.

miércoles, 12 de enero de 2011

Cambiar pantalla rota Asus Eee PC 1000 HD: Primera parte

El primer paso de la planificación que me puse por meta ya está terminado.

Como el número de fotos que fui sacando era bastante elevado, he creído mejor agruparlas en un video con explicaciónes de "Cómo desmontar el portatil".



Tras realizar todos los pasos indicados en el video, hemos extraído la pantalla del mini portátil con éxito.



Ahora que la tenemos en nuestras manos, es el momento de buscar en su parte trasera el modelo concreto de pantalla TFT, el cual es muy importante para buscar el recambio en internet.

El modelo de pantalla para nuestro Asus Eee PC 1000 HD es

HSD100IFW1 - A00

cuyo fabricante es HannStar.

De momento con estos datos tenemos suficiente para buscar el recambio en internet.
Luego y a medida que indaguemos por tiendas online y buscadores, descubriremos que existen dos versiones para nuestro modelo, en concreto con pantalla "Mate" o "Brillante". En mi caso será la primera.


Tras este éxito, nos resta avanzar hacia la segunda parte de la planificación, donde seguramente hallaremos inconvenientes y conocimientos más interesantes.

Cambio y corto!

martes, 11 de enero de 2011

Cambiar pantalla rota de un portátil Asus Eee PC: Introducción

Hace un par de meses se nos rompió en casa la pantalla de un mini portátil, y no es de extrañar cuando el aparato habitaba en todos los sitios menos encima de una mesa firme y segura.

El netbook en cuestión es un Asus Eee PC 1000HD Black.
Verdaderamente no es un "fuera de serie" pero para uso exporádico estaba muy bien (aquí dejo un enlace para ver las características técnicas).


Su precio ronda los 250 euros y una pantalla tft de recambio los 75-100 euros en la mayoría de tiendas de internet. Realmente hay que pensárse bastante si reparar ese portátil o comprarse uno nuevo.


Resulta que tengo una nefasta tendencia a encariñarme con las cosas y me suele dar pereza deshacerme de ellas si tienen arreglo, es por esto que a pesar de no ser un netbook con increibles prestaciones, creo que merece la pena invertir ese dinero en una nueva pantalla y darle un poco mas de vida al ordenador.
De modo que VAMOS ALLÁ!



Planificación

El objetivo será crear el pequeño manual en dos o tres partes más:
- el desamblado del portátil Asus Eee PC para la extracción de la pantalla rota
- la búsqueda en internet de un recambio a buen precio
- y por último, el acople de la nueva pantalla junto con el montaje del portátil

Veamos que tal se nos da ...

domingo, 12 de diciembre de 2010

Web 2.0 casera: instalación de un servidor web Apache

Volvemos al tajo!

Con motivo de un curso sobre Web 2.0 que estoy iniciando estos días, nos han pedido preparar el entorno para trabajar durante el mismo, que ahora en los comienzos consiste en instalar un servidor web en nuestro ordenador.

Es demasiado sencillo.


1. Descargar los archivos de instalación del servidor

En el curso nos han recomendado el servidor HTTP Apache por ser de libre distribución, de modo que no nos rompemos la cabeza escogiendo un servidor web y descargaremos la versión más estable desde http://httpd.apache.org/.

Nota: En la web de Apache se explicarán diferentes requisitos y conocimientos previos dependiendo de nuestras circunstancias. Es muy importante el sistema operativo sobre el que se instalará. En nuestro caso será Windows Vista por lo que no necesita apenas preparativos.

- Descargar versión httpd-2.2.17-win32-x86-openssl-0.9.8o.msi.

2. Ejecutar el archivo descargado


El archivo .MSI es un ejecutable, de modo que lo ejecutamos haciendo doble click sobre él.
Se nos abrirá el asistente de instalación:

- Presionamos en Next

- Aceptamos los términos de uso y presionamos sobre Next


- Presionamos de nuevo sobre Next


- Rellenamos los campos tal y como se muestra en la imagen, con la dirección local localhost. En el futuro intentaremos instalar el servidor de forma que responda sobre un dominio, pero de momento y para hacer nuestras pequeñas pruebas lo configuraremos así.
También indicar la dirección email del Administrador del servidor, que pondremos una nuestra cualquiera.
En la sección inferior nos pide configurar el puerto en el que dará las respuestas el servidor, que lo dejaremos en lo recomendado del puerto 80.

EDICIÓN: Con el post Ejecutar Apache como un servicio vemos el funcionamiento si cambiamos la opción del puerto

Y presionamos sobre Next

- Dejamos marcada la opción Typical, que instalará la configuración típica y presionamos sobre Next

- En la siguiente pantalla nos muestran la ruta donde se instalarán los archivos. Dejamos la que viene por defecto y presionamos sobre Next


- Presionamos sobre el botón de Install

- Empezará el proceso de instalación y deberemos esperar unos pocos minutos. Al principio puede que tarde en aparecer algun avance en la barra de progreso.


- Tras unos minutos se nos mostrará ésta pantalla indicando que Apache HTTP Server 2.2.17 se ha instalado correctamente. Presionamos sobre el botón de Finish.


3. Arrancar el servidor

Despues de la instalación, el servidor Apache no solo estará instalado sino que ya estará ejecutándose.
Podremos comprobarlo observando los procesos iniciados:


- Presionamos botón derecho sobre él y seleccionamos Open Apache Monitor.



- Se nos abrirá el monitor del servidor, donde podremos detenerlo, reiniciarlo, observar los servicios que se están ejecutando o bien cerrar el servidor.


4. Comprobar que funciona

Habíamos indicado al servidor durante su instalación que resolviera a la máquina local y sobre el puerto 80, por lo tanto abriremos un navegador e introduciremos la siguiente url:

http://localhost:80/

Nota: funcionará tambien sin introducirle el puerto, pero es recomendable acostumbrarse a indicarlo, ya que en el futuro modificaremos estos parámetros.


- El navegador mostrará un mensaje de alivio, donde se demuestra que el servidor funciona correctamente.


Y listo!

jueves, 14 de octubre de 2010

Te lo debo ...


Te echo tanto de menos ...
Mi bebito. Mi Kalel