Agregador de canales de noticias
Qdemos es finalista de la Fase Local del CUSL
Pues eso… ¡que el Miercoles presentaré Qdemos en la final de la fase loca del CUSL de la Laguna. Aquí está toda la info así como el resto de finalistas. ¡Nos vemos el Miercoles!
INFORMACIÓN
El próximo 30 de abril a las 18:00 (en Google Calendar) tendrá lugar en el Salón de Grados de la Escuela Técnica Superior de Ingeniería Informática la fase final del IV Premio Local Universidad de La Laguna del VIII Concurso Universitario de Software Libre.
En esta fase los finalistas presentarán durante 10 minutos sus proyectos en un acto público ante el comité de evaluación. Dicha presentación versará sobre sobre los objetivos, motivaciones, experiencias y curiosidades que les ha proporcionado el desarrollo del proyecto. Al final de las mismas el comité hará públicos los proyectos ganadores.
Para no extender demasiado esta fase y después de una primera evaluación, el comité local del CUSL —formado por profesores y personal de la ETSII, personal de STIC y empresas vinculadas con el software libre— ha decidido designar como finalistas a los siguientes proyectos, de entre los 18 inscritos en el concurso.
GO Engine
Daniel Herzog, Laura Fariña Rodríguez y Eliasib Jesús García Martín
Un motor gráfico multiplataforma para poder utilizar como base a la hora de realizar videojuegos. El nombre proviene de la orientación del proyecto (GameObject Engine), basado en entidades y componentes.
LockedShield
Moisés Lodeiro Santiago
Es una aplicación tanto vía web como móvil que permite guardar de un modo seguro tus contraseñas según el nivel de seguridad que tengan.
Qdemos
Paco Martín Fernández
Aplicación Android para la creación y gestión de quedadas entre amigos, permitiendo seleccionar la mejor fecha posible acorde a todos los asistentes.
R-squared
Eduardo Nacimiento García y Andres Nacimiento
Interfaz gráfica de usuario para R orientada a facilitar la docencia de Estadística en la Universidad.
Visual Assembler Machine Simulator (VAMS)
Sergio Medina Toledo, Juan Espinosa González y Daniel García García
Aplicación web para la enseñanza de arquitecturas de computadores básicas de forma gráfica y simple.
Sin duda queremos dar la enhorabuena a los participantes que por su constancia y buen hacer han sabido llegar hasta aquí.
También queremos animar a todo el personal, estudiantes de la ETSII y amigos, así como a toda la comunidad de software libre de la Universidad de La Laguna, a participar en este acto. Tanto para arropar a los finalistas en esta última fase como para conocer de primera mano en que han estado trabajando desde que el concurso se puso en marcha en el mes de octubre.
Sin duda podemos afirmar que hay mucho potencial en lo que han hecho.
¡Rumbo a la final!
Ayer día 26 se anunciaron los proyectos que pasan a la fase final del Concurso Universitario de Software Libre en la ULL entre los cuales ¡se encuentra LockedShield!
Tema aparte, aunque muy relacionado, ya han pasado algunos días desde que se publicó LockedShield como versión de testeo para android y para cliente web y no podía ser menos, tiene fallos.
En la próxima versión se intentarán corregir y mejorar los siguientes aspectos:
Por parte del cliente:
- Añadir swipe para transición entre pantallas ( arrastrar el dedo de un lado a otro )
- Bajar el tiempo de las transiciones para dispositivos móviles ( necesitan un mayor tiempo para reaccionar y por tanto hay que eliminarlo de la otra parte )
- Aumentar el tiempo en los mensajes de alerta, información y error ( aunque ya se está trabajando en una versión “más” nativa que interactúe directamente con el sistema en java y no en javascript ).
- Se arreglarán textos que no se muestran correctamente en dispositivos móviles.
- Modificar algunos textos para darles más sentido
- Se reiniciará el form de guardar contraseña cuando se guarde correctamente
- La pantalla de login será independiente como una página más debido a que el menú lateral confunde.
- Posiblemente se agregue una barra inferior con iconos que facilitarán el acceso a los menús.
- Añadir las funcionalidades que en el post anterior se especificaron que no funcionaban aún como borrar contraseña, editar contraseña, borrar/editar servidor, etc.
Por parte del servidor:
- Hasta la fecha, para cada dispositivo se genera un par de claves asimétricas ( sí, parece una locura pero cuando empecé tenía sentido para aumentar la seguridad ya que se podía elegir entre un cifrado de 512, 1024, 2048.. ). Ahora me estoy planteando en generar para el servidor 4 claves ( públicas y privadas ) donde las privadas se guarden en un texto en alguna carpeta ( obviamente no accesible vía navegador ) y las públicas queden a disposición de los usuarios. Estas claves se regenerarían cada X tiempo para evitar romper el cifrado por ataques por fuerza bruta.
En general:
- Documentar el código
Todas estas mejoras serán próximas pero no estarán para el concurso puesto que ahora hay que trabajar en una presentación para el producto y posteriormente ejercer como estudiante ( ¡hola época de exámenes! ). Se espera que para verano ya exista una versión funcional y optimizada hasta con auto-instalador de cliente/servidor para que montes tu propio servidor donde te apetezca.
¡Por supuesto que tengo muchas ideas más pero no las voy a revelar todas el primer día :P!
First prize
Today, the application has won the first prize in the Free Software by Sevilla. In a few days we will compete in the national phase with the other projects.
The promotional video
Thank for all!
Markdown & IRC (Freenode, #shoali)
New version and promotional video
Hi everyone!
In Github have the lastest version of the web and the app.
In YouTube have the promotional video also.
GP in RTS games paper presentation at #Evostar2014
We are presenting the poster of our paper “Tree depth influence in Genetic Programming for generation of competitive agents for RTS games” in the Evostar 2014 conference, that is being held in Granada. Several services and implementations, with new individuals representations have been added to OSGiLiath to allow Genetic Programming. The abstract:
This work presents the results obtained from comparing different tree depths in a Genetic Programming Algorithm to create agents that play the Planet Wars game. Three different maximum levels of the tree have been used (3, 7 and Unlimited) and two bots available in the literature, based on human expertise, and optimized by a Genetic Algorithm have been used for training and comparison. Results show that in average, the bots obtained using our method equal or outperform the previous ones, being the maximum depth of the tree a relevant parameter for the algorithm.
Here a photo of the poster presentation (the poster can be downloaded from here):
Photo by @ccottap.
You can download the paper draft from here or from the Publications section.
Streaming de vídeo entre navegadores vía WebRTC Datachannel y Media Source Extensions
Hoy vamos a llevar a cabo un experimento que nos permitirá enviar un vídeo en streaming entre uno o varios navegadores Web. La aplicación Web nos permitirá cargar un fichero de vídeo en el navegador, dividirlo en bloques, enviar los bloques a otros navegadores y reproducir el vídeo en todos ellos. ¡Todo en tiempo real!
Para conseguir esto, que puedes probar en http://www.p2psp.org/webrtc-streaming/, necesitamos echar un vistazo a los elementos Datachannel de la API WebRTC y Media Source Extensions (MSE). El primero nos permite compartir datos binarios entre los navegadores a través de peer to peer y el segundo nos permite enviar los trozos de vídeo directamente a la etiqueta <video> mediante un modelo de buffering.
Nota: Puedes ver otro ejemplo de Datachannel en Entendiendo WebRTC PeerConnection con un chat multiusuario
Leyendo el fichero desde el Navegador Web
Para cargar el vídeo al navegador vamos a hacer uso de la API de archivos que nos permitirá cargar en memoria trozos del fichero de vídeo de una longitud determinada e ir enviándolos al resto de navegadores para que puedan reproducirlo en tiempo real.
function readBlob(size) { var files = document.getElementById('files').files; if (!files.length) { alert('Please select a file!'); return; } var file = files[0]; var start = size; var stop = file.size - 1; if (size>file.size) return; var reader = new FileReader(); //Se dispara cuando se ha completado la solicitud. reader.onloadend = function(evt) { //Es necesario comprobar el estado if (evt.target.readyState == FileReader.DONE) { // DONE == 2 handleChunk(evt.target.result); //Enviamos el bloque de video al reproductor (etiqueta video) sendChatMessage(evt.target.result); //Comparitmos el bloque de vídeo con el resto de navegadores (via DataChannel) } }; reader.onload = function(e) { feedIt(); //Continuamos leyendo };//Extraemos un trozo de vídeo (1024 bytes)
var blob; blob = file.slice(start, start + 1024) reader.readAsArrayBuffer(blob); }
//Solicitar leer los siguientes 1024 bytes. function feedIt(){ readBlob(chunksize); chunksize+=1024; }
Alimentando la etiqueta vídeo mediante MSE
En la versión regular de Chrome ya está disponible Media Source Extensions aunque por el momento sólo permite el uso de vídeos en formato WebM. Veámos como funciona:
function handleChunk(chunk){ //Almacenamos los bloques en un buffer temporal queue.push(chunk); current++; //Cargamos la etiqueta video con mediaSource if (current==1){ video.src = window.URL.createObjectURL(mediaSource); video.pause(); } //Alimentamos Media Source if (current>=2){ appendNextMediaSegment(mediaSource); } //Después de un pequeño buffer comenzamos a reproducir if (current==128){ video.play(); } } function onSourceOpen(videoTag, e) { var mediaSource = e.target; if (mediaSource.sourceBuffers.length > 0){ console.log("SourceBuffer.length > 0"); return; } //Indicamos el tipo de contenido de mediasource var sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vorbis,vp8"'); //Obtenemos el primer bloque en el buffer (cabecera?) var initSegment = new Uint8Array(queue.shift()); if (initSegment.length==0) { //Si el bloque está vacío hay un error mediaSource.endOfStream("network"); return; } // Añadimos el primer bloque a Media Source var firstAppendHandler = function(e) { var sourceBuffer = e.target; sourceBuffer.removeEventListener('updateend', firstAppendHandler); appendNextMediaSegment(mediaSource); }; sourceBuffer.addEventListener('updateend', firstAppendHandler); sourceBuffer.addEventListener('update', onProgress.bind(videoTag, mediaSource)); sourceBuffer.appendBuffer(initSegment); } function appendNextMediaSegment(mediaSource) { //Comprobamos si media source esta listo if (mediaSource.readyState == "closed"){ console.log("readyState is closed"); return; } // NOs aseguramos que el bloque anterior no está pendiente if (mediaSource.sourceBuffers[0].updating){ return; } //No hay nada en la cola? if (queue.length==0) { return; } //Enviamos el siguiente bloque a Media Source var mediaSegment = new Uint8Array(queue.shift()); mediaSource.sourceBuffers[0].appendBuffer(mediaSegment); } //Cada vez que Source Buffer actualize intentamos añadir el siguiente bloque function onProgress(mediaSource,e) { appendNextMediaSegment(mediaSource); }Enviando los bloques al resto de peers
Partiendo del ejemplo del Chat con WebRTC, esta parte es muy sencilla ya que sólo hay que controlar lo que se recibe y se envía desde los DataChannels:
function setupChat(i) { channel[i].onopen = function () { btnStream.disabled=false; }; //Cada vez que recibimos un bloque lo enviamos al reproductor channel[i].onmessage = function (evt) { handleChunk(evt.data); }; } //Enviamos el bloque al resto de navegadores (peers) function sendChatMessage(chunk) { for (i in peerlist){ if (peerlist[i]!=idpeer){ try{ channel[peerlist[i]].send(chunk); }catch(e){ console.log(i+" said bye!"); } } } }Nota: Puedes encontrar el código completo de este experimento en Streaming de vídeo con WebRTC. Recuerda que es un experimento y puede contener errores.
Este experimento, por el momento, sólo funciona en Google Chrome (incluido Chrome for Android)
¡Participa!, si tienes dudas o sugerencias déjalas en los comentarios.
Listado y relación de las secciones en la aplicación
Funcionalidad de Shoali
Habemus App!
Bueno, después de díassemanas meses de duro trabajo ya puedo decir que hay una versión alpha de LockedShield lista para descargar y probar
Instrucciones de uso:
- Bajar la aplicación de http://lockedshield.wesped.es/servidor/LockedShield.apk
- Instalar en tu dispositivo Android
- Probar y, si eres tan amable, reportar errores y/o sugerencias por facebook, email o como quieras.
Como podrán observar la aplicación es sumamente fácil de utilizar. En la parte superior vemos una barra gris con dos botones a los lados. El de la derecha abre el menú para autentificarte como usuario ya registrado. El de la izquierda abre un menú de opciones.
- Cerrar menú ( para cerrarlo ). También se puede hacer “tap” fuera del menú para que se cierre automáticamente.
- Acerca de… ( aún no funciona :p )
- Gestor de Servidores
En esta última opción se podrán “gestionar” ( de momento sólo agregar ^_^U ) servidores de la aplicación. Por defecto ya rellené uno con la dirección al servidor que tengo alojado aquí aunque por supuesto pueden bajar el código del servidor del repositorio.
Ahora las instrucciones de uso:
- Para autentificarte antes debes registrarte, de modo que, una vez agregado el servidor de prueba puedes registrarte con un usuario y contraseña. Este paso puede tardar un poco ya que, tanto cliente como servidor estarán generando un par de claves para establecer una conexión segura.
- Una vez dentro ( obvia el mensaje en rojo que aún no tengo implementada la recuperación de la cuenta por esa vía ). Puedes sincronizar contraseñas, guardar una nueva, salir de tu cuenta, sincronizar dispositivos, generar códigos, ir a las opciones, ver recomendaciones de seguridad,etc ( realmente no hay un etc.. )
- Generar un código de seguridad: Antes de hacerlo, intenta acceder con tu cuenta en la siguiente dirección con otro dispositivo que no sea el móvil ( Haz click aquí ). Una vez te autentifiques ( ojo, no registrar aunque sí deberás agregar nuevamente el servidor ya que recuerda, la información NO se guarda en el servidor ) verás ( o deberías ) ver la pantalla de espera donde se solicita un código y, opcionalmente, un nombre de dispositivo. Ahora desde tu móvil ve al menú y genera un código de seguridad ( válido durante media hora ) e ingrésalo en el navegador ( de lo contrario no podrás acceder ). Si todo ha ido bien podrás haber accedido a tu cuenta ( aunque por seguridad se te pida otra vez la contraseña )
- Guardar contraseña. No tiene misterio alguno, simplemente guardas una contraseña con una referencia. Se manda al servidor y si quieres, desde el navegador, ahora haz click en sincronizar contraseñas para ver la/s contraseña/s guardada/s.
- Sincronizar contraseñas: Sincroniza las contraseñas con el servidor.
- Dispositivos. Si haces click en sincronizar dispositivos ahora podrás ver el del navegador o como lo llamaras y un interruptor en la parte derecha que, en azul, muestra “Sí”. Significa que ese dispositivo tiene acceso a tu cuenta. Si alguna vez pierdes ese dispositivo o te dejaste la sesión abierta en algún lugar basta con ir a esta opción y hacer click encima de él para que cambie a “No” y se le corte el acceso.
- Si hacers click en el cuadro azul que se encuentra al pie de la pantalla en tu cuenta, podrás ver un listado de recomendaciones de seguridad ( falla en pantallas pequeñas )
- Si quieres salir de tu cuenta, haz click en “Salir de cuenta”. Fácil, ¿verdad? xD
De momento esto es todo. Una aplicación medianamente funcional al menos para que se pueda ir probando su funcionamiento. Por último, si quieres ver la base de datos por dentro ( uy, qué temerario soy ). Puedes conectarte remotamente usando los siguientes parámetros:
Host: 212.83.191.171 User: lockedsh_tester Password: l0cK3d5h13lD Base de datos: lockedsh_lockedshieldtest( Tranquilos, sólo pueden hacer selects :p )
¡Hasta pronto!Como usar Carmetry
Después de la presentación de Carmetry en la edición local del CUSL organizada por la OSHL de la UMH, muchos han sido los que nos han preguntado acerca de utilización y funcionamiento de nuestro servicio. Entre los nervios, la competencia y los focos se nos pasaron algunos detalles, tanto técnicos como comerciales, por comentar.
Carmetry es un asistente de conducción, el cual mediante una app móvil recogemos los datos. Estos datos nos lo suministra el propio coche mediante un protocolo llamado OBDII, concebido en un principio para el diagnostico de fallos en el vehículo por parte de los talleres. Por ello, funciona desde cualquier coche relativamente antiguo, puesto que su uso es obligatorio desde 1991 (lo sentimos pero los clásicos se quedan fuera). La utilización de este protocolo es completamente seguro, puesto que está concebido para diagnosticar solo permite “leer” y no modifica en ningún momento el propio vehículo, de la misma manera que no se necesita ninguna licencia ni perdemos nuestra garantía por usarlo.
Hemos comentado mucho el tema de que con Carmetry ahorramos combustible y es cierto, además de monitorizar los datos que nos aporta el vehículo, analizamos la conducción del usuario y le alertamos cuando hace un consumo innecesario de combustible mediante un pop-up y un leve sonido. Este consumo elevado puede ser por realizar una salida muy rápida o variamos notablemente nuestra velocidad, por nombrar alguno ejemplos.
Nuestro modelo de negocio, ha diferencia de el de muchos otros, se enriquece con la liberación del código fuente de nuestras aplicaciones. Esto es así puesto que nuestros ingresos provienen de los datos anónimos recogidos. De esta manera, todo aquel que utilice, copie, mejores nuestras aplicaciones estará contribuyendo directa o indirectamente a Carmetry. “El código abierto no siempre implica renunciar a hacer negocio”.
Esperamos que con esto, hayamos resuelto todas vuestras dudas. Y os recordamos que en este enlace tenéis el vídeo de presentación.
¡Habemus una aplicación!
Igual aún es muy pronto para tirar cohetes pero ya LockedShield va tomando forma. Aún no he realizado la migración del código a Android pero sólo es cuestión de horas/días.
Actualmente el proyecto es medianamente funcional con respecto a la idea básica de gestionar contraseñas ya que permite:
- Guardar servidores
- Registrarte con tu cuenta de usuario
- Loguearte/Autentificarte
- Si es desde un dispositivo conocido ( navegador ya usado/móvil ) lo hace sin paso intermedio.
- Si es un dispositivo no registrado, solicita una clave que se genera en el dispositivo conocido.
- Generar los códigos de registro ( si no, ¡menuda gracia! xD )
- Guardar nuevas contraseñas en el servidor elegido
- Recuperar el listado de contraseñas
Otras minucias han sido pantallas estáticas con consejos sobre seguridad y otras curiosidades que si todo va bien en unas horas estarán en el repositorio.
Por supuesto que tengo mil ideas más ( hacer una extensión para Chrome y FF ), mejorar el sistema, hacer un sistema de contraseñas compartidas, un sistema de control de base de datos ( como un git pero algo más limitado :p ) y mucho más que pronto se verá.
Segunda versión alfa
Ya tenemos disponible la versión 0.2 (alfa) de R-squared-project.
Hay que realizar los siguiente pasos para instalarlo:
- apt-get install r-base
Ejecutar R en la consola y escribir:
- install.packages(“RInside”)
- install.packages(“R2HTML”)
Finalmente instalamos el paquete:
- dpkg -i r-squared_0.2-1_amd64.deb
Enlace a la presentación.
Si queréis ver nuestra presentación acceded por favor al siguiente enlace:
https://docs.google.com/presentation/d/1lyuhOSfykw5ESGJgkO0gmkUZZ9-p0woeZbQ_8RaoYRc/edit?usp=sharing
Saludos.
Francisco Aroca.
Dando forma a la emisión de contenidos en la Web
Hoy hace un mes que el profesor Vicente González y yo regresábamos a Almería después de nuestra estancia en Munich (Alemania) para asistir como ponentes en The Fourth W3C Web and TV Workshop, el objetivo del workshop era dar forma a la próxima generación de televisión y emisión de contenidos sobre la Web, prestando especial atención a la situación actual de la tecnología y de los estándares. Fueron dos días de interesantes charlas y debates organizados por el W3C, del que hay que destacar la impecable organización y profesionalidad con la que se llevó a cabo el evento.
En nuestra exposición presentamos a los asistentes el protocolo P2PSP y sus bondades, especialmente su simplicidad. Además, y puesto que el objetivo se centraba en los estándares, expusimos algunos problemas derivados de la falta de estos, como la necesidad de un formato de vídeo universal aceptado por todos los navegadores, el soporte limitado de la API WebRTC y la necesidad de trabajar duro en MediaSource Extensions para conseguir un soporte multimedia completo en el navegador Web.
Para terminar, me gustaría aprovechar este post para agradecer la colaboración del grupo Supercomputación-Algoritmos de la Universidad de Almería y de Luxunda que hicieron posible nuestra asistencia al workshop.
Carmetry – Boost your car experience
Después de una interminables y agotadoras ahoras de rodaje y edición, os presentamos el vídeo promocional de nuestro servicio.
Danda la celeredidad y el equipo del que disponíamos, no hemos podido conseguir mejor resultado, esperamos que os guste.
Entrega final de la App
¡Saludos a tod@s!
Ya hemos acabado con el prototipo de Save Time App.
Esta tarde a las 15:00 empezarán las presentaciones en el edificio Innova de la Universidad Miguel Hernández. Esperemos que salga según lo previsto.
La última versión ha sido actualizada en nuestra forja de Github: https://github.com/savetimeapp/Save-Time-App
Esperamos que os guste.
Francisco Aroca.