8.11.14

Wiris en Guadalinex Edu 2013

Hoy el asunto de mi blog, "co-financiado" por la publicidad de Google (no voy a decir lo que hay que hacer si te resulta útil el artículo, porque es evidente), es Wiris.

Wiris es un recurso educativo muy utilizado por profesores de matemáticas y, si has intentado utilizarlo en Guadalinex 2013, te habrás encontrado que no funciona o peor, que aparece una pantalla como la siguiente:




Pero tranquilidad en las masas, este es un problema que por suerte puede ser solucionado. Los pasos para solucionarlo de forma resumida son:

  1. Descargar la última versión de Java (del JRE – Java Runtime Environment) de la página de java.com. En este ejemplo se usa la versión para Linux (i586) que va comprimida en tar.gz. Hablado claro, la que pone solo "Linux" y nada más en la página de descargas.

  2. Descomprimirlo en una carpeta local. Para este ejemplo vamos a imaginar que se descomprime en la carpeta principal del usuario "usuario" de Guadalinex (que sería "/home/usuario"). Al descomprimirlo generará una carpeta con toda la instalación de Java (algo parecido a "/home/usuario/jdk-8u20-linux-i586"), pero para facilitar todo el ejemplo vamos a cambiarle el nombre a dicha carpeta a algo más fácil, como por ejemplo: "/home/usuario/java".
  3. Poner el camino a la carpeta donde están los binarios de Java como parte de la variable de entorno PATH, modificando el archivo de perfil “.profile”. Esto se hace simplemente para que se pueda ejecutar la nueva versión de java en tu sesión de usuario. En nuestro ejemplo el archivo ".profile" estaría en "/home/usuario/.profile". Para ello, con el explorador de archivos dirígete a la carpeta personal del usuario (Lugares > Carpeta Personal). En dicha carpeta hay un montón de archivos ocultos que puedes ver simplemente pulsando la combinación de teclas "Ctrl+H" (puedes volver a ocultarlos pulsando de nuevo Ctrl+H). Busca el archivo ".profile" y edítalo con un editor de texto plano como "gedit". Hay que añadir lo siguiente (para este caso concreto):

    Si has decidido hacer la instalación de Java en una carpeta diferente a "/home/usuario/java" entonces en vez de "java" tendrás que poner el nombre o camino a la carpeta donde has realizado la instalación.
  4. Instalar el plugin de java applet para el navegador Firefox. Para ello tienes que crear un enlace simbólico al archivo “libnpjp2.so” situado en la carpeta “lib/i386” de nuestra instalación de Java (“/home/usuario/java/lib/i386/libnpjp2.so” en nuestro caso) en la carpeta “.firefox/plugins” (que en nuestro caso sería “/home/usuario/.firefox/plugins”). Si no existe la carpeta “plugins” en la carpeta ".firefox" habrá que crearla.
    Y si todo esto te suena a chino, puedes hacerlo solo usando solo ventanitas, siguiendo los siguientes pasos:
    • Ve a la carpeta “lib/i386” de tu instalación de java y encima del archivo “libnpjp2.so” le das al botón derecho del ratón y seleccionas la opción de “crear enlace”.
    • La operación anterior creará un archivo llamado (más o menos) “Enlace hacia libnpjp2.so” en la misma carpeta “lib/i386” de la instalación de Java.
    • Mueve el archivo “Enlace hacia libnpjp2.so” a la carpeta “.firefox/plugins” (si no existe la carpeta plugins, tendrás que crearla). Y después cámbiale el nombre al archivo “Enlace hacia libnpjp2.so” y déjalo en solo “libnpjp2.so” (es opcional, pero queda mejor así).
  5. Reiniciar la sesión de usuario.
