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.

sábado, 15 de febrero de 2014

Estadísticas al cierre

Hoy, 15 de febrero de 2014, realizo una copia del histórico de entradas de www.lobosoft.es a este blog y realizo un borrado de las mismas para comenzar una nueva andadura. Ayer tuve un momento de catarsis y decidí que querer mantener todo el lastre de las antiguas entradas llevaba al blog a la vía muerta en la que estaba, sin entradas durante varios años. Así que, sin avergonzarme en absoluto del pasado, pero queriendo hacer presente mi futuro, decido dar el paso que tanto había postergado.

Dejo por aquí esta última entrada, junto a algunas de las estadísticas del sitio web al cierre. Sé que los próximos meses darán un vuelco a las mismas, e incluso que mucha gente no encontrará las entradas. Desde el punto de vista SEO es casi un suicidio, pero más vale esto que permanecer en el letargo en el que estaba.

Espero que disfruten de esta nueva andadura tanto como yo lo hice en los comienzos del antiguo 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.