Surfistes a càmara lenta

Generació concurrent d’elements multimèdia (part II)

Publicat per: alejobs el: Agost 4, 2009

Un cop millorat el rendiment “global” del nostre generador, volíem fer més ràpid el procés de generació dels videollibres, doncs és el format que menys hem generat fins ara i el que triga més.

Per això vam fer unes estadístiques detallades de quant es trigava en generar un videollibre. I vam veure que el “coll d’ampolla” estava, principalment, al procés de conversió de Flash a Video (MPEG-4). Podia arribar a ser entre un 75 i un 83% del temps total de generació. Aquest procés s’executa a través d’un programa anomenat Moyea. El cridem des del nostre projecte Java, indicant-li el path de l’arxiu Flash (.swf) i els paràmetres del vídeo MPEG-4 de sortida.

Un dels incovenients del conversor de flash a vídeo (i encara no hem trobat cap que ho sàpiga fer) és que no sap quant dura aquest, ja que tota l’animació està basada en actionscript. Per a ell és com un flash d’1 sol frame, i si no li indiquem res, recorre aquest frame i deixa de capturar. Per a evitar això, Moyea té la opció d’indicar-li els segons que vols que estigui capturant el Flash.

És per això que cada conversió d’un flash dura com a mínim el temps de reproducció del mateix. Això ens causa un coll d’ampolla molt gran. Llavors vam provar de cridar vàries instàncies del Moyea a la vegada, a veure si podíem anar generant diferents vídeos de forma concurrent. I va sortir perfectament.

Així doncs, només calia que, quan generem un videollibre i arribem al pas de generar tots els vídeos d’un mòdul, en comptes d’anar-ho fent en sèrie, un darrera l’altre, creem uns quants threads (controlem el número màxim amb una constant) i anem convertint uns quants arxius flash a la vegada.

És així com ho hem acabat fent i, la veritat, és que el rendiment ha millorat molt. Ara a veure com es comporta a llarg termini. Ja us explicarem!

Generació concurrent d’elements multimèdia (part I)

Publicat per: alejobs el: Juliol 30, 2009

Un dels objectius que tenim fixats dins del projecte MyWay (generació dels continguts de les assignatures en diferents formats) és aconseguir un ritme de generació bastant elevat. Penseu que no només hi ha els continguts nous d’aquest any, sinó que també tenim tota una llarga llista d’assignatures d’anys passats i que també hem de generar.

Amb aquest objectiu al cap, i sabent que els continguts que triguen més a generar-se són els audiollibres i els videollibres (generar un ebook al estil epub o mobipocket d’una assignatura no costa més de 5 minuts!!), ens vam posar a pensar de quines maneres podíem accelerar el procés de generació.

Primer de tot, vàrem veure que no podíem permetre’ns el luxe de generar només una assignatura a la vegada, doncs un videollibre podia arribar a trigar fins a 24h en generar-se. Així doncs vam establir, dins del nostre projecte (J2EE + Spring + Tomcat) un sistema de gestió de treballs o tasques amb Quartz. Nosaltres programem els treballs que volem fer i establim el màxim número de treballs (o threads dins del nostre generador) que es poden estar executant alhora.

D’aquesta manera també aconseguim que, si s’està generant un videollibre, no bloquegi durant 24h o més el procés de generació d’un ebook o audiollibre. Nosaltres tenim establerts 3 treballs: un que va comprovant si hi ha assignatures noves a generar (en cas afirmatiu inserta una petició d’aquella assignatura per cadascun dels 4 formats actuals), un que genera els formats d’ebook (epub i mobipocket) i un altre que genera els formats amb veu (audiollibre i videollibre).

Aquests 3 treballs “programats” s’executen, tal com hem esmentat, alhora, fins a un màxim de 3 treballs concurrents (podem augmentar o disminuir aquest número al nostre gust). Així doncs podem tenir al mateix temps generant-se 3 formats de 3 assignatures diferents (3 videollibres o 2 videollibres i 1 audiollibre …). Tot depèn de la capacitat i càrrega del servidor on s’estigui executant!

En la pròxima entrada explicarem com vàrem millorar, a continuació, el procés de generació d’un videollibre.

