Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

martes, 18 de septiembre de 2012

:-)

Tal día como hoy, hace nada más y nada menos que tres décadas, nació el emoticono. Esa carita sonriente (smiley face) formada por los dos puntos, el guión y el cierre de paréntesis que tantos malentendidos ha evitado a lo largo de los años en correos electrónicos, foros de discusión y redes sociales.

Si hemos de ser fieles a lo que conocemos, el inventor (o uno de ellos, como bien dice el mismo en su página web) del emoticono fue el profesor Scott E. Fahlman, un experto en inteligencia artificial que, por aquél entonces, trabajaba en la universidad Carnegie Mellon.


Fahlman, como "enganchado" a las BBS (como quien dice, el Twitter de la época —bueeeno, no exactamente, pero seguro que el ánimo comunicativo que despertaban era similar—), había comprobado cómo en estos boletines surgían con frecuencia encendidos debates debidos no tanto a la disparidad de ideas como a los malentendidos que de su exposición podían surgir. Especialmente porque estos precursores de los grupos de noticias estaban tan abiertos a la comunidad que profesores y alumnos debatíanen ellos sobre todo tipo de asuntos: política, asuntos académicos, el partido del domingo o avisaban de que alguien había perdido el móvil ;) la cartera en el baño. Así fue como Fahlman y otros compañeros propusieron marcar de algún modo aquellos mensajes que no debieran tomarse demasiado en serio, y para tal fin, dado que en aquella época todos los mensajes se transmitían en codificación ASCII, presentó la idea de usar el símbolo :-) para marcar los mensajes poco serios y :-( para hacer lo propio con los que sí lo eran, aunque estos emoticonos terminaron representando sentimientos tan universales como la alegría y la tristeza.

He aquí su mensaje original, recuperado hace años en un ejercicio de arqueología tecnológica:

19-Sep-82 11:44    Scott E  Fahlman             :-)
From: Scott E Fahlman <Fahlman at Cmu-20c>

I propose that the following character sequence for joke markers:

:-)

Read it sideways. Actually, it is probably more economical to mark
things that are NOT jokes, given current trends. For this, use

:-(

Si queréis leer a Fahlman hablando de su invención, podéis encontrar el artículo "Smiley Lore" en su web.

¡Feliz cumpleaños, emoticono! :-)

miércoles, 30 de mayo de 2012

Interfaz universal

Cuando en un diseño las interfaces crecen en complejidad tanto como incertidumbre poseen los requisitos del desarrollo que se va a acometer, llega un punto en el que se pueden representar mediante la «interfaz universal»:

    public interface IUniversal
    {
        object Action(object param);
    }

En ese momento, es posible demostrar que se está caminando por el filo de la navaja por el método de la reducción al absurdo.

viernes, 25 de mayo de 2012

Reflexionando sobre genéricos

Ha llovido mucho desde que el Microsoft incorporase los genéricos en su .NET Framework . Fue en la versión 2.0, a finales del año 2005, y aunque sus beneficios se dejaron notar desde el primer momento entre la comunidad de desarrolladores y a día de hoy se usan con total normalidad, en ocasiones tenemos que pedirles “un poco más”. Por ejemplo, cuando el tipo de dato genérico no es conocido en tiempo de compilación y tenemos que inferirlo durante la ejecución de la aplicación.

Aunque no descubro nada bueno aquí, me he decidido a recuperar para el blog algunas de esas microentradas que antaño aparecían por aquí, buscando imprimir de nuevo un ritmo de publicaciones adecuado. Como hace poco tuve que usar técnicas de reflexión sobre genéricos y comprobé que apenas hay literatura en castellano sobre el tema, aquí van unas píldoras para ver cómo podríamos realizar algunas operaciones muy concretas en la situación que he descrito en el párrafo anterior.

Crear una clase genérica dinámicamente a partir de un objeto

Es muy sencillo usar una clase genérica y crear objetos de un determinado tipo en tiempo de compilación. Por ejemplo, si tenemos la clase
public class Data<T>
{
   public T Value { getset; }
}
podemos crear un objeto que contenga un entero simplemente así:
Data<int> data = new Data<int>();
data.Value = 1;
Para crear una clase genérica en tiempo de ejecución, esto es, sin definirla en el código durante la compilación, tendremos que jugar un poco con los tipos en .NET y con la clase Activator, que nos permite instanciar dinámicamente un objeto a partir de un tipo determinado. Así, podríamos conseguir crear un Data dinámicamente con el siguiente código:
Type dataType = typeof(Data<>);
Type genericType = dataType.MakeGenericType(value.GetType());
genClassesArray.Add(Activator.CreateInstance(genericType));

 

