Archivo

Archivo para Noviembre, 2010

La importancia de conocer atajos de teclado en nuestro IDE/Editor favorito

Lunes, 29 de Noviembre de 2010 Gaspar Fernández Sin comentarios

Siempre aconsejo a alguien que esté aprendiendo a programar que lo primero es sentirte bien con el entorno o IDE que manejas. A veces, en muchos centros de enseñanza se impone un entorno, por ejemplo Dev-Cpp o Borland C, pero cuando nos toca ponernos a programar algo en serio, ya sea para nosotros o para trabajar lo primero es elegir un IDE con el que nos encontremos cómodos.

Tanto para personas que están empezando como para expertos suelo hacer que prueben alguno de estos tres: Eclipse, Netbeans o Code::Blocks y que echen un rato intentando familiarizarse con el entorno, sus caprichos y su metodología.

Aunque si ya es importante familiarizarse con el entorno, ahora tenemos que hacer que valga la pena estar programando con un IDE frente a un editor de texto plano. Los IDEs tendrán muchas opciones que nos facilitarán la tarea como programadores, por ejemplo, lo primero que destacamos es que la mayoría de ellos colorean el código que escribimos; es posible que a algunas personas (conozco algún ejemplo) odien que aparezca el código en colores, incluso no lo entiendan; pero es una de las grandes herramientas que tenemos para detectar errores de un vistazo y para saber si una palabra es función/variable/texto/etc.

Pero a medida que vamos programando, tenemos la necesidad de hacer las cosas más rápido, y para ello están los atajos de teclado, por ejemplo:

  • Compilar un programa o ejecutarlo (aunque tengamos un botón para eso, tardamos mucho más tiempo en coger el ratón y hacer click que en pulsar una tecla o una combinación).
  • Copiar/cortar/pegar/salvar, es una tarea muy común, aunque no sea específica de programación, pero aún veo programadores experimentados que hacen click con el derecho o buscan el menú editar y escogen la opción que necesitan. Lo más común aquí es Control+X (cortar), Control+C (copiar), Control+V (pegar), Control +S (salvar), aunque depende del editor.
  • Auto-indentado, también llamado auto-anidado, auto-sangrado y nos permite insertar espacios o tabulaciones delante de cada línea para el correcto sangrado de cada línea de código; en ocasiones cuando copiamos o analizamos código de diversas fuentes, tal vez no esté correctamente indentado, también nos puede valer, en el proceso de aprendizaje, para ver cómo sería la forma correcta.
  • Alineado automático. A veces separamos la inicialización de un array, o los argumentos que pasamos a una función en varias líneas, pero queremos que queden todos alineados. Algunos lo hacen automáticamente, otros necesitan pulsar una tecla o elegir una opción. A veces es la misma que el auto-indentado.
  • Búsqueda de texto. Es importante localizar rápidamente un texto (variable, función, macro, etc) dentro de nuestro código y luego regresar al punto donde estábamos.
  • Ir a una línea determinada. El hecho de dirigirnos a una línea determinada es importante a la hora de ver los errores producidos y a la hora de comentar el código con otras personas
  • Comentarios automáticos. Una buena opción cuando se trata de comentar una región de texto o introducir comentarios al lado de una línea de código ya escrita.
  • Rellenado automático. Muchos IDEs permiten completar automáticamente lo que queremos escribir gracias a lo que ya hemos escrito o a los archivos / librerías que incluimos, esto nos ayuda a escribir menos y hacerlo todo más rápido.
  • División de pantalla. Algunos IDEs permiten dividir la pantalla y editar varios ficheros a la vez, o varias zonas de un mismo archivo.
  • Borrado de texto. En ocasiones nos hace falta borrar una línea entera o una palabra. Podemos seleccionar y borrar, aunque a veces lo podemos hacer con una sola pulsación de teclado.
  • Navegación de texto. Es importante familiarizarnos con las teclas Av-pag (Page Up), Re-pag (Page Down), Inicio, Fin, las flechas, y esto nos vale tanto para navegar como seleccionar texto; aunque en ocasiones, en muchos sistemas podemos utilizar Control para modifcar el comportamiento de estas, por por ejemplo, lo más común es:
    • Control + (izq/der): Navegamos entre palabras
    • Control + (arriba/abajo): Navegamos entre bloques de texto (párrafos)
    • Control + Inicio: Inicio del documento
    • Control + Fin: Fin del documento