Eina d’anotacions i el Pensament Salvatge

Publicat per: joseprivera el: Juliol 23, 2009

Estem desenvolupant una eina d’anotacions que permet destacar textos de pàgines html com fariem amb un rotulador a sobre d’un paper. És el que s’ha fe tota la vida: amb un llàpis subtratllem allò que creiem més interessant d’un llibre. Per saber-ne més podeu llegir l’entrada coresponent del al web del peojecte MyWay.

Ara bé, amb la web podem fer coses molt interessants que amb paper serien impossibles. Si agreguem tots els destacats, construïm automàticament un resum (1). Tambè pot servir per a rectificar alguna dada, nomès cal destacar el text erroni i afegir un comentari (2). A més professor i estudiant poden preguntar-se coses dins d’un context: “AIXÒ no s’enten, m’ho pots explicar?” (3). I finalment, uns i altres poden compartir les seves troballes, els seus comentaris (4).

En tot cas al que realment m’engresca és que estem creant una eina que ha de permetre a cada estudiant crear les seves pròpies col·leccions. M’explico. Recordo haver llegit fa anys “El pensament salvatge” de l’antropòleg Lévi-Strauss. Haig de reconèixer que no vaig entendren ni un borrall, però una cosa em va quedar clara: el francès descobreix un pensament (que va anmomenar “salvatge” tot i que és tan actual i important com el “científic”) que es caracteritza pel fet que qui el porta a terme col·lecciona fragments d’informació o eines, les classifica i posteriorment les fea servir fora del seu context original. Clar i ras: les recicla.

I què és l’eina d’anotacions sino una eina de reciclatge? Una eina que permet que cadascú es creii les seves pròpies col·leccions i les endreci d’una manera determinada? Encara més: una eina que permet que els estudiants comparteixin no sol les peces sinó tambè la forma de classificar-les. És el pensament salvatge… 2.0.

Jornades Open Social Learn

Publicat per: joseprivera el: Juliol 9, 2009

La setmana passada vaig tenir la sort d’assistir a unes jornades que organitzava la Càtedra Unesco i a on es va parlar d’un concepte que es comença a sentir força: el Social Open Learn. Encara no s’hi troba a la Wikipedia, però no trigarà en arribar-hi. Altres termes similars com Open learning, Cooperative Learning i Social Learning si que hi son presents a l’enciclopèdia.

Clar i ras: apendre sol està bé però apendre en comunitat és encara millor perquè es desencadenen tot un seguir de factors emocionals que porten l’aprenentatge un pas més endavant. Apendre amb altres era un procès que havia estat confinat fins ara a les aules, ja siguin d’una escola o d’una universitat. Però Internet ha dinamitat aquests límits.

Acaba aquesta dinàmica amb les universitats? Segurament no, però alguna cosa canviarà. Anem a pams. Per a analitzar els canvis farem servir l’anàlisi que fa en David Wailey divideix de la cadena de valor d’una institució docent. Ell hi veu tres elements: la creació de coneixement; l’aprenentatge; i l’acreditació.

Respecte al primer punt queda clar que avui en dia una universitat no pot confinar el coneixement que genera dins dels seus murs. Mai ha sigut així i avui en dia és encara més evident que hi ha d’haver una permeabilitat entre el que s’explica dins i el que s’explica fora. Els propis estudiants forcen dia a dia aquesta osmosi, posant en entredit el que se’ls hi explica.

Però l’aprenentatge tambè canvia: s’obre a l’exterior arrossegat novament per la pressió dels propis estudiants que volen mostrar el que estan aprenent i contrastar-lo amb una comunitat tant amplia com sigui possible. Tammateix, cada cop és més fàcil que comunitats no oficials organitzin el seu aprenentatge al voltant d’eines col·laboratives.

Fins i tot l’acreditació es pot veure afectada. QUè impedeix que els propis alumnes s’avaluin entre ells? En un món cada cop menys meritocràtic, en comptes de fiar-nos dels demès busquem nosaltres mateixos les dades que ens serviran per a desenvolupar el nostre propi criteri. Així doncs, perquè el criteri del professor és el que ha de ser el de referència?