Haciendo todos estos pasos hasta aquí, ya no hará crash firefox al intentar cargar Wiris. Pero todavía, en algunas circunstancias, no funcionará dado que java bloquea por seguridad algunas ubicaciones no confiables para los applets. Este es el caso de los centros que tienen instalado Wiris en el servidor de contenidos (“http://c0:8180/wiris”) o de quienes ejecutan wiris de algunos servidores de la consejería de educación de la Junta de Andalucía. En estos casos, al intentar acceder te saldrá una ventana como esta:

Para solucionar este punto hay que añadir la “Ubicación” ("http://c0:8180" en la imagen anterior) como una ubicación segura para java, siguiendo los siguientes pasos: 

  1. Ejecutar el “ControlPanel” de Java, situado en la carpeta “bin” dentro de nuestra instalación de java (“/home/usuario/java/bin/ControlPanel” en nuestro caso).
  2. Una vez en el ControlPanel, vamos a la pestaña de “seguridad”. Dentro de la pestaña de "seguridad" hacemos click en el botón que pone “Editar lista de sitios”. Al pulsar el botón sale una ventana como la siguiente, donde deberemos meter la ubicación de Wiris:

    Después nos pedirá que confirmemos la operación, una vez realizado, habremos terminado.
Y esto es todo! Si te ha gustado o te ha sido útil, no dudes en compartirlo.




22.10.14

Desarrollo en papel de una figura 3D

Como este año me ha tocado dar Tecnologías a 2º de la E.S.O., he pensado que el alumnado puede hacer una figura en 3D, partiendo de un desarrollo en papel, y que a partir de ella, una vez que ya la puede manejar fácilmente, dibujara las vistas en el sistema diédrico (alzado, perfiles, etc.). De esta forma, simplemente girando la figura (izquierda, derecha, arriba, etc.) puede ver fácilmente con que corresponde cada una de las vistas que se dibujan en dicho sistema. El problema ha sido que al buscar por Internet no he encontrado muchos desarrollos en papel de figuras 3D, salvo de figuras geométricas puras (cubo, tetraedro, etc.), por lo que he decidido hacer yo una.

Versión SVG (InkScape) Versión PDF

13.6.14

Crear un editor de imágenes sencillo con HTML5, Javascript y Canvas

Desde hace un tiempo empecé mi proceso personal de actualización a Salva 3.1, enfocado principalmente a renovar/ampliar mis conocimientos en el desarrollo web. Y cuanto más profundizo, más alucino. Hoy en día es posible hacer cosas en la web impensables hace unos pocos años (realmente pocos). Por ejemplo, ya es posible crear una página web que sea un editor de imágenes, sin usar Flash, ni Java, ni ningún plug-in o extensión al navegador (siempre que tu navegador sea moderno y soporte Canvas).

Esto es algo que funciona bastante bien en Firefox y Chrome. Aquí os dejo una pequeña aplicación web que he realizado y que hace uso de todo esto (y algunas cosas más). Simplemente buscas una imagen de tu ordenador, tu navegador la carga y desde javascript, sin subir la imagen a ningún servidor, te permite cierta capacidad de edición, para después permitir descargar la imagen, todo con un código javascript relativamente sencillo y con una complejidad técnica muy baja (en comparación con la misma aplicación para sobremesa):
Imagina que en tu web pones un Canvas (elemento ampliamente permitido en los navegadores modernos):
<canvas id="canvas_ed" width="300" height="300"></canvas>
¿Podrías cargar una imagen del sistema cliente en dicho Canvas, procesarla y volver a guardarla en del cliente directamente sin pasar por ningún tipo de aplicación en servidor? Pues la respuesta es SI.

Para empezar, la imagen se cargaría a través de un elemento de formulario tipo “file”:
<input type="file" accept="image/*" id="img_from_pc" />
 Ahora, cuando se cambia la imagen en ese input, se genera un evento “change” que se puede capturar (lo pongo suponiendo que se usa jQuery):
$(function () {
$("#img_from_pc").change(function (event)
{
var fileList=this.files;
if (fileList.length&gt;0)
{
leerImagenDeArchivoYActualizarCanvas(fileList[0]);
}
});
});
Ahí se usa el atributo “files” del elemento input[type="file"], que contendrá una lista con las imágenes seleccionadas, realmente es un objeto FileList, y cada elemento de la lista será un objeto de tipo File, que permite conocer el nombre del archivo cargado.

Si el input[type="file"] tiene algún archivo se invoca la función “ leerImagenDeArchivoYActualizarCanvas(fileList[0])”, que es una función a medida, que actuará de la siguiente manera:
  • Carga la imagen del cliente en un elemento HTML tipo <IMG> (que podremos ocultar para que no se vea).
  • Una vez que la imagen se ha cargado en el <IMG>, se vuelca la imagen del <IMG> al <CANVAS>.
¿Cómo se carga la imagen del cliente en un elemento <IMG>? Supongamos que tenemos un IMG oculto tal que así:
<img id="image_output">
Pues la función anterior debería leer la imagen y ponerla como “src” de la imagen, así de simple:
function leerImagenDeArchivoYActualizarCanvas(file)
{
var img=$("image_output")[0];
var fr = new FileReader();
fr.onload = function(e) {
img.src = e.target.result;
};
fr.readAsDataURL(file);
}
Esto utilizaría FileReader, que es un prototipo de objeto del api de HTML que permite leer archivos. Invocamos el método “readAsDataURL” con un objeto tipo File para comenzar la descarga, y como dicha descarga es asíncrona, hay que indicar en el atributo “onload” de dicho objeto que función se ejecutará (closure en este caso) cuando se termine la carga. Lo que se hace en este caso en la función asignada a “onload” es simplemente poner el resultado de la descarga (que será una URL de tipo data con la imagen codificada en base64) como src de la imagen.

Bien, ya tenemos la imagen, pero como pasamos la imagen al canvas, pues así. Añadimos lo siguiente a la función anterior:
function leerImagenDeArchivoYActualizarCanvas(file)
{
var img=$("image_output")[0];
img.onload=function () {

var canvas=$("#canvas_ed")[0];
var canvas_ctx=canvas.getContext("2d");
canvas_ctx.drawImage(img,0,0,300,300);
};

var fr = new FileReader();
fr.onload = function(e) {

img.src = e.target.result;
};
fr.readAsDataURL(file);
}
De esta manera, cuando la imagen se haya cargado se invocará al handler “onload”, que será una función (closure en este caso) que pintará el canvas de la imagen. Dentro de dicha función se usan obviamente objetos del api de Canvas.

Una vez que ya hemos modificado la imagen a nuestro antojo, podemos poner por ejemplo un enlace para descargarla directamente al cliente (PC, móvil, etc.). Eso sí, hay que tener en cuenta que no todos los navegadores soportan esta opción (se puede detectar con Modernizr). Esto funciona mejor en Firefox que en Chrome, aunque funciona en los dos.

Supongamos que tenemos dos enlaces:
<a id=”donwlink” href="" onclick="descargar();return false;">Haz click aquí para descargar imagen</a>
<a id="downlink_hidden" href="" download="imagen.png"></a>
El segundo enlace se supone que está oculto y utiliza el atributo “download” para decir que es un archivo para descargar y no una imagen. Nuevamente, esa opción no funciona del todo en todos los navegadores, y habría que comprobarla con Modernizr por ejemplo. Al hacer clic en el primero se invoca la siguiente función:
function descargar() {
var canvas=$("canvas_ed")[0];
$("#downlink_hidden").attr("href",canvas.toDataURL("image/png"))[0].click();
}
Al ejecutar esta función lo que hacemos es poner como destino del segundo enlace, es decir como “href”, la imagen en base 64 como URL de tipo data. Hay que verificar, con Modernizr por ejemplo, que existe la función “toDataURL” en el canvas y a que formatos de imagen es posible exportar (“image/png”, “image/jpeg” o “image/webp”), porque no todos los navegadores tienen dicha función (por ejemplo, ni Safari ni Internet Explorer la tienen) o no soportan exportar a todos los formatos.

Y esto es todo.

26.5.14

Nueva versión de HippoCalc en camino

Hace tiempo que no publico nada en mi blog y bueno, quizás debería tomarme un poco más en serio esto del blog, pero no lo hago, y claro, mi blog da pena...

Hace tiempo que estoy trabajando en un pequeño proyecto, conforme me van quedando huecos libres. Es un proyecto pequeño y sencillo, pero el tiempo es el tiempo. Tengo una "calculadora IP educativa" en una web (hippocalc.net24.com) que he decidido actualizar y renovar. La verdad es que lo llevo bastante avanzado y aquí se puede ver un par de pantallazos de la nueva aplicación web (cuidado, todavía no la he subido):



La idea es tener una aplicación web que luego pueda fácilmente convertir a aplicación para el móvil (usando cordova u otro framework), que tenga un diseño adaptativo y que cambie de aspecto al cambiar el tamaño de la pantalla o al verlo en un dispositivo móvil (responsive web design) y que además pueda convertir fácilmente en un WebApp instalable a través de Chrome o Firefox en un PC. Como se puede ver en los pantallazos de arriba, sería la misma aplicación, pero básicamente donde se han usado CSS media queries y un javascript adaptado a cada tamaño (3 en realidad), respondiendo a las necesidades de cada vista.

Para realizarlo he usado mínimamente JQuery... y la idea inicial era no usarlo... aunque ahora que estoy aprendiendo a usar AngularJS me he dado cuenta de que realmente he hecho el tonto (o quizás no).


La verdad es que si todavía no lo he puesto online es porque me he currado unos scripts, que como son míos son maravillosos, para darle soporte multi-idioma desde javascript y PHP sin cambiar los datos de origen. Desde javascript y PHP se leen los mismos archivos de configuración de idioma, y se cargan las mismas traducciones y se genera una versión traducida de la parte "estática" del texto (la dinámica siempre se genera con javascript, aunque la "estática" también se cambia, o se puede cambiar, desde javascript).

Cuando me refiero a la parte "estática", me refiero por ejemplo a las etiquetas de los inputs en los formularios, que no cambian en función de los datos de entrada, y a otros textos que no se calculan en función de unos parámetros de entrada. Y el rollo de hacer esto ha sido porque los buscadores no ejecutan el JavaScript (bueno google si, pero es el único), y no se enteran del contenido dinámico.

Si lo hubiera echo solo en javascript, que es adecuado para pasar tu aplicación HTML5+Javascript a una app para un móvil (con Cordova o PhoneGap, por ejemplo), los buscadores, al ver la versión web y hacer "clic" en otro idioma, se encuentran un JavaScript, y no ven "nada" realmente en otro idioma. De esta forma, tal y como lo he hecho, a través de PHP se genera y cachea una versión del HTML con el texto "estático" en cada idioma, y se convierten los enlaces a enlaces navegables por un buscador (no se ejecuta javascript en ese caso), de tal manera que los buscadores "ven" que hay versiones en otros idiomas.

Y ahí estoy, con casi todo ya listo, y traduciendo del español al inglés... que claro, como no hacer la traducción y dejar algo que ya tengo hecho y funciona sin utilizar... y paradojicamente es donde estoy más atascado y oxidado :-P... pero me sirve de entrenamiento para el año que viene, que empiezo, si hay plazas, 4º de inglés en la EOI.

28.11.13

Gmail en versiones antiguas de Firefox

Las aplicaciones web están cambiando mucho y Gmail también. Si tienes una versión antigua de Firefox, como la incluida en Guadalinex y Guadalinex Edu 9.04 o anteriores, puede ser que te encuentres que no te deje entrar en Gmail o que la visualización sea inoperativa (es decir, que no te deje hacer nada).

Si tienes este problema, lo más normal es actualizar Guadalinex a la última versión, pero esto algunas veces es problemático porque hay ordenadores que les cuesta mucho trabajo funcionar con la última versión de Guadalinex. La solución es entrar en Gmail con la vista html básica. Para eso simplemente accedemos a Gmail poniendo:

http://mail.google.com?ui=html

Cuando Gmail carga se muestra también un enlace que pone "Cargar vista básica en HTML (para conexiones lentas)", pero a veces es díficil pulsarlo cuando la conexión es buena (se carga pronto), pero el navegador no está actualizado... en estos casos lo mejor es teclear la URL directamente, sin esperar a poder hacer clic.

Esto es todo.

30.10.13

Nada como verlo por dentro

Y es que no hay mejor manera de entender como funciona algo que diseccionándolo... Hoy un disco duro roto con el que mis alumnos han podido ver que su funcionamiento es más simple de lo que parece.

18.10.13

Se busca...

En algún lugar de este pequeño mundo, en algún rincón, que no tiene por qué ser necesariamente un rincón perdido, hay una persona que tiene en su mano solucionar todos los problemas del mundo.


Esta persona existe, es real y no tiene superpoderes, pero posiblemente, casi con toda seguridad, no sepa realmente las enormes repercusiones de sus actos, desconoce que sus actos podrían conducir a la salvación, desconoce que sus actos evitarían el fin del mundo.


Es como el efecto mariposa y la teoría del caos, el batir de sus alas produciría un efecto en cadena que lo cambiaría todo. Solo hay que encontrar a esa persona, y… conseguir que vuelva a creer en la humanidad, pues ha perdido toda confianza en el ser humano, ha perdido toda confianza en su propia especie y razones no le faltan.


Convencer a esa persona no va a ser fácil, porque es una persona sin ilusión, es una persona que cree que no se puede hacer nada realmente para cambiar el mundo y que la única opción es agachar la cabeza y soportar. Desconocemos donde está esa persona ahora mismo, no tenemos la tecnología suficiente para encontrarla, pero puede ser que la tengas cerca sin saberlo. Y si la tienes cerca deberías intentarlo, deberías intentar que vuelva a confiar en el ser humano y que recupere la ilusión, seguro que al volver a ilusionarse tomará partido y actuará, lo cual desencadenará una ola que cambiará el mundo.

10.6.13

eXeLearning: un paso hacia el futuro educativo

Aquellos que hemos utilizado eXeLearning para desarrollar materiales educativos para su uso en plataformas de aprendizaje en línea (también llamados LMS - Learning Management System), sabemos el hito que supone eXeLearning en ese ámbito.

eXeLearning es una herramienta gratuita que nos permite diseñar contenidos educativos para su enseñanza a distancia con una calidad sorprendente.

Y ahora, on-line y en abierto, uno de los mejores expertos en eXeLearning de este país, José Ramón Jimenez, colaborador en el desarrollo de eXeLearning, va a dar una conferencia web al respecto que no tiene ningún desperdicio:

11 del Junio, a la 17:00, no os lo perdáis:

13.5.13

Tecnologías de la información y comunicación es Informática

Con el fin de promocionar la actual asignatura de Tecnologías de la Información y Comunicación de 2º de Bachillerato, he realizado este cartelito. El mayor problema ahora mismo no es que el alumnado no quieran hacer informática, es que muchos no saben que "Tecnologías de la Información y Comunicación" es "Informática".

Además, si no se paraliza la ley Wert o LOMCE, ojalá que la cosa cambie, en los borradores ya llaman a la materia de Informática en 4º de la ESO como "Tecnologías de la Información y Comunicación"... habrá que acostumbrarse.


Versión ODG
Versión PDF

21.2.13

Invalid header received from client

Pues estaba ya un poco harto de este problema (abres el firefox y le pones cualquier página, y solo recibes el mensaje "Invalid header received from client" en el navegador), que se repetía una y otra vez, hasta que decidí investigar a que se debía, y bueno, en mi caso, creo que en otros también, se debe a que Guadalinex 10.04 Edu intenta realizar una actualización que por algún motivo (creo que se debe a que el portátil es apagado antes de que se termine de actualizar por ejemplo), no termina de realizarse.

Guadalinex Edu lleva un paquete llamado "privoxy" que es un proxy (sin caché) que sirve para mejorar la privacidad y filtrar páginas webs entre otras cosas. Todas las peticiones http/https de los navegadores pasarían a través del él, y dicho software se encargaría de, tal y como indica su página web, mejorar la privacidad y controlar el acceso, entre otras cosas.

Este paquete se actualiza mal (y otros creo), y si ejecutas la aplicación "CGA Actualizaciones" del guadalinex edu de los ultraportátiles que la junta de andalucía le ha dado a los niños, simplemente, no funciona (aunque selecciones la opción de forzar actualización). La solución es "forzar" a que se actualice, usando un CD de arranque de linux y conectando el ordenador a internet a través de cable de red.

Mi solución ha pasado por descargar Guadalinex V8 y arrancarla en el portátil desde una unidad de CD/DVD USB externa, no hay que instalarlo obviamente. Se trata de que cuando sale la pantalla de "Instalar" o "Probar", te cambias a un terminal modo texto (pulsando Ctrl+Alt+F1) para poder ejecutar comandos.

Una vez en el terminal modo texto, te aparece un prompt (que termina con el símbolo $), a partir del cual podemos teclear comandos. Aperecerá el cursor parpadeando para indicarnos que ahí podemos escribir los comandos, escribimos los comandos, y después pulsamos Enter o Intro para ejecutar cada uno de ellos.

Lo primero es convertirnos en ROOT, es decir, tomar privilegios de usuario administrador para poder hacer tareas de administración, esto no podríamos hacerlo en un guadalinex edu normal ya instalado, dado que está capado (eso para otro momento):

$sudo su

Después de ejecutar el comando anterior, pasamos a ser root. El siguiente paso es crear una carpeta y montar la partición donde está instalado guadalinex edu, que generalmente suele ser "/dev/sda1":

$mkdir /tmpx
.... y después...
$mount /dev/sda1 /tmpx

Si todo ha ido bien, nos saldrá un mensaje en inglés como que se ha montado correctamente. El siguiente paso es acceder a la carpeta "tmpx" y "remontar" todos aquellos directorios que corresponden con dispositivos e información de sistema mapeada al sistema de archivos por el kernel, es decir, las carpeta "sys", "proc" y "dev":

$cd /tmpx
$mount -o bind /dev /tmpx/dev
...
$mount -o bind /sys /tmpx/sys
...
$mount -o bind /proc /tmpx/proc
...
 
Una vez hecho esto, cambiamos la carpeta raiz (chroot /tmpx) y accedemos a la carpeta de root (cd) para ejecutar los scripts de inicio de sesión (lo cual no se hasta que punto es realmente necesario, pero por si acaso, mejor hacerlo). Se presupone ya estás en el directorio "tmpx":

$chroot /tmpx
$cd
$source .profile
Y una vez hecho esto, simplemente queda actualizar correctamente Guadalinex Edu (recuerda que el ordenador tiene que estar conectado por cable a internet), para ello, teclea los dos comandos siguientes:

$apt-get update
$apt-get upgrade

Después de ejecutar los dos comandos anteriores (es el mismo pero con parámetros diferentes, el primero actualiza la lista de paquetes y el segundo realiza la actualización), el ordenador debería haber instalado los paquetes pendientes de forma correcta y debería funcionar. Por lo que solo queda salir y reiniciar:

$exit
$cd
$umount /tmpx/sys
$umount /tmpx/proc
$umount /tmpx/dev
$umount /tmpx/
$reboot

Y esto es todo.

9.9.12

Volcar un streaming de vídeo a archivo de disco usando VLC

Hoy me ha surgido un problema que no sabía muy bien como resolver, tenía que guardar varios vídeos (un total de 8), disponibles en Internet a través de streaming, para posteriormente verlos con calma. Los vídeos se proporcionaban concretamente a través del protocolo Microsoft Media Services (mms://...), y la verdad, quería descargarlos lo más rápido posible, sin instalar ningún software adicional en mi equipo.

VLC es un software que ofrece un muy amplio abanico de opciones: reproducción de vídeo, streaming, conversión de formatos, filtros y más; una autentica navaja suiza para el manejo de vídeos. Normalmente lo usaba como reproductor, pero he descubierto que puede hacer mucho mucho más. Ya sabía que a través de la interfaz gráfica proporcionaba un mecanismo para "guardar/convertir" un vídeo (ya sea como fuente un archivo o un streaming) en otro formato, y que es relativamente fácil de manejar. Pero desconocía las grandes posibilidades que tenía su línea de comandos.

El problema de descargar vídeos en streaming es que en principio el servidor de streaming no te va a enviar el vídeo a una alta velocidad, te lo va a dar a una velocidad que permita una reproducción sin cortes, lo suficiente para reproducirlo sin disminuir el ancho de banda del resto de vídeos que se están sirviendo. Aunque obviamente puede que el servidor de streaming esté configurado de otra forma (desconozco como se configura un servidor de streaming, como puede ser en este caso Windows Media Services, aunque reconozco que me gustaría saber como se pone en marcha, quizás lo haga algún día).

El asunto es como descargar todos los vídeos proporcionados a través de mms, lo más rápido posible. La idea es descargándolos todos a la vez, pero a través de la interfaz gráfica de VLC no he podido, por lo que he recurrido a la interfaz modo texto. Después de echar un vistazo a su guía de usuario y a la documentación he descubierto que se puede guardar un stream mms directamente a archivo:

vlc mms://.../video.wmv :sout=file/asf:video.asf

Esto habría que ponerlo en el interprete de comandos obviamente, lo que en Windows se conoce como símbolo del sistema, o bien en un archivo de lotes tipo bat, para su posterior ejecución.

Donde pone "mms://.../video.wmv" debe ir obviamente la URL del vídeo. La parte de ":sout=file/asf:video1.asf" significa básicamente que la salida será a un archivo de tipo asf (Advanced Systems Format) llamado "video1.asf". No conozco mucho de este formato, pero después de varias consultas en Internet he visto que (cuando se usa la interfaz gráfica de VLC) los streamings MMS los encapsulan siempre en un archivo asf, y cierto sentido tiene, dado que asf es un formato para streaming que, según he leído, puede contener un vídeo WMV, y a su vez, WMV es un formato que puede ser guardado tanto para reproducción en disco, como para streaming (por lo menos el Windows Media Encoder lo permite).

Con esto obtendremos el streaming de vídeo guardado en un archivo tipo asf, pero abrirá la interfaz gráfica para hacer el proceso y además, cuando termina, volverá a comenzar. Para evitar esto, podemos hacer lo siguiente:

vlc --intf dummy mms://.../video.wmv :sout=file/asf:video.asf vlc://quit

Aquí "--intf dummy" significa que básicamente no se utilice ninguna interfaz. Vlc tiene varias interfaces, incluida obviamente la interfaz gráfica, pero con la interfaz gráfica no he conseguido "lanzar" varias instancias de modo que se guarden varios streamings a la vez, a pesar de que he seguido las instrucciones para permitir la ejecución de varias instancias de vlc, no obstante, utilizando la interfaz "dummy" si me ha funcionado.

La parte "vlc://quit" sirve para indicar que vlc termine, una vez que haya concluido con el volcado a disco. Si no se pone, vuelve a comenzar, machacando el volcado ya realizado.

De esta forma se pueden lanzar varias instancias de vlc, cada una descargando un vídeo diferente (ejemplo para windows):

start "descarga de vídeo 1" vlc --intf dummy mms://.../video1.wmv :sout=file/asf:vid2.asf vlc://quit
start "descarga de vídeo 2" vlc --intf dummy mms://.../video2.wmv :sout=file/asf:vid1.asf vlc://quit

Todo esto lo podemos meter en un archivo tipo bat (en windows), que al hacer doble clic sobre él, descargaría todos los vídeos de forma simultanea, iniciando una nueva instancia de vlc para cada stream. Una vez que cada instancia de vlc se cierre (se creará ventana con información en modo texto para cada instancia de vlc al usar la interfaz dummy), se habrá concluido el volcado.

Aunque el archivo ASF es reproducible (sobre todo en windows), es conveniente convertirlo a otro formato más manejable, como por ejemplo mp4. Mp4 es un formato aceptado por muchos dispositivos y más cómodo para visualización en un ordenador. Esta tarea de recodificación también se puede hacer con vlc a través de la línea de comandos:

vlc --intf dummy video1.asf --sout=#transcode{vcodec=h264,acodec=mp4a}:standard{access=file,mux=mp4,dst="video1.mp4"} vlc://quit

Tengo que reconocer que cuando hice la conversión pensaba que iba a ser realmente lento, debido a la forma de trabajar de vlc, pero me equivoque. Es más rápido de lo que yo pensaba. El comando anterior transformaría el archivo asf en formato mp4 con codificación de vídeo H-264, manteniendo la misma calidad. Si bien, es más cómodo utilizar la interfaz gráfica de VLC para esta tarea, dado que aquí la línea de comandos de vlc no es tan fácil de entender, pero usando la interfaz “dummy” podemos automatizar el proceso en cierta manera.

Esto es todo :-P.

19.1.12

Resetear BIOS (CMOS) para eliminar password de SAMSUNG NP-N131

¿Tán difícil es? ¿Esto cuesta 85 euros? Me parece una pasada lo que algunas empresas de reparación de estos micro portátiles, repartidos por la Junta de Andalucía en los colegios e institutos de secundaria, cobran por reestablecer el password de la BIOS de los equipos SAMSUNG NP-N131 y NP-N130, vamos, por resetear la BIOS.

Si solo hay que puentear, con la batería y el cargador desconectados (muy importante), los contactos metálicos etiquetados como "RTC RESET". Esto significa que hay que poner algo metálico que una dichos contactos (pero solo esos, evitando tocar otra cosa y siempre con la batería y el cargador desconectados).

¡¡CUIDADO!! Esto tiene que hacerlo alguien con conocimientos técnicos adecuados y debes estar en un ambiente libre de electricidad estática. El autor de este artículo se exime completamente de cualquier avería o problema derivado de seguir los pasos aquí expuestos. Si realizas este procedimiento es bajo tu cuenta y riesgo.

1º) Quita el cargador y la batería, debe estar sin alimentación eléctrica ninguna (salvo la pila, que si hay que dejarla). Después pulsa varias veces el botón de encendido, esto se hace para eliminar la carga eléctrica que haya podido quedar en componentes eléctricos tales como condensadores.

2º) Quita la tapa donde va la memoria del portátil.

