Reproductor accesible html5

¡Hola!

Hace algunos meses, Salvi Melguizo me pidió que le hiciera un reproductor accesible para su blog, así que como me gusta cacharrear y ganarme un sobresueldo cuando se puede :P, a ello me puse.
Se trata de un script jQuery que, por cada elemento audio de HTML5 de una página, genera un conjunto de controles encima del elemento, que permiten manejar de forma totalmente accesible dicho reproductor.

El reproductor está probado con Internet Explorer 9, 10 y 11, Firefox 42 y 43, Chrome 47 y Safari con iOS 8 y 9. Funciona correctamente con JAWS, NVDA y VoiceOver para MAC e iOS… He de confesar que con window Eyes no lo he probado 😉

Podéis ver
una demo del reproductor accesible aquí.
El reproductor está en español, aunque por defecto el ejemplo está con la traducción al inglés macarrónico (lo he traducido yo), así que si alguien se anima a corregir la traducción, yo encantado.
Podéis colaborar con el proyecto en su repositorio de github, o si solo queréis probarlo, podéis descargar la última versión del proyecto en formato zip.

Sugerencias, críticas constructivas, mejoras… ¡son bienvenidas!

¡Espero que os parezca interesante!

¡Un saludo!

Entrada visitada 470 veces

Atributos HTML condicionales con Razor en MVC 4+

¡Hola!

Haciendo una vista en razor, tenía que pintar unas clases a los elementos li de una lista desordenada en función de algunas condicionales, así que se me ocurrió buscar la forma de poner atributos condicionales sin tener que usar sintaxis rebuscadas o duplicar código con un if dentro del HTML.
Lo que encontré me encantó por su simplicidad: Si usamos una variable nula dentro de un atributo HTML, razor obviará el atributo y no lo escribirá.
Ejemplo:

			<ul>
			@foreach (var modulo in Model.Modulos)
			{
				var claseCSS = (modulo.Completado ? "completed" : modulo.Actual ? "actual" : null);
				<li class="@claseCSS">
					<a href="@modulo.Link">
						@modulo.Titulo
					</a>
				</li>
			}
</ul>

		

Si la cadena tiene algún valor, se pintará la clase correspondiente en el elemento li. Si la cadena está a nulo, el atributo ni se pintará.
¿A que mola? 🙂

¡Nos vemos!

Entrada visitada 296 veces

Cómo mantener procesos en segundo plano entre distintas sesiones de terminal en Linux

¡Hola!

Para comenzar el año, os vengo con un post que no es realmente de programación, sino más bien de administrador de servidores… Pero como últimamente le doy a todo, me ha parecido interesante escribirlo 🙂

El otro día me surgió la necesidad de copiar casi un tera de información entre dos discos duros remotos. ¿cómo hacerlo? Utilizando el comando scp en modo recursivo.

Sin embargo, incluso utilizando el & para dejar el proceso en segundo plano, al desconectarme de forma accidental (se fue la luz en casa), el proceso se paró y tuve que volver a reanudar la copia.

¿Cómo solucionarlo? Existe una herramienta en Linux llamada Tmux. Esta herramienta, nos permite ejecutar varios terminales desde un solo terminal, y movernos entre ellos de forma sencilla. Y lo más interesante, es que podemos dejar un terminal ejecutando procesos, separarnos de él, cerrar nuestra sesión, volver a ella y continuar la sesión, manteniendo los trabajos, el historial del bash, la consola escrita, ETC.
En palabras del propio readme, tmux es:

tmux is a “terminal multiplexer”, it enables a number of terminals (or windows)
to be accessed and controlled from a single terminal.

tmux es un “multiplexor de terminales” que permite acceder y controlar varios terminales (o ventanas) desde una sola terminal.

Y ahora, lo más interesante: ¿cómo funciona?

  1. Antes de nada, lo instalamos:
    • Desde distribuciones basadas en Debian: aptitude install tmux
    • Desde distribuciones basadas en red hat: yum install tmux

    Si tienes otra distribución, puedes intentar encontrarla con tu gestor de paquetes, o compilarla desde el código fuente usando su repositorio git en: https://github.com/tmux/tmux.

  2. Desde una terminal, creamos una sesión escribiendo simplemente: “tmux”
  3. Ejecutamos los comandos que queramos.
  4. Una vez queramos salir de la sesión sin terminarla, escribiremos: “tmux dettach
  5. Cuando queramos retomar la sesión, miramos la lista de sesiones activas con: “tmux list-sessions”, y nos conectamos al número mostrado al principio de cada sesión, con: “tmux attach -t num, por ejemplo: tmux attach -t 0.

Aquí os pongo un ejemplo de consola para que lo veáis en acción:

root@koala [~]# tmux
root@koala [~]# pwd
/root
root@koala [~]# tar -zcf /tmp/borrar.tar.gz ./* &
[1] 6116
root@koala [~]#
root@koala [~]# tmux detach
[detached]
root@koala [~]# exit
logout
Connection to koala.tuhorizonte.es closed.
C:\Users\juanjo> 

C:\Users\juanjo>ssh root@koala.tuhorizonte.es
root@koala.tuhorizonte.es's password:
Last login: Fri Jan  1 22:46:39 2016 from xxx.xxx.xxx
root@koala [~]#root@koala [~]# tmux list-sessions
0: 1 windows (created Fri Jan  1 22:49:20 2016) [80x24] 
root@koala [~]# tmux attach -t 0
root@koala [~]# 
[1]+  Done                    tar -zcf /tmp/borrar.tar.gz ./*
root@koala [~]# cd /tmp
root@koala [/tmp]# ls -lh borrar.tar.gz
-rw-r--r--. 1 root root 4.9M Jan  1 22:49 borrar.tar.gz
root@koala [/tmp]# rm borrar.tar.gz
rm: remove regular file `borrar.tar.gz'? y
root@koala [/tmp]# exit
[exited]
root@koala [~]# exit
logout
Connection to koala.tuhorizonte.es closed. 

Para más información sobre el programa, podéis leer su manual en man tmux

¡Saludos y buen año a todos!

Entrada visitada 300 veces