En aquest escenari comencen a pendre força la idea d’una Plataforma d’Aprenentatge Obert: una eina que agregui les tasques que un alumne va fent aquí i allà i que faciliti coses com ara l’usabilitat de l’entorn i la traçabilitat que necessita el professor per avaluar.

L’Ismael Peña ha fet un resum excelent de les jornades en una, dos i tres parts. Altrament paga la pensa seguit el blog de Dolors Reig, tot un referent en aquests temes.

En el últim post sobre detecció de duplicats les coses no pintaven bé, s’havia fet una primera versió del detector, però no acabava de ser el que necessitem, ja que detectava duplicats exactes, això vol dir que un parell de documents amb l’ordre dels paràgrafs canviats el considerava diferents. El objectiu del projecte quedava modificat, no busquem duplicats, sinó near-duplicates, o sigui documents que son iguals en contingut, simple i obvi, no?

Per desenvolupar el nou algoritme ens hem començat per llegir una sèrie d’articles que parlen d’aquest tema, i a partir d’aquests articles hem desenvolupat el algoritme de Charikar’s simhash (és el mateix que utilitza google).
Detecting NearDuplicates for Web Crawling
Similarity estimation techniques frum rounding Algorithms
Finding NearDuplicate Web Pages: A LargeScale Evaluation of Algorithms
L’algoritme consisteix en:

Els documents que es volen avaluar es separen en ngrams (paraules agrupades de n en n), per cada una d’aquestes paraules, es diuen tokens normalment, generem un valor de hash de 64bits, nosaltres hem utilitzat el Ranbin hash perquè és molt ràpid.
És crea paral.lelament un Vector de ints de tantes posicions com bits té la funció de hash (64b), inicialitzat a 0.

Cada ith bit del valor hash modifica el valor vth del vector de la següet manera:
ith = 1 incrementem el bit vth del vector en 1
ith = 0 decrementem el bit vth del vector en 1.
per exemple:
Si hash(hola) = 0 1 1 1 0 1 1 0 0 0
v = 1 1 0 2 -3 6 -2 0 0 0
vfinal = 0 2 1 3 -4 7 -1 -1 -1 -1
al final ens quedarà un vector així:
V = [-123,-76,10,0,0,-12,1,3] aquest vector el transformem amb un fingerprint de la següent manera:
si ith valor > 0 vth bit del fingerprint 1
si ith < 1 vth bit del fingerprint 0
així doncs quedaria així F = [0,0,1,0,0,0,1,1]

I aquest és l'algoritme.
El pròxim post, analitzarem els test obtinguts d'aplicar aquest algoritme.

La primera versió del detector de duplicats ja està en marxa, i una vegada en marxa veiem les seves mancances.

En aquests moments detectem documents duplicats en el cas que un document sigui idèntic a un altres o un respecte l’altre només variïn paraules que no son paraules clau. Això està bé, però no es suficient, el que volem detectar son el que s’anomena near-duplicates, documents idèntics en contingut.

Dos documents poden ser idèntics en contingut però amb diferent estructura o poden contenir parts del text poc rellevants, títols o annexes.
Aquesta és la situació que hem detectat, tenim documents en diferents formats (PDF, web, xml,…), si extraiem el text d’aquests documents ens podem trobar que el PDF té idèntic contingut que el XML, però amb l’ordre dels elements canviats, per tant el sistema considera que son diferents. També podem trobar que del xml extraiem el contingut dels tags, però no el nom dels tags (introducció, objectius,…), en el PDF s’extreuen els nom dels tags perquè estan com a contingut, i elements extres com el Index del PDF, i els currículums i les fotos i els elements flash i els exercicis que es maqueten d’una manera especial i la bibliografia i el glossari i i i més més més,……………………………………………

Per tant s’ha de buscar un altre sistema hem de passar d’un detector de duplicats a un detector de near-duplicates.

Google porta treballant amb aquest tema des de com a mínim el 2005, ha tret un sistema de detecció de duplicats i la patentat, com sempre un pas endavant. Goole a montat el seu sistema de duplicats basant-se en el Charikar’s simhash fingerprint. Que és? Com funciona? ho deixem per la proxima.