3º) Localiza los contactos  RTC RESET.

4º) Y con algo metálico y pequeño, se unen haciendo contacto, sin que haga contacto nada más y con la batería y el cargador desconectados.

Después de hacer esto será necesario entrar en la BIOS y reestablecer la fecha y la hora. Esto no elimina el password del disco duro, el cual, no se puede quitar si se pone, la única solución para eso es cambiar el disco duro.


20.12.11

Minijuego en Processing…

Un pequeño juego en Processing… evita los cuadrados moviendo el circulo con el ratón. Este es el objetivo que me he planteado para el alumnado de bachillerato de este año, ¿serán capaces de hacer algo parecido? Ojalá que sí, sería fantástico.
Para ejecutarlo necesitas java.
Aquí dejo el código fuente de este programita, para quien le interese: descargar código fuente en processing del minijuego.

28.11.11

Ilusión óptica en processing.

Probando a meter un applet Java en blogger puentenadolo a través de la carpeta pública de dropbox... ¿funcionará?

Parece que sí... se trata de uno de mis primeras pruebas en el lenguaje processing. Un lenguaje para realizar bocetos (scketchs), similar a java y muy adecuado para introducir al alumnado al mundo de la programación.

Aquí tenéis el código fuente en processing de esta ilusión óptica. Conforme el número de líneas crece, las líneas horizontales rojas se van curvando progresivamente... aunque parezca lo contrario, las líneas rojas son líneas rectas.