En muchos casos no he incluido las teclas en cuestión ya que depende del IDE utilizado. Al principio puede que gastemos un tiempo investigando las teclas rápidas (muchos IDEs nos dicen la tecla rápida cuando vamos a acceder a la opción vía menú o vía comando), y tal vez al principio cuando las empezamos a usar también nos cueste trabajo, pero a la larga ahorraremos tiempo y programaremos mucho más cómodamente.

Curioso e interesante V: Windows phone VS SD, Cubo en 3D con HTML5+CSS3,Curiosidades de la sangre, número PI y frigoríficos linuxeros y más

Sábado, 27 de Noviembre de 2010 Gaspar Fernández 2 comentarios

TradeDoubler se hacen los suecos [OFFTOPIC]

Jueves, 25 de Noviembre de 2010 Gaspar Fernández Sin comentarios

Llevo un par de Offtopics cercanos en el tiempo. Pero me ha parecido el momento para publicar un extraño caso con una campaña de TradeDoubler.

Hace casi 3 años (Diciembre de 2007) contraté para mi cuenta de TradeDoubler la campaña de ING - Cuenta naranja, por la cual ganaría unos 40€ por cada persona que contratara una cuenta naranja accediendo desde el enlace de mi web. Y fueron dos personas cercanas a mí las que decidieron crear una cuenta naranja, yo les pedí que lo hicieran con el enlace de mi web y estuve en todo momento supervisando cada registro, por lo que se realizó correctamente; hasta el último paso, en el que tras pulsar Finalizar, la página de ING daba un fallo inesperado que ni siquiera estaba integrado en el estilo de la página, para uno de ellos fue un fallo de permisos en un archivo .txt; para otro de los registros fue un fallo del sistema sin mucha información.

Al principio pensé que los registros no habrían entrado, aunque al intentar registrarse por segunda vez, ING Direct decía que ya figuraban en el sistema; por lo que desde ese momento (14 de enero de 2008) estuve enviando mensajes a TradeDoubler avisando del problema y preocupándome por el tema.

A los pocos días, las dos cuentas naranja de ING Direct estaban activas (los titulares recibieron los contratos, los volvieron a remitir firmados y estaban operando con ellas), por lo que problema de registro no era, todos los datos estaban en regla; por tanto envié más mensajes a TradeDoubler.

Desde la empresa de afiliación (TradeDoubler), sólo me daban largas y me decían que tenían que verificar sin respuesta (siempre me decían que como mucho en una semana me dirían algo), y tras esperar uno o dos meses volvía a mandar otro mensaje.
Me pidieron que reenviara los mensajes varias veces, querían tener todos los emails mandados e incluso me pidieron que escaneara y les enviara los contratos de los titulares de las cuentas naranja para que los verificaran. Ellos tienen en su poder toda esa información.

Como detalle, he de decir, que hablando por teléfono con varios departamentos de ING Direct, me dijeron que no sabían nada de esa empresa de publicidad, ni les sonaba, pero bueno, siempre me decían que tenían tantas campañas abiertas que no me lo aseguraban, pero bueno.

Los de TradeDoubler me han demostrado que no tienen seriedad, y aunque la fachada es muy positiva (tienen muchas campañas, permiten elegirlas, es buena en apariencia tanto para empresas como para webmasters), la realidad no es como debería porque yo supervisé dos registros, pero me imagino la cantidad de registros no supervisados que habrán dejado de contabilizar. En definitiva, el sistema TradeDoubler no funciona.

Los países que más colaboran con GNU

Martes, 23 de Noviembre de 2010 Gaspar Fernández 4 comentarios

Le esto: GNU Contributor Statistics for November 2010 y me pareció curioso crear un ranking con los 15 países que más colaboran:

Country Contributors % contr
USA 1308 28,0386
Germany 654 14,0193
France 360 7,7170
UK 208 4,4587
Canada 207 4,4373
Japan 196 4,2015
Sweden 178 3,8156
Australia 144 3,0868
India 127 2,7224
Netherlands 113 2,4223
Italy 109 2,3365
Russia 95 2,0364
Austria 88 1,8864
Spain 84 1,8006
China 79 1,6935

Como vemos, En España estamos en 15º. Ahora se me ocurrió ampliar esta información añadiendo la población estimada para 2010 de cada uno de los países. Extraída de Wikipedia. Y obtengo la siguiente lista de países (He excluído Luxemburgo, Lietchtenstein, Montenegro e Islandia por tener menos de un millón de habitantes y atentar con fastidiarme la estadística, por tener mucho porcentaje de colaboración por habitante):

Country Contributors Population 2010 Contributors / Pop (ppm) % contr
Sweden 178 9.401.925 18,9323 3,8206
Austria 88 8.396.760 10,4802 1,8888
Denmark 58 5.557.709 10,4360 1,2449
Slovenia 20 2.058.400 9,7163 0,4293
Norway 44 4.911.800 8,9580 0,9444
Germany 654 81.802.000 7,9949 14,0373
New Zealand 35 4.388.100 7,9761 0,7512
Ireland 32 4.470.700 7,1577 0,6868
Netherlands 113 16.629.600 6,7951 2,4254
Finland 36 5.374.600 6,6982 0,7727
Australia 144 22.534.000 6,3903 3,0908
Canada 207 34.323.000 6,0309 4,4430
Israel 44 7.653.600 5,7489 0,9444
Switzerland 44 7.782.900 5,6534 0,9444
France 360 65.447.374 5,5006 7,7270

Es esta tabla, en españa estamos los 25º, siendo más de 60… no está mal.

Dejo el archivo en formato ODS aquí (19Kb)

Fallo al actualizar pango en Gentoo

Lunes, 22 de Noviembre de 2010 Gaspar Fernández Sin comentarios

Es una tontería, pero a mí me llevó un rato darme cuenta. Tengo mi ordenador de trabajo bastante desactualizado y suelo tener versiones estables de casi todo el software; aunque iba a actualizar gtkmm, que tenía una versión un poco antigua, y ya sabemos… una dependencia lleva a otra, y me encontré que pango no terminaba el emerge.

Tras un rato mirando logs, descargarme la última versión de pango desde el código fuente y ver que el configure y el make los hace correctamente, me da por observar que en gentoo se introducen varios parches al código fuente y luego se genera otro configure. Finalmente me dió por actualizar autoconf y a partir de ahí todo fue sobre ruedas.

Por tanto, después de el rollazo que acabo de soltar, sólo tenemos quehacer:

$ emerge autoconf

Instalando el parche milagroso para linux [ SCHED_AUTOGROUP ]

Jueves, 18 de Noviembre de 2010 Gaspar Fernández 3 comentarios

Hace unos días se publicó la noticia de un parche milagroso que aumentaba el rendimiento de Linux en el escritorio en varios medios. Este parche mejoraba el planificador de tareas haciendo que nuestra experiencia de usuario sea más fluida, especialmente cuando estamos ejecutando muchas cosas al mismo tiempo.

Bien, he querido hacer una pequeña guía de instalación del parche. Aunque está hecha en Arch Linux es fácilmente adaptable a cualquier distribución:

Descargar y preparar un kernel actualizado

El parche está pensado para la versión 2.6.36 y aunque seguro que es posible instalarlo en una versión más antigua (en mi ordenador principal tengo una 2.6.25 y hay que liarla, ya que el parche necesita muchas características  de versiones más nuevas)