Referencies:
http://dsrg.mff.cuni.cz/~holub/sw/shash/#a1.
Similarity Estimation Techniques from Rounding Algorithms
Detecting NearDuplicates for Web Crawling

El mon i la persona

Publicat per: strongis2009 el: Juny 26, 2009

Aquest Blog normalment està pensat per projectar el dia a dia i els reptes que hem de superar a nivell tècnic.

No obstant això mai està de més fer un “parón” en la teva rutina habitual, aparcar el dia a dia i respirar. Per això aquest és un article que convida tan sol a la reflexió.

Quan em vaig registrar per a la Summer Conference en Monterey, vaig haver de detallar les meves dades personals, a més de les normals de tota la vida, el meu Gmail, el meu Twitter, el meu Flickr, el meu Delicous, el meu Facebook, el meu canal YouTube, el meu avatar Second Life i fins i tot vaig acabant inserint comentaris al Voicethread.

La meva vida és més pública que mai. M’interessava mantenir contacte amb les diverses persones que assistien al congrés i realment mantenir al dia totes aquestes aplicacions resultava esgotador. El paperet que ens penjava del coll i en el qual es fixaven totes les persones, mostrava el nom del teu avatar en Second Life, un absurd enllaç directe a la manipulació de la realitat.

La immersió en tota aquesta selva de noves eines de relació social contrasta amb la dels nostres pares, tan solament una generació enrere. Es reflexa molt be en els gràfics basats en una conferència molt interessant de Marco Torres a la que vaig assistir a Monterey que he versionat per aquest article.

Actualment, el nostre equip immers en diversos projectes basats en tecnologies audiovisuals, no ho fa com a suport a material convencional sinó com a base de la relació entre els nostres usuaris. Des del desenvolupament d’eines de videoconferència, enregistrament d’àudio i vídeo a través de les càmeres instal·lades en els equips del client i fins i tot a les aules, conversió de materials d’estudi a formats de vídeo i àudio amb l’objectiu de fer-los més accessibles, eines per poder triar la informació que reament necessitem… realment son projectes molt engrescadors i interessants que estan orientats a fer la vida menys complicada als nostres estudiants.

Els meus projectes, estan ara en fase de pressa de requeriments, i com avui en dia es pot fer pràcticament el que vulguis (en qüestió de manipulació de la informació s’entén), aquestes fases resulten interminables i et dificulta aquella intuïció personal que et porta a la idea genial o a un producte original i útil.

Analitzant, les necessitats i possibles solucions que tenim avui dia al nostre abast em ve al capdavant una cançó de Queen que diu “I want it all…and i want it now”. Crec que com sempre la resposta està a assolir l’equilibri, un concepte molt necessari per a la nostra persona, el nostre entorn i fins i tot per al nostre planeta que es ressent de la nostra acceleració.

Per això el concepte de personalització ho trobo summament important, perquè hem de tornar a l’origen que al cap i a la fi som nosaltres com persones, amb preferències, aficions i el nostre mon interior. Crec que hi haurà un canvi aviat, i nosaltres el viurem, i no ho dubto, hi posarem el nostre gra de sorra.

Benvinguts doncs projectes com MyUoc o MyWay perque incideixen en la persona, la reflexió s’ha de basar en la qualitat més que en la quantitat. Així que a càmera lenta o no, surfear amb prudència i lo mes important, arribar a la vorera passant-lo bé.

Per què OpenLaszlo?

Publicat per: alejobs el: Juny 25, 2009

Quan varem estar investigant sobre les diferents tecnologies que ens podrien ajudar a generar de forma automàtica VideoLlibres, ens varem decantar per OpenLaszlo. Per què?

videoLlibre

Dintre de les tecnologies que varem trobar, hi havia la possibilitat de fer-ho amb l’estàndard SMIL, que permet la creació de presentacions audiovisuals enllaçant i animant diferents recursos d’imatges, àudio o vídeo. Està basat en XML, així que no ens suposava un gran problema la seva generació. El tema era que el format que generava, .smil, no era molt portable a diferents plataformes, com ara dispositius mòbils.