Un saludo.

6.5.11

Computing incident.

Otra vez, el equipo roto. ¡¡ Joer !! Me ha llevado arreglarlo dos días. Esta vez, ¡la caja! ¡La puñetera caja! El interruptor de encendido ha dejado de funcionar, ¿por qué? Ni idea.
Primero pensé que era la fuente de alimentación, como es normal. Luego la placa base, lo cual me dio hasta escalofríos. ¡¡La fuente y la placa tienen menos de seis meses!! ¡¡ Como podía ser !!

Me traje el ordenador de mi padre y a probar cambiando cosas... nada funcionaba. Hasta que se me ocurrió, de casualidad, probar cambiando el botón de arranque. Y efectivamente, con el botón de la otra caja, ahí, puenteado de mala manera, si que funcionaba, pero con el botón suyo de la caja, ¡ pues no ! Ala, ahora ponte a cambiar la caja con las ganas que hay y lo poco que se tarda.
Intenté arreglar el botón antes de comprar una caja nueva, de diversas maneras, pero al final termine fastidiándolo más, incluso fastidie no se como el botón de reset y uno de los cables del USB frontal se “solto” misteriosamente. El resto ya los arranque yo de la misma ira interior.

La anterior caja era una Tacens Lirica, así que no la recomiendo en absoluto. La nueva que le he puesto es una Vortex de la serie 36, mas barata y en mi opinión con mejor acabado y terminaciones. Ahí os dejo una fotillos de la nueva caja.
Una cosa que me ha sorprendido el pasacables que tiene por la parte de atrás:
Tampoco están nada mal los anclajes sin tornillos para las unidades de DVD y discos duros, al principio cuesta pillarle el truco pero están bastante bien:

25.2.10

La playa del zapillo inundada...

El temporal no deja de sorprenderme. Me han enviado una foto de como estaba el zapillo (Almería) el otro día... sorprendente:



Quienes conozcan el zapillo no tendrán problemas para interpretar la imagen. Para los que no lo conozcan pueden hacerse a la idea de que eso es el paseo marítimo y que por delante del mismo debería haber unos 7-10 metros de arena típica playera... mas o menos (puede que mas).

23.2.10

¿Significará algo?

Hoy, el espacio ocupado por mis e-mails en gmail tiene algo diabolico:

"Estás utilizando 666 MB (8%) de tu total disponible de 7426 MB."

:-P

10.12.09

Como cargarse y recuperar Windows Vista

Como cargarse y recuperar Windows Vista

Todo paso una mañana cuando pensé que me sobraba una partición del disco duro. En la partición en cuestión había instalado Windows 7, la versión para beta tester, aquella que era gratuita con fines de testeo y que desde hace un tiempo ha dejado de estar operativa.

La idea era arrancar con el SystemRescueCD, eliminar la partición de Windows 7, y ampliar la partición de Windows Vista. De momento, no tengo ninguna queja de Windows Vista, aunque la verdad es que lo uso poco y me gusta tener software con licencia instalado en el equipo.