Lo primero es crear en nuestro home (~) un directorio para hacer todo el proceso, por ejemplo linuxplay (muchos prefieren descargar y compilar en kernel en /usr/src (y también es la Gentoo way), pero vamos a intentar pasar el mayor tiempo posible como usuario y el menor tiempo como root:

~$ mkdir linuxplay

Para descargar la última versión (Noviembre 2010), la 2.6.36:

~$ cd linuxplay

~/linuxplay $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2

Cuando terminemos de descargarlo, lo descomprimimos:

~/linuxplay $ tar xvjf  linux-2.6.36.tar.bz2

Ya tenemos el código fuente de Linux descomprimido y ahora tenemos que crear una configuración similar a la que tenemos, pero en el nuevo kernel:

# Entramos en el directorio donde se ha descomprimido el kernel

~/linuxplay $ cd linux-2.6.36

# Hacemos limpieza de configuraciones anteriores, si acabamos de descargar el kernel no hace

# falta, pero más vale prevenir.

~/linuxplay/linux-2.6.36 $ make mrpropper

# Copiamos la configuración anterior del kernel… puede que algunas distribuciones no nos

# dejen hacer esto, debemos mirar en el manual, o buscar el archivo de configuración, tal vez en /boot/

~/linuxplay/linux-2.6.36 $ zcat /proc/config.gz > .config

Descargar, adaptar y parchear el kernel

Primero bajamos el parche desde aquí: Versión 3 Nov 2010 y lo copiamos en ~/linuxplay/linux-2.6.36/ (el archivo se llama RFC-RFT-v3-sched-automated-per-tty-task-groups.patch).

Esto depende del kernel y además es optativo. El parche debe modificar el archivo drivers/tty/tty_io.c y, por ejemplo, yo lo tengo en drivers/char/tty_io.c por lo que, aunque al aplicar el parche nos iba a preguntar dónde está el archivo, podemos, con sed, decírselo desde ahora.

~/linuxplay/linux-2.6.36 $ sed -i ’s/drivers\/tty\/tty_io/drivers\/char\/tty_io/p’ RFC-RFT-v3-sched-automated-per-tty-task-groups.patch

Ok, vamos a aplicar el parche:

~/linuxplay/linux-2.6.36 $ patch -p1 < RFC-RFT-v3-sched-automated-per-tty-task-groups.patch

Configurar el nuevo kernel

~/linuxplay/linux-2.6.36/ $ make localmodconfig

Esta línea configurará el nuevo kernel como el que ya tenemos, y nos preguntará por novedades optativas que podemos instalar, cuando veamos SCHED_AUTOGROUP decimos que sí, o Y.

También podemos hacerlo de forma más artesana:

~/linuxplay/linux-2.6.36/ $ make oldconfig

~/linuxplay/linux-2.6.36/ $ make menuconfig

Pero de esta forma, tendremos que buscar las novedades a mano, SCHED_AUTOGROUP estará en General.

Compilar el kernel

~/linuxplay/linux-2.6.36/ $ make

# y como root (en Ubuntu o derivadas, podemos usar sudo)

~/linuxplay/linux-2.6.36/ $ make modules_install

Instalar el kernel

Para instalarlo podemos hacerlo de varias maneras, a veces con make install nos vale, pero si queremos controlar el proceso, lo hacemos a mano como dice a continuación (los nombres de archivos pueden variar)

# Donde pone x86 lo mismo puede ser x86_64 dependiendo de vuestra arquitectura

~/linuxplay/linux-2.6.36/ $ cp arch/x86/boot/bzImage /boot/vmlinuz-2.6.36

~/linuxplay/linux-2.6.36/ $ cp System.map /boot/System.map-2.6.36

# Donde pone 2.6.36-ARCH es la versión de vuestro kernel, depende también de la distribución.

# pero una forma fácil de sacarla es hacer: ls /lib/modules/

~/linuxplay/linux-2.6.36/ $ mkinitcpio -k 2.6.36-ARCH -g /boot/kernel26-2.6.36.img

Ok, sólo falta hacer una entrada en vuestro gestor de arranque, aquí muestro un ejemplo para Grub 0.97:

# Como root (o con sudo), y con vuestro editor favorito: nano, emacs, gedit, vi…

~/linuxplay/linux-2.6.36/ $ nano /boot/grub/menu.lst

Necesitamos añadir estar líneas, antes del primer title que encontramos, pero lo mejor que podemos hacer es copiar exactamente las líneas de un kernel que funcione ahora mismo, por ejemplo:

# For booting GNU/Linux
title  GNU/Linux (2.6.35)
root (hd0,0)
kernel /boot/vmlinuz-2.6.35 root=/dev/disk/by-uuid/12345678-9abc-def0-1234-56789abc123456 ro
initrd /kernel26-2.6.35.img

Bien, tenemos que añadir un bloque parecido, y cambiar los datos que vienen por los nuevos; manteniendo el anterior en una línea más abajo podemos cargar el kernel antiguo si algo va mal.

# For booting GNU/Linux
title  GNU/Linux (2.6.36) Parche SCHED_AUTOGROUP
root (hd0,0)
kernel /boot/vmlinuz-2.6.36 root=/dev/disk/by-uuid/12345678-9abc-def0-1234-56789abc123456 ro
initrd /kernel26-2.6.36.img

Guardamos los cambios, reiniciamos y a correr… a reproducir  películas y compilar programas al mismo tiempo que movemos las ventanas sin sentido :)

