jul 072012
 

Parar temporalmente el servidor X

En ocasiones puede ser necesario trabajar en nuestro ordenador Debian con el servidor X parado, como por ejemplo cuando deseamos instalar un nuevo driver gráfico. Para parar el servidor:

  1. Cerramos la sesión gráfica seleccionando en el menú superior “System->Logout”
  2. Pulsamos Ctrl+Alt+F1. Con esto, finalizamos el servidor X y pasamos a una pantalla alfanumérica, pero el gestor de ventanas todavía está ejecutándose
  3. Hacemos login como root, y ejecutamos el comando “/etc/init.d/gdm3 stop”. Si el gestor de ventanas que utilizamos fuera otro, deberemos sustituir “gdm3″ por el nombre script correspondiente (“gdm”, “kdm”, fdm”,etc…)

Ejecutar de nuevo servidor X

Para volver a arrancar el servidor X y el gestor de ventanas, ejecutamos el mismo comando que en el punto 3, con el argumento “start”. p.ej., “/etc/init.d/gdm3 start”

Cómo impedir que se ejecute el servidor de ventanas en el arranque del sistema

Si lo que queremos es inhabilitar de manera más permante el servidor X, podemos impedir que se ejecute en el arranque del sistema con el comando:

# update-rc.d -f gdm3 remove

de nuevo, debemos sustituir gdm3 por “gdm”, “kdm”, “xdm”,… según seal el windows manager instalado en nuestro sistema.

Para arrancar manualmente el servidor X, hacemos login como root y ejecutamos el comando “/etc/init.d/gdm3 start”

Y para volver a configurar el servidor X para que se arranque durante el arranque del sistema:

# update-rc.d -f gdm defaults
 Publicado por en 11:38 am
jul 052012
 

( Read this post in english )

En este artículo vamos a ver cómo se puede definir en nuestra página web un área en la que el usuario puede dibujar formas con el ratón. Después, la imagen dibujada puede ser enviada al servidor para que la procese de la forma que se desee. Esta funcionalidad la utilizaremos en nuestro diccionario mandarín-español para permitir al usuario escribir con el ratón el símbolo hanzi que desea localizar. Para este propósito necesitaremos también utilizar un software de reconocimiento de caracteres (OCR) con soporte para chino simplificado, que comentaremos en un próximo artículo. Seguir leyendo »

 Publicado por en 8:55 am
jul 022012
 

(Read this post in english)

1. Generar una clave del API de Google Maps

Google Maps V3 puede ser utilizado en modo anónimo, sin necesidad de una clave del API. En este caso, Google establece un límite de 25.000 visualizaciones de mapa por día y por dominio.
Pero utilizar una clave del API de Google maps es aconsejable: no tiene ningún inconveniente, y por otra parte tiene la ventaja de darnos acceso a las estadísticas  de uso recogidas por Google.

Seguir leyendo »

 Publicado por en 9:43 pm
jun 282012
 

En este artículo vamos a exponer los distintos procedimientos que podemos emplear para incorporar un vídeo o audio a una página web en general, y a un artículo de un blog de wordpress en particular. Durante la exposición, intentaremos explicar los conceptos que intervienen y las consideraciones que hay que tener en cuenta para llevar a cabo esta tarea.

Caso 1. Añadir un vídeo de YouTube a un artículo de WordPress.

Supongamos que estamos viendo en nuestro navegador web un vídeo de Youtube que nos gustaría incluir en uno de nuestros artículos.
En la barra de direcciones del navegador aparece la url:

http://www.youtube.com/watch?v=aC8CxfJHTLk&feature=related

Para incluir el vídeo en un artículo de nuestro blog, basta con copiar dicha url, y pegarla como una nueva línea del artículo (ni siquiera es necesario definir un enlace):

WordPress reconoce automáticamente la url, y genera el código HTML necesario para visualizar el vídeo en nuestro artículo, cambiando la escala para ajustar la anchura del vídeo a nuesta página:

Si queremos tener un poco más de control, podemos utilizar el “shortcode” embed, con el que podemos especificar la anchura y altura con la que queremos que aparezca el vídeo:

[embed width="300" height="200"]…[/embed]


Los valores de width y height que especificamos son valores máximos.

En nuestro ejemplo, si examinamos el código html que genera wordpress, vemos que el vídeo se incluye en un iframe con dimensiones (267, 200), ya que en este caso el límite lo impone la altura máxima de 200 pixels:

<iframe width="267" height="200" 
        src="http://www.youtube.com/embed/aC8CxfJHTLk?fs=1&feature=oembed" 
        frameborder="0" allowfullscreen>
</iframe>