La cuestión es que lo hice, elimine la partición y moví la de Windows Vista de forma que ganaba casi 30 GB de espacio en dicha partición. El problema surgió cuando, tras hacer la compleja operación, el Windows Vista no arrancaba.

Después de darle vueltas un rato, pensé que quizás, en el DVD de instalación de Windows Vista vendría alguna utilidad para reparar una instalación previa, y así era. Arranque desde el DVD de instalación de Windows Vista y fácilmente pude acceder a la utilidad que tiene para reparar instalaciones previas. Detecto el Windows y lo reparó.

Tras eso, desconfiaba que realmente se hubiera reparado el Windows Vista, pero probé a arrancarlo y, gratificantemente para mí, arranco. El problema surgió después cuando me era imposible iniciar sesión. En uno de los usuarios  (el que tiene privilegios admistrativos) me aparecía un mensaje de “Preparando escritorio…” eternamente hasta que finalmente aparecía la pantalla con únicamente el ratón.  En el otro de los usuarios (el que no tenía privilegios administrativos), aparecía el mensaje “Preparando escritorio…” seguido de “Guardando su configuración” y cerraba la sesión sin explicaciones.

Después de varios intentos, iniciando el administrador de tareas y lanzando la línea de comandos, logre averiguar que de repente Windows Vista pensaba que estaba en la unidad “V:” en lugar de en la unidad “C:”, y claro, eso puede tener graves consecuencias. De hecho, no me dejaba hacer prácticamente nada, los comandos de sistema existían, pero no se lanzaban. Intentaba lanzar “regedit” y me decía que el comando no existía, cuando yo estaba viendo el comando perfectamente delante de mí.