[ OFFTOPIC ] Acuista y su obsesión con la transferencia de datos

Jueves, 18 de Noviembre de 2010 Gaspar Fernández Sin comentarios

Veo en la web de Acuista buscando calefactores, que ahora en invierno se agradecen lo siguiente:
acuista
Y es que parece ser que en la web, cuando algo no saben cómo se mide, le ponen MB/s, y cuando algo tiene 2000MB/s de potencia… asusta.

En fin, es sólo una broma

¡Una mejora sustancial del rendimiento de Linux!

Miércoles, 17 de Noviembre de 2010 Gaspar Fernández 2 comentarios

Veo en MuyLinux la noticia de la publicación de un parche milagroso de Mike Galbraith para el kernel.

Es una pequeña modificación en la planificación de tareas que acelera el rendimiento del sistema sobre todo en equipos de escritorio.

El parche es para el kernel 2.6.36 y posiblemente se incluya en la versón 2.6.38; es muy difícil echarlo a andar si tienes una versión inferior.

Para más información: Phoronix, Patchwork.kernel.org.

El parche en su tercera versión podemos descargarlo directamente desde aquí.

Categories: General Tags:

Petición a Adobe para que porte Adobe CS a Linux

Martes, 16 de Noviembre de 2010 Gaspar Fernández Sin comentarios

Sé que no es gran cosa, y que al final Adobe hará lo que le dé la gana. Pero es cierto que muchas personas se sienten atadas a Windows por la posibilidad de utilizar el software de Adobe y que no pueden utilizarlo de otro modo. No hablo de Mac, porque hasta la fecha no conozco a nadie que esté atado a un Mac, por lo general están todos encantados.

Bien, vía MuyLinux publico también este enlace aquí: Produce Creative Suite for Linux.

Hace mucho leí que se lo estaban planteando, lo mismo era un rumor, lo que está claro es que no será software libre, pero sería una gran apuesta que seguro que nos traerá bastantes usuarios a nuestro sistema operativo favorito.

Categories: General, Linux Tags: , , ,

Now playing… para mplayer

Domingo, 14 de Noviembre de 2010 Gaspar Fernández Sin comentarios

screenshot-14-11-2010-201150Se trata de un script para bash que representará en pantalla información del archivo que se está reproduciendo al mismo tiempo que este se visualiza. Perfecto para un sistema mediacenter.

Requerimientos:

  • bash >=3.0
  • mplayer
  • xosd
  • utilidades de sistema utilizadas: date, sed, tr, cut, sleep

Entre sus características destaca la escritura de un archivo: $HOME/.videolog con los archivos que se reproducen. Uno de los posibles usos es la descarga de muchos vídeos de youtube en un directorio concreto, posterior visualización y borrado de cada uno de los archivos tras su visionado.

Además, si el archivo de audio o vídeo a reproducir contiene metadatos de Artista y Título, se visualizará la información de estos metadatos siempre que no estén en la lista negra (variable $ARTISTAS_PROHIBIDOS), en otro caso visualizaremos el nombre del archivo arreglado (eliminando las cadenas que aparecen en la variable FILENAME_RECORTADO, aquí podemos incluir extensiones o pequeñas anotaciones sobre la calidad o resolución de un vídeo).