Una possible solució per al format SMIL era generar un vídeo en format MPEG-4 a partir de l’estàndard XMT-O, que és un derivat del SMIL. No obstant, només varem trobar papers i algun grup d’investigació que tractessin aquest tema, però cap eina funcional.

Així doncs, varem seguir investigant per trobar altres tecnologies alternatives. I és aquí quan varem trobar OpenLaszlo, que és l’alternativa OpenSource al conegut Adobe Flex. La programació amb OpenLaszlo es fa amb el format .lzx, derivat de XML. Per a l’animació i control d’events s’utilitza JavaScript. L’avantatge d’aquesta línea en front al format .SMIL és que, un cop generat el Flash, existeixen moltes eines que converteixen de Flash a AVI o MPEG-2, formats que es poden reproduir en quasi qualsevol dispositiu.

Ara que ja portem uns quants mesos generant amb OpenLaszlo, podem afirmar que va ser una elecció bastant correcte, encara que té unes quantes limitacions. Com que Adobe va alliberar la tecnologia Flex, quedant-se només amb l’entorn de desenvolupament, estem pensant en utilitzar-ho en comptes d’OpenLaszlo, ja que la metodologia és molt semblant, però Flex té moltes més funcionalitats, ja que porta més anys i té el suport d’Adobe.

open_laszloflex

Ja us explicarem com evoluciona el tema!!

Crawler vs. Downloader

Publicat per: gladys el: Juny 23, 2009

Al comenzar el Episodio 2 del Rei, se nos vino a la mente la necesidad de un Crawler. Un bot que sirviera para recoger vía RSS los materiales de la UOC de cualquier tipo, de cualquier site que publique para tal fin. El crawler es un mecanismo que recorre recursivamente las paǵinas web y toma de ellas información en profundidad, es capaz de montar la estructura del site e incluso guardarlo físicamente en el lugar que se le indique. Al menos de momento no necesitamos un crawler, ya que, los RSS son fuentes bastante directas de lo que se necesita de un site. No necesitamos indexar los sites, necesitamos indexar materiales, éstos tienen que estar siempre en la misma ubicación en línea y cualquiera puede descargarlos a través de métodos “download” como los de org.apache.commons.httpclient.*

Luego de estudiar el droids de Apache Lucene, hemos dado con que mucha de la funcionalidad que ofrece, no nos hace falta para este Episodio del Rei. He conseguido una opción más simple que consiste en usar la clase HttpClient (org.apache.commons.httpclient.HttpClient), la cual ejecuta una instancia de la clase GetMethod (org.apache.commons.httpclient.methods.GetMethod), habiendo creado ésta última con la URL (RSS o No RSS…) que nos interesa descargarnos. Después se recoge el contenido de la instancia de GetMethod como un InputStream con getMethod.getResponseBodyAsStream().

En un principio la función devolvía el InputStream, como un AutoCloseInputStream, esto daba un problema ya que antes de que la función lo devolviese, se cerraba la conexión http, con lo cual el InputStream llegaba cerrado y no se podía usar en el lugar de la llamada. Simplemente lo que he hecho ha sido devolver el GetMethod entero, en lugar del InputStream y cerrar la conexión http luego de la llamada a la función.

De esta manera se simplifica bastante el proceso de descarga desde los sites y nos ahorramos agregar al proyecto unas cuantas librerías.

Detector automàtic de documents duplicats

Publicat per: ajuhe el: Juny 18, 2009

Tenim un cercador i tenim un dimoni que va alimentant a les col•leccions del servidor, però que passa si ens arriba un fitxer duplicat, en el que només ha variat una paraula o una frase?
Utilitzem els primers 10 segons per lamentacions i queixes sobre l’ofici que hem triat, la resta per buscar solucions.
- Primera aproximació:
Creem una fitxa per cada document de la col.lecció, això s’anomena fingerprint, que ens diu:
Num de frases.
Num de tokens totals (paraules)
Num de tokens diferents
Tokens més característics del document, els TOP 10, els calculem amb la formula de idf normalitzada, amb valor <0.8.
Amb tot això ja tenim el fingerprint d’un document.
Ho comparem amb altres fingerprints d’altres documents. Que passara?
to be continued…