Mi nuevo blog

Tras un largo paréntesis he decidido retomar mi actividad bloguera, pero en lugar de seguir aquí empiezo uno completamente nuevo, donde también escribiré los artículos en inglés (no prometo gran calidad del idioma, es más un ejercicio que algo serio) y puede que en algún otro idioma más adelante.

Nos vemos en mi nuevo blog.

Anuncio publicitario

Closures en C#

Para empezar el año y mientras esperamos la llegada de Marty McFly, un minipost sobre closures, una estructura imprescindible en JavaScript y otros lenguajes funcionales, pero ¿las podemos hacer en C#? Y la respuesta es:
¡Por supuesto! Y aquí tenéis un ejemplo:

public static Func<int> Fib()
{
    int a = 0, b = 1;
    return () => { var temp = b; b = a + b; return a=temp; };
}

static void Main(string[] args)
{
    var fib=Fib();

    for (int i = 0; i < 12;i++ )
        Console.Write("{0} ", fib());
}

Como veis el uso de funciones anónimas nos ayuda mucho. El ejemplo lo he sacado de otro lenguaje sobre el que estaba leyendo. Yo ahora me voy a buscar un monopatín 😉

La palabra clave yield

La semana pasada el maestro Eduard Tomás propuso la solución del reto MSDN utilizando la palabra clave yield en un método para evitar el uso de una colección adicional.

¿Qué se esconde tras esta palabra clave?

El patrón Iterator

Si has escrito código C# alguna vez, ya conocerás las interfaces IEnumerable e IEnumerable<T> que permiten recorrer fácilmente una colección con la palabra clave foreach:

IEnumerable<int> list=new int[]{1,2,3,4};
//...
foreach (var value in list)
{
    //do something
}

Como veis en el ejemplo, este interfaz lo implementan todas las colecciones desde los tipos más básicos como el Array (aunque de una forma un tanto particular).

El interfaz sólo tiene un método, GetEnumerator que devuelve un IEnumerator, que nos devolverá una clase que es la que realmente sabe iterar sobre nuestra colección de elementos. Es el típico patrón Iterator del GoF (Design Patterns: Elements of Reusable Object-Oriented Software).

Sigue leyendo

Funcionalidades de Windows 10 en Windows 8

Hace dos días anunciaron Windows 10 y a partir de ayer por la tarde puedes participar en la preview como Insider. Puedes instalarla en una máquina virtual, pero yo ya la he instalado en una partición de mi portátil para conseguir la experiencia al 100%. Ya os iré contando, aunque os advierto que la pantalla de inicio era mi feature favorita de Windows 8 y no se cuanto tardaré en volver a activarla:
Use Start Menu in Windows 10
La cuestión es que hay mucha gente que no va a instalarse Windows 10 en su máquina de uso diario hasta que no sea una versión estable, pero eso no es obstáculo para poder tener algunas cosas que nos traerá Windows 10, aquí tenéis algunas utilidades para mejorar vuestro Windows 8 / 8.1 mientras acaban el nuevo:

  • Cortapega en la consola: en la nueva consola de Windows 10 ya podemos hacer copy/paste con CTRL+C y CTRL+V sin que nos aparezcan los dichosos ^C y ^V, pero hace mucho que existen consolas mejoradas que permiten hacer eso y mucho más. Mi favorita es ConEmu, tiene pestañas, corta/pega y hasta se pueden inyectar plugins.
  • Escritorios múltiples: en Windows 10 por fin tendremos múltiples escritorios. Aunque Windows tenía soporte nativo para esta característica desde hace tiempo, creo que Windows XP ya lo traía, y tenemos una herramienta del conjunto de SysInternals que nos proporciona 4 escritorios. Desktops v2.0, aunque en Windows 8.1 el botón de inicio sólo funciona en la pantalla 1, 😦 grrr.

Pues ahí lo tenéis, mientras tanto yo instalo Visual Studio 14 CTP 3 en Windows 10 a ver qué tal anda…

visual studio 14 in Windows 10

Inhabilitar la transición de entrada para algunos controles del Grid XAML

Las animaciones de entrada, salida, añadir elemento, seleccionar, ordenar, etc., que trae el SDK de la Tienda Windows aportan un toque de calidad a nuestras apps. Las páginas que creamos desde Visual Studio incorporan algunas transiciones por defecto, aunque en algunas ocasiones nos interesará inhabilitarlas.

Eliminar las transiciones de entrada de un Grid es sencillo, sólo tendremos que borrar la colección de transiciones que ya nos habrá añadido el SDK en la página y, por si acaso, asegurarnos que no queda ninguna:


<Page
x:Class="App1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Page.Resources>
<Style TargetType="Grid">
<Setter Property="ChildrenTransitions">
<Setter.Value>
<TransitionCollection/>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<!– Content –>
</Grid>
</Page>

Sigue leyendo

Migrando el tres en raya: Azure SDK 2.4, SignalR 2.1.1, Windows 8.1

El año pasado escribí una serie de tres artículos donde explicaba cómo crear un juego de tres en raya para jugar online en tiempo real, desde el navegador y también desde una app Windows 8. Como la tecnología avanza muy rápido, al cabo de un mes de escribir el artículo el código ya no compilaba con los últimos SDK. Así que, ahora que estoy de vacaciones me he dedicado a procrastinar y a actualizar alguno de mis proyectos personales para no tener que hacer lo que me había propuesto :). Aquí os dejo los pasos a realizar para migrar, aunque podéis descargar directamente el nuevo paquete aquí.

Como primer paso, conviene tener Visual Studio 2013.3 instalado y actualizar el SDK de Windows Azure al último disponible (2.4 por ahora).
Sigue leyendo

Kinect For Windows v2 ahora trae caras

facerecog

El nuevo SDK de Kinect trae unas cuantas cosas muy interesantes, como un editor de gestos (un gran ejemplo de para qué sirve el machine learning) y vuelve el reconocimiento de caras, una por cada usuario :).

No os esperéis que el SDK os reconozca a vosotros y os distinga de los demás, eso, por lo menos por ahora, lo tendréis que desarrollar (o adaptar) vosotros, o comprar alguna de esas librerías que funcionan tan bien. Trae 94 puntos de identificación para hasta 5 usuarios simultáneos. Lo que tendréis, en la versión simple, es la posición de ojos, nariz y boca del usuario.
Sigue leyendo

Tareas de fondo en aplicaciones universales

Hace unos días @johnnyjosep me preguntó cómo podía hacer en una aplicación universal para descargar nuevo contenido cada cierto tiempo sin tener la aplicación abierta.

Sí, os debo la serie de artículos sobre el caché de HTTP, aunque si os fijáis bien en este hay un pequeño ejemplo de uso de la cabecera If-Modified-Since.

La forma más eficiente de notificar a la aplicación que algo remoto ha cambiado, es utilizar un sistema de notificaciones push, estilo Azure Notification Hubs, pero como esa opción tiene un coste, también tenemos otra posibilidad más económica (para nosotros): crear una Background Task con un temporizador, que compruebe desde el cliente si el archivo ha cambiado.

Sigue leyendo

Caché HTTP de cliente en C# (1 de 4): aplicaciones de escritorio

Hoy en día es muy habitual utilizar contenido web en nuestras aplicaciones y eso penaliza el rendimiento. Para mejorarlo vamos a tener que almacenar en caché dicho contenido. Hacerlo bien no es difícil, pero es necesario conocer cómo funcionan los mecanismos de caché en la web y buscar dentro de la documentación de .Net cómo podemos aprovechar estos.

Upload / Download
Upload / Download por johntrainor, en Flickr

Como no soy el primero en tener la necesidad, existen algunas entradas en StackOverflow sobre el tema. Parece que la solución propuesta funciona bien, pero todas los que he visto se olvidan de algunos puntos importantes, como por ejemplo pedir al servidor si hay una versión actualizada del archivo, añadir técnicas de scavenging para que el contenido descargado caduque, etc. Además se olvidan de que el sistema operativo ya sabe cachear y es un poco raro que tengamos que volver a programar el caché que tan bien hacen los navegadores.

Te recomiendo leer el artículo hasta el final, pero si tienes mucha prisa puedes descargar el código de ejemplo en GitHub.

Sigue leyendo

Indice secuencial con Table Storage en Azure

Azure Table Storage es un sistema NoSQL de almacenamiento de tipo clave/valor. Es un sistema pensado para grandes volúmenes de datos distribuidos en alta disponibilidad y algunas cosas que son triviales hoy en día en un motor SQL estándar, en un NoSQL es muy posible que ni siquiera estén contempladas. Esto nos obliga a pensar en otras técnicas o incluso otras formas de almacenar los datos y sus relaciones.
Numbers

Hace unos días necesité un contador secuencial para almacenar en tablas del Table Storage. Ya se que muchos me diréis que no es lo más adecuado para el Storage, pero la secuencia es para mostrar por pantalla y resulta que los humanos llevamos muy mal el retener números de más de seis cifras.
Sigue leyendo