Se recomienda modificar XOSD_OPTIONS_ARTISTA, XOSD_OPTIONS_TITULO, XOSD_OPTIONS_INFO y XOSD_OPTIONS_DURACION de acuerdo a los tipos de letra, colores y todo lo que se desee. Dejo una pequeña referencia de las opciones de osd_cat:

–pos Posición del texto: top(arriba), middle(en medio de la pantalla), bottom(abajo)
-A Alineación del texto: left(izquierda), center(centrado), right(derecha)
-c Color: puede ser en notación html #rrggbb o por su nombre
-s Offset o desplazamiento de la sombra
-o Offset o desplazamiento desde la parte superior o inferior de la pantalla
-d Tiempo en segundos que se mantendrá el texto en la pantalla
-f Tipo de letra. Para ver los tipos de letra disponibles ejecutar xfontsel.

Inicio del archivo: mplayernp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#!/bin/bash

##########################################################################
#
# MPLAYER NOW PLAYING version 0.1
# Copyright (C) 2010 by Gaspar Fernández <gaspy at totaki.com>
# http://totaki.com/poesiabinaria
#
##########################################################################

#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License.

#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.

#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.

XOSD_OPTIONS_ARTISTA="--pos=bottom -A left -c #fff -o -110 -s 2 -d 10 -f -*-utopia-*-*-*-*-*-520-*-*-*-*-*-*"
XOSD_OPTIONS_TITULO="--pos=bottom -A left -c #fff -o -100 -s 2 -d 10 -f -*-utopia-*-*-*-*-*-420-*-*-*-*-*-*"
XOSD_OPTIONS_INFO="--pos=bottom -A left -c #fff -s 2 -o -80 -d 10 -f -*-utopia-*-*-*-*-*-320-*-*-*-*-*-*"
XOSD_OPTIONS_DURACION="--pos=bottom -A left -c #fff -s 2 -o -60 -d 10 -f -*-utopia-*-*-*-*-*-220-*-*-*-*-*-*"

# Si precalculamos esto, damos velocidad
ESCAPE=`echo -e "\e"`

ARTISTAS_PROHIBIDOS=("virtualdub")
FILENAME_RECORTADO=(".avi" ".flv" ".mp3" ".mp4")

function print_info()
{
    artist="$1"
    title="$2"
    filename="$3"
    width="$4"
    height="$5"
    fps="$6"
    minutos="${7/./,}"      # Si nuestra locale es es_ES debemos sustituir puntos por comas
    segundos="${8/./,}"
    if [[ -n $artist ]]
    then
    artist_text=${info_val[$artist]}
    for proh in ${ARTISTAS_PROHIBIDOS[*]}
    do
        if [[ `echo $artist_text | tr [:upper:] [:lower:]` =~ $proh ]]
        then
        artist="";
        title="";
        break;
        fi
    done
    fi

    if [[ -n $artist ]]
    then
    echo $artist_text | osd_cat $XOSD_OPTIONS_ARTISTA &
    fi
    if [[ -n $title ]]
    then
    title_text=${info_val[$title]}
    echo $title_text | osd_cat $XOSD_OPTIONS_TITULO &
    else
    # Si no tenemos la codificación correcta configurada, esto puede saltar
#   fname=`basename "$filename"`
#   dname=`dirname "$filename"`
#   defname=`ls "$dname/$fname"*`
#   defname=`basename "$defname"`
    defname=`basename "$filename"`
    for recorte in ${FILENAME_RECORTADO[*]}
    do
        defname=${defname/$recorte/}
    done
    echo $defname | osd_cat $XOSD_OPTIONS_TITULO &
    fi
    if [[ -n $fps ]]
    then
    echo $width"x"$height"@"$fps | osd_cat $XOSD_OPTIONS_INFO &
    fi
    duracion=`printf "%1.0f:%1.0f" "$minutos" "$segundos"`
    echo $duracion | osd_cat $XOSD_OPTIONS_DURACION &

    echo "`date +"%d/%m/%Y %H:%M"` Media: $filename Dur: $duracion" >> $HOME/.videolog

}