Obtener el tipo anidado de una clase genérica

Puede ocurrir que uno de nuestros métodos reciba un parámetro con un tipo dinámico (por ejemplo, un List) y queramos saber el tipo del dato genérico anidado. Esto se consigue con facilidad:
Type nestedType = value.GetType().GetGenericArguments()[0];

 

Llamar a un método genérico con el tipo de un dato obtenido en tiempo de ejecución

Por último, podríamos tener un método genérico y desear llamarlo dinámicamente, sin saber a priori el tipo anidado que estamos gestionando en esa ejecución de nuestro código. Por ejemplo, el siguiente método:
public Data<T> GetDataWithValue<T>(string stringValue)
{
return new Data<T>() { Value = (T)Convert.ChangeType(stringValue, typeof(T)) };
}
realiza una conversión (un casting) del valor recibido como string al tipo que se le indica y devuelve un tipo genérico Data con el valor indicado (pero con su tipo correspondiente). Para realizar la llamada sin conocer a priori el tipo T, tendremos que usar, ahora sí, objetos MethodInfo que se incluyen dentro de System.Reflection e invocar la llamada al método en cuestión. El uso de Convert.ChangeType() que vemos en el ejemplo es necesario al encontrarnos ante un valor expresado como una cadena de caracteres.

Podemos conseguir realizar la llamada dinámicamente, por ejemplo, así:
MethodInfo method = typeof(MyClassDemo).GetMethod("GetDataWithValue");
MethodInfo genericMethod = method.MakeGenericMethod(value.GetType());
var result = genericMethod.Invoke(thisnew object[] { value.ToString() });
Vemos que tendríamos que obtener el método a invocar del tipo que lo contiene (en este caso, una clase llamada MyClassDemo) y crear un método dinámico referido al tipo del objeto value que hemos recibido. A continuación, lo invocaríamos pasándole los parámetros en un array de objetos y con un primer parámetro que será nulo si el método es estático o el objeto del tipo MyClassDemo que realiza la llamada en caso contrario. En el ejemplo en cuestión se especifica el this porque se trata de una llamada a un método de la propia clase en la que estamos realizando las pruebas.

Y poco más. Como veis, a la potencia de los genéricos se le puede sacar mucho más partido si «reflexionamos» un poco sobre ellos. ;)

martes, 22 de mayo de 2012

Journal of Feelsynapsis n.º 4





Aunque últimamente estoy desaparecido y apenas he publicado en el blog (aunque el uso del plural aquí sería más correcto, ya que tengo todos prácticamente paralizados), lo cierto es que tengo ganas de retomar la escritura por aquí y espero que el verano sea un periodo fructífero en este sentido. Entretanto, y para no olvidar las buenas costumbres, os dejo uno de los últimos artículos que he publicado en Journal of Feelsynapsis, una revista de divulgación científica que no os podéis (debéis) perder. Este sí que trata sobre informática y podéis encontrarlo en el n.º 4 de esta publicación. Su título, "Lenguajes esotéricos... de programación".

Eso sí, una vez que lo terminéis, pensad que el resto de la revista es infinitamente mejor. Así que si os gustó, corred a seguir leyéndola, y en el hipotético caso de que no fuese así leedla también porque, como os digo, los demás artículos no desmerecen la cuidada edición que les acoge y os van a encantar a buen seguro.

Feliz lectura.

martes, 1 de mayo de 2012

1 de mayo

Siempre es buena la capacidad de reírse de uno mismo. El Día del Trabajo homenajeado desde la comedia en el mundillo informático.



jueves, 12 de enero de 2012

Decálogo de Granada sobre el estado del Software Libre en España