Después de googlear un rato, encontré un par de artículos que podrían ser la solución:

Estos dos artículos han sido la solución, de hecho. Por fin he conseguido restaurar el Windows Vista y ahorrarme una costosa reinstalación, aunque sinceramente, yo no he seguido todos los pasos descritos en los artículos. En mi caso, lo he hecho de la siguiente forma:

  • Arrancas el Windows Vista en modo seguro con consola de comandos. Para ello, presionas F8 justo antes de que empiece a arrancar Windows Vista y seleccionas la opción “Safe mode with command prompt”
  • Una vez que arranca, intentas iniciar la sesión con uno de los usuario con permisos de administración (vamos, con el que normalmente instalabas los programas).
  • Después de un rato esperando a que el mensaje “Preparando el escritorio…” desaparezca, aparece el escritorio sin nada, solo con el fondo azul y el ratón. Entonces pulsas “Ctrl+Alt+Supr” y en la pantalla que te aparece seleccionas “Iniciar Administrador de Tareas”.
  • Te aparecerá el Administrador de tareas, que es algo así:


    En él, en la pestaña aplicaciones le das al botón “Nueva tarea…” y ejecutas regedit:



    Después aparecerá el editor de registro,
    que será algo así:



  • En el editor de registro debes cambiar varias entradas del registro de Windows. Para empezar, ve pinchando hasta que llegues al final en la siguiente entrada: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Current Version\Winlogon\. Aparecerá algo así:



    En tu caso, el valor de la entrada “UserInit” será algo como “C:\Windows\system32\userinit.exe,” y tendrás que cambiarlo seleccionando la opción de “Modificar…” (botón derecho del ratón) para que ponga solamente “userinit.exe,”, tal y como aparece en la imagen.
      Nos quedamos con ese "C:”, que se supone que es la letra de la unidad donde Windows estaba instalado antes del “fallo”. Puede que en tu caso sea diferente, puede aparecer otra letra, con lo que conviene apuntarla para después.

  • El siguiente paso es cambiar la letra de la unidad donde Windows está instalado. Para ello debes buscar la siguiente entrada en el registro: HKEY_LOCAL_MACHINE\System\MountedDevices y aparecerá algo así:



  • Ahora tienes que “cambiar el nombre” de las entradas “\DosDevices\C:” y de la “\DosDevices\V:”. Bueno, en mi caso son “C:” y “V:”. “C:” es la letra de la unidad antes del fallo y “V:” es la letra posterior al fallo.
  • Para saber cuál es la letra de la unidad anterior al fallo lo podías haber sacado de pasos anteriores, cuando se cambio lo del Userinit (aquello que comenté antes que apuntaras era la letra de la unidad anterior al fallo).
  • Para saber cuál es la letra de la unidad ahora, es decir, después del fallo, puedes iniciar la línea de comandos a través del administrador de tareas y ejecutar la tarea “cmd”. Te aparecerá algo parecido a “V:\Windows\...” en la ventana, pues el V: es la unidad que tienes que volver a poner como C:”.
  • Ahora tienes que cambiar el nombre de la entrada “\DosDevices\C:” por una letra que no uses, algo como “\DosDevices\Z:”.  Lo que estamos haciendo es cambiar la letra de unidad usada antes del fallo por una no usada, recuerda que en tu caso puede ser distinto a “C:”.
  • Después tienes que cambiar el nombre de la entrada “\DosDevices\V:” por la letra de unidad que se supone que debería tener “\DosDevices\C:”. Con esto cambiamos la letra asignada después del fallo a la letra que tenía antes del fallo. Recuerda que en tu caso puede ser distinto a “V:”.