Caso 2. Añadir un vídeo que se encuentra almacenado en nuestro servidor

El caso que hemos comentado anteriormente es el más sencillo, pero depende de unos datos que se encuentran almacenados en otro servidor, y que podrian dejar de estar disponibles sin previo aviso.

También puede darse el caso de que nosotros hayamos generado directamente contenido multimedia (video o audio), y queramos servirlo directamente desde nuestro servidor.

En este caso podemos hacer uso de un plugin. Hay numerosos plugins disponibles para esta tarea. Nosotros vamos a utilizar para este artículo el plugin “JW Player for WordPress”

Una vez instalado el plugin, colocamos el siguiente shortcode en nuestro artículo:

[jwplayer file=http://blog.openalfa.com/myvideo.flv] (vídeo en formato flash)

y obtenemos el siguiente resultado:

[jwplayer file=http://blog.openalfa.com/myvideo.flv image=http://blog.openalfa.com/wp-content/uploads/2012/06/video-chino-preview.png]

Y especificando un vídeo en formato mp4:
[jwplayer file=http://blog.openalfa.com/oceans-clip.mp4]

[jwplayer file=http://blog.openalfa.com/oceans-clip.mp4 image=http://blog.openalfa.com/wp-content/uploads/2012/06/video-chino-preview.png]

Insertando video en HTML5, con soporte flash para navegadores antiguos

Como hemos visto, JW Player permite especificar un fichero mp4 para ser utilizado por un navegador con soporte para HTML5.

Pero actualmente, el soporte de HTML5 que ofrecen los distintos navegadores (IE9, Firefox, Chrome, Safari, etc.) es muy variable (ver http://en.wikipedia.org/wiki/Open_videohttp://www.w3schools.com/html5/html5_video.asphttp://html5video.org/wiki/HTML5_Player_Comparison).

En particular, no es suficiente con que el vídeo esté en formato mp4, sino que además hay que asegurarse de que los codecs de video y audio que utiliza están soportados por el navegador. La siguiente tabla muestra el soporte a los distintos tipos de codecs de video (ogg, h.264 y webm) que ofrecen los principales navegadores en 2012

 

Browser Video format
Ogg Theora H.264 WebM / VP8
Firefox Soportado será soportado Soportado
Chrome Soportado Puede ser retirado Soportado
Opera Soportado No soportado Soportado
IE 7/8 no soporta el tag <video> no soporta el tag <video> no soporta el tag <video>
IE 9 No soportado Soportado Soportado
(instalando el codec webm para IE9)
Safari No soportado Soportado No soportado

 

La manera de solucionar este problema en html5 es especificar varios ficheros en distintos formatos dentro de un mismo tag “<video>”. El navegador utilizará el primero de ellos que sepa procesar. Pero el shortcode jwplayer no permite especificar distintos ficheros.

Sin necesidad de utilizar un plugin, podemos incluir directamente en el artículo del blog (o en cualquier página web, sea o no de wordpress) el tag <video> de HTML5, como en el siguiente ejemplo:

        <video width="320" height="240" controls="controls">
          <source src="oceans-clip.mp4" type="video/mp4" />
          <source src="oceans-clip.webm" type="video/webm" />
          <source src="oceans-clip.ogv" type="video/ogg" />
              Tu navegador no admite videos en HTML5
        </video>

El problema con este método es que los navegadores antiguos sin soporte para HTML5 no podrán visualizar el vídeo. La solución en este caso es utilizar una vez más un plugin como “VideoJS player for WordPress”, y asignado una clase css al tag <video>. Este plugin carga una librería javascript que determina si el navegador tiene soporte HTML5. si no es así, carga un reproductor flash que es capaz de entender el formato mp4 del vídeo. Instalamos el plugin, y añadimos al tag <video> los atributos id=”testvideo” class=”video-js vjs-default-skin”:

        <video id="testvideo" class="video-js vjs-default-skin" 
                width="600" height="250" controls="controls">
          <source src="/oceans-clip.mp4" type="video/mp4" />
          <source src="/oceans-clip.webm" type="video/webm" />
          <source src="/oceans-clip.ogv" type="video/ogg" />
        </video>

Y obtenemos el siguiente resultado:

Cómo convertir un vídeo a un formato admitido por HTML5

Para incorporar un vídeo a nuestra página web debemos convertir el formato original a los formatos mp4, webm y ogg.

Existen numerosos editores de vídeo open source o comerciales que permiten realizar esta operación. En particular, para este artículo hemos utilizado “Any Video Converter”.

Esta herramienta gratuita es sencilla de utilizar y permite seleccionar directamente como formato de salida los tres tipos de formato de video HTML5

Any Video Converter para generar videos HTML5

 Publicado por en 7:44 pm
jun 272012
 

El telegrama consta de los siguientes campos:

| byte de control | dirección origen | dirección destino | control de protocolo | datos | validación |

byte de control (1 byte ).

El campo de control de paquete se construye como sigue:
bits 7-6: siempre “10″.
bit 5: ’1′, o bien ’0′ si se trata de un reintento.
bit 4: siempre ’1′.
bits 3-2: prioridad.
“00″: funciones del sistema (máxima prioridad).
“01″: funciones de alarma.
“10″: órdenes de alta prioridad.
“11″: órdenes de baja prioridad.
bits 1-0: siempre “00″

El valor más frecuente de este campo es 1011 1100 binario = BC hexadecimal, que corresponde a una orden de baja prioridad.

dirección de origen (2 bytes)

contiene la dirección física del origen del telegrama.

La dirección física tiene una longitud de 16 bits de la forma 4/4/8 (área/línea/componente).
Si el origen de un telegrama es el componente 1 de la línea 1 del área 1, su dirección será:

0001 0001 0000 0001 = 1101 hexadecimal

dirección de destino (2 bytes )

contiene la dirección de grupo del dispositivo al que está destinado el telegrama.

Los dos primeros bytes identificarán los distintos dispositivos a controlar.

Nota: Para la implementación del sistema es necesario establecer la relación de direcciones de grupo de los dispositivos que pueden ser accedidos, así como sus tipos.

control de protocolo

contiene:

NPCI (Network layer Protocol Control Information) (8 bits)

bit 7: tipo de dirección de destino
’0′ dirección física
’1′ dirección de grupo
bits 6-4: contador. Siempre será inicializado a 6 (110 binario). Este valor se decrement cada vez que se atraviesa un acoplador de línea.
bits 3-0: índice EIS de la longitud e de los datos que siguen al campo de control de protocolo

TPCI (Transport layer Protocol Control Information) (6 bits)

normalmente, su valor será 000000 binario

APCI (Application layer Protocol Control Information) (4 bits).

“0000″: read value
“0001″: value response
“0010″: write value
“1010″: memory write

datos

El campo de datos contendrá datos conforme al standard EIS, y su longitud es variable según el tipo de dato:

EIS id EIB function nb bits
1 switching 1
2 dimming 4
3 time 24
4 date 24
5 float value 16
6 scaling 8
7 drive control 1
8 priority 2
9 float value 32
10 16-bit counter value 16
11 32-bit counter value 32
12 access 32
13 ASCII character 8
14 8-bit counter value 8
15 character string ≤ 14

 

 

validación (1 byte)

Contiene los bits de validación de paridad impar de todo el paquete.

 Publicado por en 8:40 am
jun 202012
 

Un repositorio es una pieza importante de un entorno de desarrollo y producción, que permite guardar las distintas versiones que se van generando de cada uno de los ficheros que intervienen en el servicio o producto que se está desarrollando, tanto si son los ficheros que contienen el código fuente, como ficheros de configuración o ficheros de datos.

Seguir leyendo »

 Publicado por en 8:27 pm
jun 192012
 

Los usuarios y administradores de sistemas en entornos Linux trabajan habitualmente en modo linea de comandos, y cuando necesitan acceder a un servidor remoto establecen una sesión alfanumérica mediante el comando ‘ssh’.

Pero en ocasiones, es necesario trabajar con una aplicación gráfica que se ejecuta directamente en la máquina remota, por lo que es necesario establecer una sesión gráfica en un entorno de ventanas, como si se estuviera trabajando en la pantalla gráfica del ordenador remoto.

Seguir leyendo »

 Publicado por en 1:26 pm
jun 152012
 

En numerosos manuales de Perl se recomienda en general trabajar con variables de tipo hash en vez de con arrays. Para hashes, existen las funciones ‘exists’ y ‘defined’, que nos permiten saber si una clave existe en un hash, y si su valor está definido o no, respectivamente.

Pero en ocasiones debemos trabajar con un array (quizá porque estamos modificando un código que existía previamente), y necesitamos saber si un determinado valor existe en el interior del array.

Seguir leyendo »

 Publicado por en 2:17 pm
jun 062012
 

En este artículo vamos a comentar en qué consiste una sesión de usuario, cómo se utilizan los cookies para que el servidor web pueda identificar un acceso como perteneciente a una determinada sesión, y cómo se utiliza este mecanismo en PHP para la validación de un usuario (por ejemplo, para darle acceso a la zona reservada de nuestro servidor).
Seguir leyendo »

 Publicado por en 10:38 am