Decálogo de Granada sobre el estado del Software Libre en España
  1. El software libre atraviesa su mejor momento en España. Las empresas que creen en el software libre y apuestan por él se cuentan como casos de éxito, y en un ambiente de crisis están creando valor añadido, tecnología y puestos de trabajo.
  2. Existe una brecha entre los anhelos de los movimientos de base y lo que se promueve desde la Administración, tanto en énfasis como en dirección de los esfuerzos. Sobre todo la Administración debe promover que se cubra esa brecha.
  3. Las administraciones públicas deben apoyar iniciativas o promover el desarrollo de software para su uso en la Administración cuando sus necesidades no estén suficientemente cubiertas por aplicaciones libres.
  4. La alfabetización digital es la clave del acceso a las tecnologías abiertas como valor fundamental que se debe promover desde la Administración y apoyarse desde los mo-vimientos de base.
  5. El Software Libre no se entiende si no es formando parte de un ecosistema, junto con conceptos cercanos como OpenData, Open Government y gestión de la identidad electrónica y la privacidad.
  6. Cualquier libertad sirve de entrada a cualquier otra; el gobierno abierto promoverá el software libre y el conocimiento libre lleva a la liberación de datos. Eventualmente hay que ser consciente y promover las sinergias entre las diferentes iniciativas y conceptos.
  7. El uso de tecnología no es neutral, implica la cesión y la adquisición de una serie de derechos. Es fundamental la concienciación con respecto a este hecho, y la exigencia a todo tipo de aplicaciones en la nube o redes sociales del derecho de libertad de acceso y de protección de la intimidad.
  8. La adopción de aplicaciones y datos libres por parte de usuarios debe conllevar un proceso de toma de decisiones en el que todos los actores intervengan. Obligar al uso de una aplicación de software libre es un contrasentido, aunque la Administración debe hacer cumplir la legislación existente sobre adopción de aplicaciones libres frente a privativas.
  9. Las nuevas tecnologías, como las aplicaciones móviles y la nube, tenderán al software libre eventualmente, porque en ocasiones eso ha sucedido en casi todas las áreas: servidores, navegadores o software de escritorio.
  10. La legislación existente sobre reusabilidad del software y neutralidad tecnológica es in-suficiente si no se conoce y aplica por parte de las administraciones y actores implicados.
Redactado en Granada durante la celebración de la Open Source World Conference en enero de 2012.

Decálogo de Granada sobre el estado del Software Libre en España

Decálogo de Granada sobre el estado del Software Libre en España

  1. El software libre atraviesa su mejor momento en España. Las empresas que creen en el software libre y apuestan por él se cuentan como casos de éxito, y en un ambiente de crisis están creando valor añadido, tecnología y puestos de trabajo.
  2. Existe una brecha entre los anhelos de los movimientos de base y lo que se promueve desde la Administración, tanto en énfasis como en dirección de los esfuerzos. Sobre todo la Administración debe promover que se cubra esa brecha.
  3. Las administraciones públicas deben apoyar iniciativas o promover el desarrollo de software para su uso en la Administración cuando sus necesidades no estén suficientemente cubiertas por aplicaciones libres.
  4. La alfabetización digital es la clave del acceso a las tecnologías abiertas como valor fundamental que se debe promover desde la Administración y apoyarse desde los mo-vimientos de base.
  5. El Software Libre no se entiende si no es formando parte de un ecosistema, junto con conceptos cercanos como OpenData, Open Government y gestión de la identidad electrónica y la privacidad.
  6. Cualquier libertad sirve de entrada a cualquier otra; el gobierno abierto promoverá el software libre y el conocimiento libre lleva a la liberación de datos. Eventualmente hay que ser consciente y promover las sinergias entre las diferentes iniciativas y conceptos.
  7. El uso de tecnología no es neutral, implica la cesión y la adquisición de una serie de derechos. Es fundamental la concienciación con respecto a este hecho, y la exigencia a todo tipo de aplicaciones en la nube o redes sociales del derecho de libertad de acceso y de protección de la intimidad.
  8. La adopción de aplicaciones y datos libres por parte de usuarios debe conllevar un proceso de toma de decisiones en el que todos los actores intervengan. Obligar al uso de una aplicación de software libre es un contrasentido, aunque la Administración debe hacer cumplir la legislación existente sobre adopción de aplicaciones libres frente a privativas.
  9. Las nuevas tecnologías, como las aplicaciones móviles y la nube, tenderán al software libre eventualmente, porque en ocasiones eso ha sucedido en casi todas las áreas: servidores, navegadores o software de escritorio.
  10. La legislación existente sobre reusabilidad del software y neutralidad tecnológica es in-suficiente si no se conoce y aplica por parte de las administraciones y actores implicados.
Redactado en Granada durante la celebración de la Open Source World Conference en enero de 2012.