may. 31
2007
Empezando por el final, las instrucciones a realizar son:
$ svn log -v -r 400:`svn info | grep Revisión | awk '{print $1}'` | grep dirprj | awk '{print $1}' | sort | uniq | awk '{print "."$0}' > dirprj-`svn info | grep Revisión | awk '{print $1}'`.txt
y luego....
$ tar -zcvf dirprj-`svn info | grep Revisión | awk '{print $1}'`.tar.gz -T -`svn info | grep Revisión | awk '{print $1}'`.txt
Traducido al verbo humano, el proceso es como sigue:
Así, a palo seco, la instrucción de consola es un poco bestia. Voy desglosando instrucciones para sacar conclusiones:
svn log es una llamada que se realiza sobre subversion para saber la actividad que ha tenido el repositorio. Al aplicar la opción -v, lo que conseguimos es que nos muestre los archivos alterados para cada actualización.
Si sacáramos todo el log quizá nos pasamos 10 minutos viendo pasar listas de archivos modificados, con lo que lo mejor es establecer un margen de revisiones. Para especificar un número de revisiones se utiliza la opción -r, que tiene la forma:
-r a:b, donde a es la revisión más antigua y b la más actual. En nuestro caso, nos interesa que b sea la última revisión realizada. Para no tener que estar cambiando continuamente el valor, ejecutamos la instrucción:
svn info | grep Revisión | awk '{print $1}'
Para ir más rápido, utilizo directamente las salidas `entrecomillando las instrucciones`. Eso sustituye el la instrucción entrecomillada por el valor devuelto.
La instrucción grep que se muestra a continuación es una cuestión de estilo. El caso sirve para los repositorios que almacenan más de un proyecto, como es mi caso. Eso permite que los subdirectorios identifiquen los proyectos relacionados. Este punto es el más adaptable a cada caso, como expone el propio manual de subversion en cuanto a estilos de gestión de repositorios se refiere. Para el caso, la instrucción:
grep nos devuelve sólo los archivos que tienen en su path el nombre indicado. La desambigüación no está de más para estos casos.
Los listados de log del subversion están bastante, maquetados, por decirlo de algún modo. Al menos la versión por defecto encuadra los resultados con guiones u otros caracteres. Además, para cada archivo indica qué tipo de modificación se ha realizado. Eso aclara la visualización pero entorpece el proceso de cañerías.
Para eliminar ese ruido, ejecuto awk:
$ ... | awk '{print $1}' | ...
Esto hace que de todos los resultados retornados por grep, me coja "la segunda palabra", es decir, la secuencia de caracteres posterior al primer conjunto de espacios. Esto lo que devuelve en definitiva es la ruta del archivo.
Dado que es probable que hayan habido varias alteraciones de un mismo archivo, decido ordenar los resultados (sort) y luego eliminar de la lista ordenada los valores repetidos. Cambiar el orden de estas dos instrucciones no da buenos resultados, porque uniq sólo mira si la fila actual es igual que la anterior.
Dado que el repositorio no tendrá un path completo, la última instrucción le añade un punto (.) al principio de toda la cadena, para dar a entender que se refiere a un path relativo al path actual (en awk, el valor de $0 equivale a toda la cadena).
¿Por qué?
Pues porque svn me devuelve "paths absolutos" respecto la raíz del repositorio, pero cuando trabajo directamente sobre la raíz de mi sistema operativo, esas rutas no son correctas. Es importante tener claro en cada momento el contexto de ejecución, y especialmente cuando trabajamos con pipes.
Almacenamos la lista de rutas limpitas y preparadas para la exportación en un archivo de texto, que para el caso hemos denominado combinando el nombre del directorio del proyecto y el número de revisión, así no hay que estar pendientes de grandes fiascos...
Para acabar, llamaremos al programa tar, utilizando la opción -T, que nos permite seleccionar de un archivo la lista de recursos a empaquetar. Así pues, ejecutamos la instrucción comentada antes:
$ tar -zcvf dirprj-`svn info | grep Revisión | awk '{print $1}'`.tar.gz -T -`svn info | grep Revisión | awk '{print $1}'`.txt
Como antes, el entrecomillado de svn info nos devuelve un valor. Por eso, es importante entender que lo que acaba recibiendo el ordenador (suponiendo que dirprj=proyecto1 y que la última revisión sea 425) es algo así como:
$ tar -zcvf proyecto1-425.tar.gz -T proyecto1-425.txt
Por lo menos detecto las siguientes mejoras posibles:
Si quieres saber más...
Puedes seguir investigando sobre los anteriores comandos en los enlaces comentados anteriormente. Te recomiendo awk (puedes empezar por algunos ejemplos de awk), ese gran olvidado que yo conocí a fondo estudiando procesamiento del lenguaje natural, cuando para procesar un corpus y categorizar los términos utilizamos esta herramienta. Ahora ya forma parte de mi vida laboral :-D.
Read more »
may. 30
2007
Le gusta su trabajo y, a diferencia de algunas de sus compañeras y compañeros de trabajo, le atrae Internet y las posibilidaes que ofrece la tecnología. Le interesa lo que sucede en la denominada web 2.0.
A pesar de ello, desconoce el significado de la mayoría de tecnicismos, y hasta la fecha sólo ha tenido tiempo de profundizar en los temas más cercanos a su profesión: los buscadores, herramientas de tagging, agregadores de contenidos, y gestores de referencias y favoritos.
En los últimos dos años, algunos de los usuarios de la biblioteca que buscan información han preguntado sobre formas de buscar información en estos sitios. Algunos estudiantes de secundaria, por ejemplo, buscan fotografías en Flickr para sus trabajos de ciencias naturales, otros buscan música con licencia Creative Commons, y otros tantos buscan información que sería fácilmente localizable mediante un buscador generalista o en una herramienta de tagging.
Ante tales preguntas, lo que para ella resulta algo complejo por su falta de dominio, para sus colegas resulta prácticamente aterrador. Más de uno reconoce que no conoce Flick, y además sigue teniendo respeto a utilizar el ordenador.
Ante la perspectiva, Ana empieza a investigar algunos de estos servicios. Decide comentarle una idea a la directora de la bibliotec: ¿Qué le parecería si difundieran la actividad de la biblioteca a través de Internet, utilizando otros servicios ajenos al sitio web institucional?
Las últimas estadísticas habían demostrado que el número de altas de nuevos usuarios se había estancado, a pesar que la directora defendía la postura de aumentar esa cantidad para aumentar el número de préstamos y así solicitar un aumento del presupuesto de adquisiciones. Ante esta perspectiva, la directora pensó que no estaría de más tratar difundir la actividad del centro. Dio luz verde a la idea, aunque solicitó que se le fuera informando de los pasos realizados.
espués de recibir una respuesta afirmativa, abre una cuenta en Flickr, otra en del.icio.us (alguien le habla de connotea y también lo prueba). Se da de alta en Youtube, echa un vistazo a las Google Apps que tiene con su cuenta de Google Mail, abre un blog en Wordpress (que evidentemente tratará de evaluar con Google Analytics) y también se da de alta como usuario en Wikipedia en castellano. Al final de la campaña de altas, ha abierto una cuenta en ocho servicios.
El primer problema de Ana es la gestión de las cuentas y contraseñas. Ha puesto la misma contraseña en todos lados, pero en algunos lados la cuenta de usuario ya estaba alojada, se da cuenta de la dispersión digital que le supone guardar esto. Además, guardar usuarios y contraseñas no es muy adecuado, ¿Verdad?
Para ubicarse un poco, recopila información que tiene disponible en la red local de la biblioteca. Básicamente se refiere a actos y cursos que se han realizado en la biblioteca durante el último trimestre. Encuentra información sobre el total de asistentes, y alguna que otra fotografía de grupo.
Con esta información ya tiene para empezar. Realiza media docena de entradas en el blog y cuelga unas cuantas fotos en Flickr. Realiza una selección de estas fotos teniendo en cuenta la calidad, las emociones que transmiten, y el hecho que no se distingan demasiado las caras de personas ajenas a la biblioteca.
Después de realizar esta tarea, busca ganar visibilidad solicitando al webmaster de su página web que enlace el blog y el espacio de Flickr. El resto de servicios ya se irán activando con el tiempo...
- Qué tal, Ana? ¿Cómo va la promoción de la web?
- Bien... Bueno, ejem -Ana trata de recordar los cuatros datos básicos que sacarían del apuro- tenemos entre 30 y 80 visitas diarias al Blog, 250 enlaces externos que apuntan a él, unas 50 fotos de cursos, dos vídeos, y... creo que 30 enlaces a nuestras guías de lectura.
- Hoy he tenido una reunión a la que ha asistido el webmaster. Me ha comentado que tenemos que aumentar no sé qué del tráfico de la banda del servidor. ¿Tú sabes algo de esto?
- Mmm... no, no tengo datos sobre las estadísticas del servidor. ¿Es un problema eso?
- Lo sería si no fuera que al resto de directores les ha entrado algo de envidia, especialmente cuando Joaquín (el webmaster) ha comentado que era la web de biblioteca pública más visitada "y de largo"... Me han preguntado cómo lo he hecho. Suerte que el Webmaster ha hablado de los referers, creo que es algo así como las citas bibliográficas, verdad?
- Sí, son los enlaces que hay en otros sitios y que la gente utiliza para acceder a nuestra web.
- Ya, entiendo... Y por qué nos enlaza la gente?
- No he tenido tiempo de entrar a fondo, pero en general han gustado las guías de lectura, y también el espacio de fotos. Lo segundo normalmente es de gente que tiene Blog y nos enlaza porque sale en una foto.
- De acuerdo... -La directora ponía cara de apuros, pero Ana lo tenía claro: con la curiosidad que tiene, lo que hoy está fagocitando la semana que viene y lo habrá aprendido-. Y eso del Pagerank? Porque dice que tenemos un 4 sobre 10.
- Vaaaya! -Ana se sorprendió: era algo en lo que no había reparado-.
- ¿Eso es mucho o poco?
- Bueno, para el tiempo que le hemos dedicado y lo competitivo que está el tema... la verdad es que no está nada mal!
La conversación decayó y la directora fue interrumpida por un colega de Ana. Poco después la directora se dirigió al despacho y Ana intentó recopilar toda la información que pudiera sobre el resultado de su actividad socializadora de la biblioteca.
Lógicamente esa información era importante para justificar el tiempo invertido. Contando mentalmente,
Ana consideraba que había invertido unas tres horas semanales en los servicios de las webs. A razón de unas 26 semanas laborables durante estos últimos meses, eso equivalía a... 78 horas? Tampoco era mucho...
Pero la directora no buscaba la justificación de las horas: no aún por lo menos. Había recibido unas cuantas informaciones que le daban por pensar que aquello quizá mereciera la pena:
¿Y tú, cómo los continuarías?
Me comprometo a continuar la historia, con pena o gloria (es que rimaba...), aunque estaría bien conocer alguna opinión...
Read more »
may. 26
2007
Lo primero que gusta del espacio reservado es que el entorno de diseño es muy parecido a un entorno visual de trabajo en entorno escritorio, aunque la velocidad se nota. Esta es quizá la única característica que no me ha gustado, aunque eso no es una cuestión de desarrollo del entorno, sino sobre el debate de si la proxima generación de aplicaciones en red se desarrollarán en el navegador con lenguajes de script o fuera de éste.
Volviendo al tema, empiezo a trastear en las opciones que aparecen en la columna izquierda del entorno de diseño. Para empezar, decido seleccionar la mayoría de mis feeds.
Dentro de mis fuentes decido hacer tres grandes diferenciaciones según el comportamiento de tales recursos:
El principal interés de la tercera tipología (que básicamente viene representada por digg.com y meneame.net) es que acostumbran a ser sitios en los que las nuevas noticias suben muy rápidamente.
Empezando por el final, éste es un pantallazo de lo que ha acabado siendo mi tubería:
El proceso ha pasado por:
Soy consciente que lo último es crítico, pero cabe pensar que si se está hablando del mundo en cuanto globo terráqueo y no del diario, aparecerá algo en Digg o en otras partes. Eso es una especulación pero de momento lo dejo ahí.
Una vez definido el proceso de filtro he filtrado para que elimine las noticias repetidas, y también que me lo ordene por fecha. Esto último me parece interesante para poder ver con calma la evolución de las noticias: dado que se recogen todos en un mismo momento, queda claro dónde ha aparecido en primera instancia la novedad.
Como resultado final, comentar que el archivo RSS devuelve más de 400 resultados. Para ser un primer intento no está mal, porque de hecho se está recogiendo información de más de 30 fuentes, dos de las cuales muy intensivas.
Como mejora, comentar que mi agregador recibe los feeds en formato HTML mostrando el código fuente y no el contenido formateado. Probablemente esto se deba a algún error de procesamiento de las entidades HTML.
En fin, una experiencia recomendable. Me ha recordado al establecimiento de categorías en base a estrategias de búsqueda, sólo que algo más desarrollado. Desde luego he echado en falta la posibilidad de desarrollar un filtro más avanzado con operadores booleanos y demás. Quizá sea yo que no he llegado al fondo de la cuestión.
Read more »
may. 21
2007
La cola de las distribuciones estadísticas alberga los valores extremos, que normalmente afectan a los datos de los estadísticos descriptivos como son la media, la desviación estándar, los máximos y mínimos, etc.
Esta característica llevó en su momento a crear la denominada estadística robusta, que se centra en descartar los extremos para que los estimadores tengan comportamientos más estables y menos dependientes de tales extremos. Hay que pensar que en ciertos entornos la aparición de valores extremos podria dificultar el control de un sistema crítico, mientras que el valor informativo de ese dato es ínfimo. Desde luego, esto debe plantearse para cada caso.
Volviendo a la cola, uno de los factores que parece que más llevan a su aparición es el hecho de la interacción entre elementos. Esto por ejemplo es aplicable a muchas áreas: cuando los usuarios se relacionan en una red social, aparece una distribución polinomial.
Inciso: Para los casos de las redes sociales (y en general de otros tipos de redes), hay un documento que me ha servido como punto de referencia para situarme. Se titula "Statistical mechanics of complex networks" (formato PDF, descarga libre). Vale decir que para los poco dados a las matemáticas, es un documento muy denso.
Esa interacción implica en algunos casos relación. Por ejemplo, el modelo entidad-relación de una base de datos normalizada puede presentar una densidad ajustada a un modelo polinomial (las relaciones 1:N no son homogéneas, con lo que si el tipo de relación de datos lo permite, puede darse el caso).
Para el caso de las distribuciones exponenciales, el caso va un poco más allá. Digamos que las distribuciones exponenciales tienen una cosa en común: en su fórmula consta de un modo u otro la forma matemática ef, donde f acostumbra a ser una función negativa en relación a X, que confiere a estas distribuciones formas generalmente redondeadas, tan habituales en (por ejemplo) la distribución normal, que forma parte de la familia de distribuciones exponenciales.
A lo que quiero llegar es a una diferencia sutil entre distribuciones polinomiales y exponenciales, basada en el proceso de generación de datos: a mi modo de ver, las distribuciones polinomiales son aplicables a fenómenos en los que existe relación entre elementos, pero que tal relación no genera un valor adicional que realimente el sistema.
Eso no significa que no hayan efectos derivados de la relación: en cualquier caso quedan fuera del sistema. En cambio, las distribuciones exponenciales no sólo establecen relaciones sino que también generan un valor. Es decir, tienen características de reproductibilidad del valor.
Esa reproductibilidad es lo que, por ejemplo, caracteriza la distribución de la riqueza en el mundo, que tradicionalmente se ajusta a modelos como el log-normal: Tener dinero no sólo significa tener más que los otros, sino poder reinvertirlo, obtener más beneficio... A eso me refiero en la reproductibilidad: lo que tradicionalmente dice la máxima "el dinero llama al dinero".
Otro caso muy claro es el hecho de compartir ideas: no sólo se comparte una idea, sino que el hecho de compartir las ideas, relacionarlas con las que ya tenía, y sacar de ahí conclusiones convierte nuestra mente en un órgano exponencialmente sabio.
Como colofón, dos principios:
Como curiosidad, existe una crítica a la Ley de Metcalfe en un artículo del IEEE Spectrum, donde se critica el hecho de no entrar en los detalles (precisamente donde entra en acción el efecto long tail): cada nodo funciona diferente, cada uno tiene su actividad.
En el momento que se acepta esa variedad, es donde entran las reglas de los porcentajes (la regla del 1%, 19%, 20% y 80%), que no son más que simplificaciones de la larga cola.
Read more »
may. 21
2007
Por un lado, un artículo que más bien parece un manifiesto: Social Networking Spam: The enemy of knowledge.
Tenemos también algo relacionado con el spam, aunque más enfocado a buscadores: el cloaking. Aquí tenemos un análisis de la prevención del cloaking en base a la cotización de términos.
El sitio del que he sacado este enlace tiene más interés: es la Adversarial Information Retrieval, es decir, el análisis de la recuperación de la información cuando los documentos van en contra (por seguir el hilo) del sistema de recuperación. Los documentos del año 2006 parecen interesantes, aunque no le echado un ojo a todos, a decir verdad.
De los documentos presentados en el 2007, destacaría el documento Combating Spam in Tagging systems (PDF), que me ha gustado bastante, aunque creo que el tema dará para más.
Otra fuente de información que me ha impresionado por su calidad es el sitio www.miislita.com. Es que tiene de todo: desde algoritmos de almacenamiento y recuperación, álgebra matricial, la aplicación de los fractales a la semántica... Muy interesante, ciertamente.
De momento eso es todo, sigo investigando porque el tema tiene mucho interés: aplicar las técnicas de spam a las búsquedas y a los sitios sociales va a dar mucho que hablar. Mi opinión es que reducir el tiempo de limpieza del usuario aumenta el tiempo de interacción en la red, y por ello de ventas, recuperación efectiva de información y en último término satisfacción. Quizá me equivoque.
Read more »
abr. 26
2007
Como precondición, es necesario disponer de una URL referencial (es decir, la URL donde estaba el enlace). Esta URL referencial tiene una estructura de Array del siguiente tipo:
$mxReferer = array ("protocol" => "","domain"=>"","uri"=>"","params"=>"","anchor"=>"");
LLamaremos a la función enviando la URL, que puede ser relativa, pero siempre al referente. Es decir: recogeremos del referente la información que falta en la URL analizada.
Para el caso que presento en el código de muestra, se supone que estamos en el documento "http://www.sopadebits.com/un_primer_post" y nos encontramos con un enlace cuyo atributo href es "/cuando_etiquetas_un_recurso".
El código de la función es:
$mxReferer = array
(
"protocol" => "http",
"domain" => "www.sopadebits.com",
"uri" => "content/view/",
"params" => "",
"anchor" => ""
);
print_r(tokenizeUrl("/un_primer_post"));
function tokenizeUrl($szUrl = false,$mxReferer = false)
{
if($szUrl == false || $mxReferer == false)
return false;
$mxTokens = array();
preg_match
(
"/^(((http|https|ftp):)?(\/\/)?|\/)([\w\.\/\_-%=&@]+)*((?)[\w\.\/\_-%=&@]+)?((#)[\w\.\/\_-%=&@]+)?$/i",
$szUrl,
$mxUrl
);
if($mxUrl[5] == '')
$mxUrl[5] = $mxReferer['uri'];
$mxUri = explode("/",$mxUrl[5]);
if($mxUrl[1] == $mxUrl[4])
{
$mxTokens['protocol'] = $mxReferer['protocol'];
if($mxUrl[4]=='//')
{
// no protocol, yes domain
$mxTokens['domain'] = $mxUri[0];
array_shift($mxUri);
}
else
{
// no protocol, no domain
$mxTokens['domain'] = $mxReferer['domain'];
}
}
else
{
if($mxUrl[4] == '//')
{
// no protocol, yes domain
$mxTokens['protocol'] = $mxUrl[3];
$mxTokens['domain' ] = $mxUri[0];
array_shift($mxUri);
}
else
{
// no protocol, no domain
$mxTokens['protocol'] = $mxReferer['protocol'];
$mxTokens['domain' ] = $mxReferer['domain'];
}
}
if(isset($mxUrl[7]))
{
$mxTokens['params'] = substr($mxUrl[6],1,strlen($mxUrl[6])-1);
}
if(isset($mxUrl[9]))
{
$mxTokens['anchor'] = substr($mxUrl[8],1,strlen($mxUrl[8])-1);
}
$mxTokens['uri'] = implode("/",$mxUri);
return $mxTokens;
}
?>
El resultado debe(ría) ser:
array
(
"protocol" => "http",
"domain" => "www.sopadebits.com",
"uri" => "/cuando_etiquetas_un_recurso"
)
Los parámetros y el ancla son opcionales. La simplicidad apremia, ya que trato lo que va "después" del dominio como un todo, sin importarme si se trata de un archivo php, html ni nada por el estilo.
A lo que vamos: la expresión regular. A ver si así se ve mejor:
/^(((http|https|ftp):)?(\/\/)?|\/)([\w\.\/\_-%=&@]+)*((?)[\w\.\/\_-%=&@]+)?((#)[\w\.\/\_-%=&@]+)?$/i
No me estoy acordando de la familia de nadie, que conste...
^ : Esto indica que la expresión se debe encontrar al principio de línea (es decir, que si hubiera espacios en blanco al principio, no se encontrarían coincidencias. Se podría realizar un trim pero eso ya lo dejo para quien le interese).
(((http|https|ftp):)?(\/\/)?|\/)
Esta parte verifica si la URL tiene el protocolo indicado, y en caso afirmativo, verifica que se trata de http, https o ftp. Incluso el FTP podría sobrar, pero mira... viene de propina ;-)
Como vemos, se abren tres paréntesis. Esto indica que la cadena que concuerde se guardará en una matriz ($mxUrl para el caso del código anterior).
Esto es importante: las URLs se pueden indicar en la forma "//dominio/uri...". Es decir, no siempre debe indicarse el protocolo. Lo más conocido es que suponga el nombre de dominio y que por lo tanto empiece por "/uri...", pero he querido asegurar esta posibilidad.
Los tres paréntesis siguientes son prácticamente idénticos. El primero corresponde a la URI, el segundo a los parámetros indicados con el interrogante y el tercero es el ancla. Echando un vistazo, sólo se diferencian del primer carácter de la expresión, que es lo que indica cuándo empieza uno y acaba el otro. La expresión:
([\w\.\/\_-%=&@]+)*
Busca 0 o más coincidencias (el asterisco) para un carácter alfanumérico (w), punto, barra, guión bajo o medio, signo % (esto es para los caracteres codificados), signo igual, ampersand y arroba. Esto puede ser una cadena (el signo + después del corchete indica que se pueden encontrar 1 o más ocurrencias) y los caracteres aceptados pueden estar en cualquier orden (se indican dentro de un corchete).
Bueno, creo que con esto ya basta por hoy. Si falta algún carácter, quizá se lo haya tragado el editor de HTML.
Read more »
abr. 4
2007
Hablo de una situación que viví hace más de diez años, con lo que no voy a entrar en detalles. En un campeonato abierto de ajedrez, cuando las partidas de la jornada ya estaban terminándose, surgió una conversación entre dos ajedrecistas de buen nivel (uno de ellos era Maestro Internacional).
Cuando me acerqué, oí que estaban comentando sobre cómo variaba la valoración de un jugador para una determinada posición, según si se realizaban las mismas jugadas con blancas o negras. Es decir, al empezar una partida, empiezan las negras, que juegan las mismas jugadas que harían las blancas en situación normal.
El principal impacto que se percibe es el cambio de situación. Las aperturas parecen diferentes, la misma posición que con blancas podía parecer equilibrada (sin ventajas para los oponentes) era ahora muy mala para las negras. Una situación buena para las blancas, era simplemente de equilibrio para las negras. ¿Por qué? Del sinfín de razones que se me ocurren, apunto las siguientes:
En el fondo, da igual si hablamos de ajedrez o del entorno empresarial: la iniciativa (o lo que por analogía se llama the first mover's advantage) es importante, pero los errores en la iniciativa traen dos tipos de consecuencias: las propias del error, y la posibilidad de perder esa misma iniciativa.
Traspasando esto a la partida Windows-Linux, ¿os imagináis por un momento si se cambiaran los colores? Es decir, en el mercado estaba Linux con posición dominante, y aparece Windows... Con errores, vulnerabilidades, inestabilidad...
En esa situación... ¿Qué cuota de mercado creéis que absorbería Windows?
También estoy pensando qué pasaría si el conjunto de distribuciones de Linux llegaran a tener mayor cuota de mercado que Windows (personalmente creo que aún queda). Es decir, si Linux jugara con blancas y llega Windows... ¿Què estaría ofreciendo mejor que la comunidad Linux? Sea lo que sea, eso es lo que tiene pendiente Linux para mejorar su juego y obtener en algún momento ventaja por calidad.
Read more »
abr. 2
2007
Lo que me interesará tratar son tres aspectos diferentes de la información:
Las tres actividades son de carácter técnico, en el sentido que debes aplicarlo a algo más. Sin embargo, creo que con el tiempo han ido sucediendo cosas, y todas ellas relacionadas con el trabajo relacionado con la información:
Desde luego no voy a matar todo el tema en un solo post. Pronto vendrán otros...
Read more »© 2007 and beyond Mario Alberich, licensed under CC-BY-SA unless stated otherwise.