Después de seguir estos pasos, reinicie y todo fue de maravilla. De hecho, ahora estoy usándolo sin problemas. Está claro que el hecho de que a mí me haya funcionado no garantiza que a ti te funcione. Yo utilizo Windows Vista Home Edition, por lo que con otra versión de Windows Vista puede ser diferente.

Usa con cuidado el editor de registro, porque puede dejar completamente inoperativo tu ordenador.

Seguir estos pasos también puede solucionar algunos problemas causados al “clonar” (con software tipo Norton Ghost o Partimage) una partición con Windows Vista y posteriormente restaurarla.

Saludos!


8.12.09

Rebooting?

Bueno, esta es una "entrada" emocional, mas que otra cosa. Llevo tanto tiempo sin escribir en mi blog nada interesante que empiezo a pensar que ya no tengo nada interesante que decir.

Supongo que es lo normal cuando ya no se tiene tiempo para mantener los hobbies, si es que esto es realmente un hobby :-P. Descubrir la parte interesante de uno mismo y proyectarla es complicado, y mucho más cuando uno no tiene tiempo.

....quizás esta no sea la mejor forma de empezar la entrada de un blog, y efectivamente no lo es. Es una patraña traicionera (crees que te esta haciendo un favor, pero luego se vuelve contra tí)... así que voy a dejarla a un lado.

En fin, seguiré con mis cosas. Recomendaciones para aquellos que blogeais de vez en cuando, una gran película: Julie y Julia (2009) (con Meryl Streep y Amy Adams).

Yo comencé a verla un poco escéptico pero al final me acabo gustando, porque refleja la realidad de la felicidad: la realización personal.

25.4.09

Fotos y mas fotos... nunca aparecen ordenadas cronológicamente :-(

Cuando vamos de viaje hoy en día estamos acostumbramos a echarle fotos a todo, y con todos los dispositivos que tenemos a mano y que tienen cámara. Eso significa que, generalmente, llevamos una cámara de fotos (o dos), y uno o varios móviles. Cuando se acaba la batería de la cámara digital, pasamos a nuestro móvil y viceversa.

El problema se agrava cuando hacemos un viaje con varias personas, eso significa varias cámaras y varios móviles.

Y digo que el problema se agrava porque después, cuando pasamos a organizar todo el mar de fotos, nos encontramos con muy buenos programas para organizar las fotos: Picassa, F-Spot, ... y alguno más. Pero para ver las fotos "en orden cronológico" hay que usar el dichoso programita. Y claro, si lo que quiero es "enchufar mi pen drive usb a la televisión o al DVD directamente" las fotos salen desordenadas porque la televisión y/o el DVD no saben que es el Picassa, F-Spot, etc... ni tampoco son capaces de leer la fecha de adquisición de la foto.

Si los DVDs y/o Televisiones actuales (un mensaje para los fabricantes de DVDs, Televisiones y demás) simplemente ordenaran las fotos por fecha de adquisición (o lo permitieran)... nos ahorrarían muchos problemas (al menos a mí). Eso se hace simplemente leyendo los metadatos EXIF de las fotos. De esa forma tu solo te preocuparias de grabar las fotos tal cual en un CD o DVD, o de copiarlas directamente a tu pen drive, y el DVD/TV haría el resto.

Igualmente nos ahorrarían muchos problemas si los fabricantes de software tipo Picassa (Google en este caso) y demás, incluyeran una opción de "exportar a carpeta" en la que se renombraran las fotos a un nombre que permitiera que las fotos no salieran despues desordenadas.

Algo parecido a lo que hace el siguiente Script de Linux:


IFS=$'\n'

PREFIX="rs_"

for each in $(ls *.jpg); do

#Extraemos el nuevo nombre (será la fecha formateada de la siguiente forma AAAAMMDDHHMMSS.
NN=$(exif -t 0x9003 "$each" | grep Value | sed "s/Value: //" | tr -d " :")

if [ -n "$NN" -a ! -e "$PREFIX$NN.jpg" ]; then
echo "Duplicando $each ----> $PREFIX$NN.jpg";
cp "$each" "$PREFIX$NN.jpg";
else
if [ -e "$PREFIX$NN.jpg" ]; then
echo "Error :-( Archivo duplicado ($PREFIX$NN.jpg).";
echo " :-( Puede que existiera de antes o que haya dos fotos tomadas en la misma fecha y hora.";
echo " :-( El problema lo ha dado la foto llamada $each. ";
fi
if [ -z "$NN" ]; then
echo "Error :-( Información de fecha y hora de captura de la foto no existente.";
echo " :-( La foto $each no tiene fecha de captura.";
fi
exit;
fi

done


Para ejecutar el código hay que instalar primero el paquete "exif" (por lo menos en ubuntu se llama exif y solo hay que hacer "apt-get install exif" para instalarlo). Después crear un archivo de texto que contenga el script en la carpeta donde están las fotos, después ponerle permisos de ejecución al archivo, y por último obviamente ejecutar el script.

Al ejecutarlo se verá algo así:

Duplicando 120_FotosCamara 169.jpg ----> rs_20090408212231.jpg
Duplicando 121_FotosCamara 170.jpg ----> rs_20090410142704.jpg
Duplicando 122_FotosCamara 175.jpg ----> rs_20090408213007.jpg
Duplicando 123_FotosCamara 176.jpg ----> rs_20090408213656.jpg

Y es que lo que hace es crear una copia de la foto con un nuevo nombre. La copia para no perder el original obviamente. Si os fijáis, el nombre del archivo es básicamente, una cadena fija "rs_" (para luego poder hacer "mv rs_*.jpg a_otro_sitio") y la fecha de adquisición puesta en el siguiente orden: "AAAAMMDDHHmmss". De esa forma, cuando se ordenan las fotos por su nombre en orden ascendente, directamente ya están ordenadas en el orden cronológico adecuado.

Saludos y que lo disfrutéis.