function keyvalue()
{
    key=`echo "$1" | cut -d= -f1`
    value=`echo "$1" | cut -d= -f2`

    res[0]=$key;
    if [[ -n $value ]]
    then
    res[1]=$value;
    else
    res[1]="0";
    fi

    if [[ -n `echo $key | grep "ID_CLIP_INFO_NAME\|ID_CLIP_INFO_VALUE"` ]]
    then
    # Si tenemos un ID_CLIP_INFO_NAMEx o ID_CLIP_INFO_VALUEx extraemos el x
    info=(`echo $key | sed -n -e "s/\([a-zA-Z_]*\)\([0-9]*\)/\1\n\2/p"`)
   
    res[0]=${info[0]}
    res[2]=${info[1]}
    fi
    echo -e ${res[0]}"\n"${res[1]}"\n"${res[2]}"\n"


}

function tituladora()
{

artist="";
title="";
while read -n 200 dato 
do
    if [[ -n `echo $dato | grep ID_` ]] # Extraemos información de mplayer
    then
    OLD_IFS=$IFS;
    IFS="
"
;
    kval=( `keyvalue $dato` );
#   echo ${kval[0]} "********"
    IFS=$OLD_IFS

    case ${kval[0]} in
        "ID_FILENAME")
        filename="${kval[1]}"          
        ;;
        "ID_VIDEO_WIDTH")
        width=${kval[1]}
        ;;
        "ID_VIDEO_HEIGHT")
        height=${kval[1]}
        ;;
        "ID_VIDEO_FPS")
        fps=${kval[1]}
        ;;
        "ID_LENGTH")
        seconds=${kval[1]};
        # Extrae la duración en minutos y segundos
        duration=( `echo "scale=0; $seconds / 60; scale=0; $seconds % 60" | bc` )
        ;;
        "ID_CLIP_INFO_NAME")
        if [[ `echo ${kval[1]} | tr [:upper:] [:lower:]` == "artist" ]]
            then
#           echo "ARTISTA CAPTURADO "${kval[2]};
            artist=${kval[2]} # Donde encontramos el artista
        else
            if [[ `echo ${kval[1]} | tr [:upper:] [:lower:]` == "title" ]]
            then
            title=${kval[2]} # Donde encontramos el artista
#           echo "TITULO CAPTURADO"
            fi
        fi
        ;;
        "ID_CLIP_INFO_VALUE")
        # Almacenamos el valor obtenido
#       echo "ALMACENO EN "${kval[2]} "ESTO" ${kval[1]} "**" ${kval[0]} ${kval[2]} = ${kval[1]}
        info_val[${kval[2]}]="${kval[1]}"
        ;;
    esac
#   echo ${info_val[@]}
    else
    # Si encontramos caracteres de control....
    if [[ $dato =~ $ESCAPE ]]
    then

        # Tal vez podamos comentar esto para dar velocidad --- INICIO
        if [[ $dato =~ "Position" ]]
        then       
        printf "%s\n" "$dato"
        else
        printf "%s" "$dato"
        fi
        # Tal vez podamos comentar esto para dar velocidad --- INICIO
    else
        if [[ ${dato:0:3} == "AO:" ]] # Aquí empieza el Audio... saltaremos tanto para archivos de audio como
                                      # para vídeos / películas... que también tengan audio
        then
        # Empieza la reproducción
        sleep 1 && print_info "$artist" "$title" "$filename" "$width" "$height" "$fps" "${duration[0]}" "${duration[1]}"
        fi

        echo $dato;
    fi
    fi
done
}
mplayer -identify $@ | tituladora

Por último, para utilizar este programa, podemos crear un alias a mplayer:

alias mplayer=”mplayernp”

Para finalizar dejo algúnos ejemplo de uso (son válidos también para mplayer, ya que mplayernp pasa los comandos tal cual a mplayer:

1
2
# Para reproducir archivos dentro de un directorio con orden aleatorio y en pantalla completa
mplayernp -fs `ls /directorio/*.avi | sort -R`

Vídeo de la foto: El Hombre de Negro - Greenfield

Visita otras webs de la red